1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
Jip J. Dekker fad1b07018 Squashed 'software/minizinc/' content from commit 4f10c8205
git-subtree-dir: software/minizinc
git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
2021-06-16 14:06:46 +10:00

115 lines
6.1 KiB
MiniZinc

/***
@groupdef stdlib.reflect Reflection operations
These functions return information about declared or inferred variable
bounds and domains.
*/
/** @group stdlib.reflect Return lower bound of \a x */
function int: lb(var int: x);
/** @group stdlib.reflect Return upper bound of \a x */
function int: ub(var int: x);
/** @group stdlib.reflect Return lower bound of \a x */
function int: lb(var opt int: x);
/** @group stdlib.reflect Return upper bound of \a x */
function int: ub(var opt int: x);
/** @group stdlib.reflect Return lower bound of \a x */
function float: lb(var float: x);
/** @group stdlib.reflect Return upper bound of \a x */
function float: ub(var float: x);
/** @group stdlib.reflect Return lower bound of \a x */
function float: lb(var opt float: x);
/** @group stdlib.reflect Return upper bound of \a x */
function float: ub(var opt float: x);
/** @group stdlib.reflect Return lower bound of \a x */
function set of int: lb(var set of int: x);
/** @group stdlib.reflect Return upper bound of \a x */
function set of int: ub(var set of int: x);
/** @group stdlib.reflect Return array of lower bounds of the elements in array \a x */
function array[$U] of int: lb(array[$U] of var int: x) =
arrayXd(x,[lb(xx) | xx in array1d(x)]);
/** @group stdlib.reflect Return array of upper bounds of the elements in array \a x */
function array[$U] of int: ub(array[$U] of var int: x) =
arrayXd(x,[ub(xx) | xx in array1d(x)]);
/** @group stdlib.reflect Return array of lower bounds of the elements in array \a x */
function array[$U] of float: lb(array[$U] of var float: x) =
arrayXd(x,[lb(xx) | xx in array1d(x)]);
/** @group stdlib.reflect Return array of upper bounds of the elements in array \a x */
function array[$U] of float: ub(array[$U] of var float: x) =
arrayXd(x,[ub(xx) | xx in array1d(x)]);
/** @group stdlib.reflect Return array of lower bounds of the elements in array \a x */
function array[$U] of set of int: lb(array[$U] of var set of int: x) =
arrayXd(x,[lb(xx) | xx in array1d(x)]);
/** @group stdlib.reflect Return array of upper bounds of the elements in array \a x */
function array[$U] of set of int: ub(array[$U] of var set of int: x) =
arrayXd(x,[ub(xx) | xx in array1d(x)]);
/** @group stdlib.reflect Return minimum of all lower bounds of the elements in array \a x */
function int: lb_array(array[$U] of var opt int: x);
/** @group stdlib.reflect Return maximum of all upper bounds of the elements in array \a x */
function int: ub_array(array[$U] of var opt int: x);
/** @group stdlib.reflect Return minimum of all lower bounds of the elements in array \a x */
function float: lb_array(array[$U] of var opt float: x);
/** @group stdlib.reflect Return maximum of all upper bounds of the elements in array \a x */
function float: ub_array(array[$U] of var opt float: x);
/** @group stdlib.reflect Return intersection of all lower bounds of the elements in array \a x */
function set of int: lb_array(array[$U] of var set of int: x);
/** @group stdlib.reflect Return union of all upper bounds of the elements in array \a x */
function set of int: ub_array(array[$U] of var set of int: x);
/** @group stdlib.reflect Return domain of \a x */
function set of int: dom(var int: x);
/** @group stdlib.reflect Return domain of \a x */
function set of int: dom(var opt int: x);
function set of int: dom(var bool: b) =
if is_fixed(b) then if fix(b) then {1} else {0} endif else {0,1} endif;
/** @group stdlib.reflect Return union of all domains of the elements in array \a x */
function set of int: dom_array(array[$T] of var int: x);
/** @group stdlib.reflect Return union of all domains of the elements in array \a x */
function set of int: dom_array(array[$T] of var opt int: x);
/** @group stdlib.reflect Return approximation of union of all domains of the elements in array \a x */
function set of int: dom_bounds_array(array[$T] of var int: x);
/** @group stdlib.reflect Return approximation of union of all domains of the elements in array \a x */
function set of int: dom_bounds_array(array[$T] of var opt int: x);
/** @group stdlib.reflect Return cardinality of the domain of \a x */
function int: dom_size(var int: x) = card(dom(x));
/** @group stdlib.reflect Test if variable \a x has declared, finite bounds */
function par bool: has_bounds(var int: x);
/** @group stdlib.reflect Test if variable \a x has declared, finite bounds */
function par bool: has_bounds(var float: x);
/** @group stdlib.reflect Test if variable \a x has a declared, finite upper bound */
function par bool: has_ub_set(var set of int: x);
/** @group stdlib.reflect Check if the value of \a x is fixed at this point
in evaluation. If it is fixed, return its value, otherwise abort. */
function $T: fix(var opt $T: x);
/** @group stdlib.reflect Check if the value of every element of the array \a x is fixed
at this point in evaluation. If all are fixed, return an array of their values, otherwise abort. */
function array[$U] of $T: fix(array[$U] of var opt $T: x);
/** @group stdlib.reflect Test if \a x is fixed */
function bool: is_fixed(var opt $T: x);
/** @group stdlib.reflect Test if \a x is fixed */
function bool: is_fixed(set of $T: x);
/** @group stdlib.reflect Test if \a x is fixed */
function bool: is_fixed(var set of int: x);
/** @group stdlib.reflect Test if every element of array \a x is fixed */
function bool: is_fixed(array[$U] of var opt $T: x);
/** @group stdlib.reflect Test if \a x is annotated \a a */
function bool: has_ann(var opt $T: x, ann: a);
/** @group stdlib.reflect Test if \a x is annotated \a a */
function bool: has_ann(var set of $T: x, ann: a);
/** @group stdlib.reflect Test if \a x is annotated \a a */
function bool: has_ann(var set of int: x, ann: a);
/** @group stdlib.reflect Annotate declaration of \a x with annotation \a a */
function bool: annotate(var opt $T: x, ann: a);
/** @group stdlib.reflect Annotate declaration of \a x with annotation \a a */
function bool: annotate(set of $T: x, ann: a);
/** @group stdlib.reflect Annotate declaration of \a x with annotation \a a */
function bool: annotate(var set of int: x, ann: a);
/** @group stdlib.reflect Test if \a x and \a y are the same variable */
function bool: is_same(var opt $T: x, var opt $U: y);