Encodings¶
In this section we show a basic documentation of our encoding in the form of a docstring of the used predicates.
Predicate Summary ¶
| Name | Definition | Type |
|---|---|---|
_hit/3
|
|
|
allow/3
|
Defines an entry of a table constraint (for allowed combinations) |
|
binary/4
|
Defines a binary operation |
|
column/4
|
Defines a column of a table constraint |
|
constant/1
|
Auxiliary predicate which defines a constant (string) |
|
constraint/2
|
Instantiates a constraint |
|
default/2
|
Defines a default value |
|
discrete/1
|
Declares the part of a discrete attribute |
|
domain/2
|
Declares a domain element of a discrete attribute |
|
function/3
|
Defines a calculation involving a function |
|
hit/3
|
Whether an entry of a table constraint is satisfied (only for flingo encoding) |
|
index/2
|
The index of a variable in a cardinality set, for example, "root.frame[1]" has index 1 |
|
integer/1
|
Declares the part of an integer attribute |
|
number/2
|
Auxiliary predicate which defines a constant number |
|
parent/2
|
The parent of a variable |
|
part/1
|
Declares the type of a part |
|
range/3
|
Declares the range of an integer attribute |
|
set/2
|
Defines the members of a set (for cardinalities and aggregate functions) |
|
type/2
|
The type of a variable |
|
unary/3
|
Defines a unary operation |
|
undefined/1
|
Whether a variable or (sub)formula is undefined |
|
user_include/1
|
An include statement from user input |
|
user_value/2
|
An attribute variable value set by user input |
|
include/1
|
Whether a variable is included in the configuration |
|
value/2
|
The value of an attribute variable |
|
consistent/1
|
Whether a user input variable is consistent with the configuration model |
|
consistent/2
|
Whether a user input value is consistent with the configuration model |
|
defined/1
|
Whether a variable or (sub)formula is defined |
|
defined/2
|
Whether a table constraint is defined |
|
not_hit/3
|
Whether a row of a table constraint is not satisfied |
|
satisfied/1
|
Whether a variable or (sub)formula is satisfied |
|
satisfied/2
|
Whether a table constraint is satisfied |
|
undefined/2
|
Whether a table constraint is undefined |
|
violated/1
|
Whether a constraint is violated (Boolean, table or lower bound) |
|
Dependency Graph ¶
flowchart LR
include/1(["include/1"])
type/2(["type/2"])
part/1(["part/1"])
value/2(["value/2"])
discrete/1(["discrete/1"])
integer/1(["integer/1"])
parent/2(["parent/2"])
index/2(["index/2"])
set/2(["set/2"])
constraint/2(["constraint/2"])
domain/2(["domain/2"])
constant/1(["constant/1"])
range/3(["range/3"])
number/2(["number/2"])
defined/1(["defined/1"])
binary/4(["binary/4"])
unary/3(["unary/3"])
satisfied/1(["satisfied/1"])
violated/1(["violated/1"])
function/3(["function/3"])
undefined/2(["undefined/2"])
column/4(["column/4"])
defined/2(["defined/2"])
not_hit/3(["not_hit/3"])
allow/3(["allow/3"])
satisfied/2(["satisfied/2"])
_hit/3(["_hit/3"])
default/2(["default/2"])
consistent/2(["consistent/2"])
user_value/2(["user_value/2"])
consistent/1(["consistent/1"])
user_include/1(["user_include/1"])
undefined/1(["undefined/1"])
hit/3(["hit/3"])
consistent/1 --> include/1
include/1 --> include/1
part/1 --> include/1
consistent/2 --> include/1
user_value/2 --> include/1
type/2 --> include/1
user_include/1 --> include/1
domain/2 --> value/2
value/2 --> value/2
include/1 --> value/2
binary/4 --> value/2
allow/3 --> value/2
default/2 --> value/2
range/3 --> value/2
set/2 --> value/2
unary/3 --> value/2
consistent/2 --> value/2
integer/1 --> value/2
function/3 --> value/2
column/4 --> value/2
type/2 --> value/2
constant/1 --> value/2
number/2 --> value/2
user_value/2 --> value/2
discrete/1 --> value/2
unary/3 --> defined/1
value/2 --> defined/1
defined/1 --> defined/1
binary/4 --> defined/1
unary/3 --> satisfied/1
value/2 --> satisfied/1
binary/4 --> satisfied/1
satisfied/1 --> satisfied/1
parent/2 --> violated/1
include/1 --> violated/1
defined/1 --> violated/1
set/2 --> violated/1
index/2 --> violated/1
defined/2 --> violated/1
constraint/2 --> violated/1
column/4 --> undefined/2
column/4 --> defined/2
allow/3 --> not_hit/3
column/4 --> not_hit/3
allow/3 --> satisfied/2
_hit/3 --> satisfied/2
column/4 --> satisfied/2
domain/2 --> consistent/2
range/3 --> consistent/2
integer/1 --> consistent/2
user_value/2 --> consistent/2
type/2 --> consistent/2
discrete/1 --> consistent/2
user_include/1 --> consistent/1
type/2 --> consistent/1
value/2 -.-> value/2
satisfied/1 -.-> satisfied/1
satisfied/2 -.-> violated/1
include/1 -.-> violated/1
satisfied/1 -.-> violated/1
include/1 -.-> undefined/2
undefined/2 -.-> defined/2
value/2 -.-> not_hit/3
range/3 -.-> consistent/2
classDef all fill:#00000000;
classDef out stroke:#52BF54,stroke-width:3px;
classDef aux stroke:#848484,stroke-width:0.2px;
classDef in stroke:#9178C6,stroke-width:3px;
class include/1,type/2,part/1,value/2,discrete/1,integer/1,parent/2,index/2,set/2,constraint/2,domain/2,constant/1,range/3,number/2,defined/1,binary/4,unary/3,satisfied/1,violated/1,function/3,undefined/2,column/4,defined/2,not_hit/3,allow/3,satisfied/2,_hit/3,default/2,consistent/2,user_value/2,consistent/1,user_include/1,undefined/1,hit/3 all;
class include/1,value/2 out;
class type/2,part/1,discrete/1,integer/1,parent/2,index/2,set/2,constraint/2,domain/2,constant/1,range/3,number/2,defined/1,binary/4,unary/3,satisfied/1,violated/1,function/3,undefined/2,column/4,defined/2,not_hit/3,allow/3,satisfied/2,_hit/3,default/2,consistent/2,user_value/2,consistent/1,user_include/1,undefined/1,hit/3 aux;
class type/2,part/1,discrete/1,integer/1,parent/2,index/2,set/2,constraint/2,domain/2,constant/1,range/3,number/2,binary/4,unary/3,function/3,column/4,allow/3,_hit/3,default/2,user_value/2,user_include/1,undefined/1,hit/3 in;
Encodings ¶
src/coomsuite/encodings/encoding-base-clingo-show.lp
¶
Encoding
src/coomsuite/encodings/encoding-base-clingo.lp
¶
Encoding
src/coomsuite/encodings/show-clingo.lp
¶
Encoding
src/coomsuite/encodings/base/defined.lp
¶
Encoding
src/coomsuite/encodings/base/structure.lp
¶
Encoding
Always include root object
Generate include predicates for objects
% Always include minimal number of objects % Commented out because we wanted to include no optimizations currently % include(X) :- feature(C,,T,Min,), type(X,T), index(X,I), I < Min, % parent(X,P), include(P), type(P,C). Do not include an object if its parent is not included
Indices in ascending order
src/coomsuite/encodings/base/discrete.lp
¶
Encoding
Generate exactly one value for each discrete attribute if it is included
{ value(X,O) : type(X,T), enumeration(T), option(T,O) } 1. % No value if variable has not been included :- type(X,T), value(X,), not include(X). % Exactly one value if variable has been included :- attribute(T,), type(X,T), include(X), not { value(X,_) } = 1. Auxiliary values for (non-numeric) constants
src/coomsuite/encodings/base/clingo/integer.lp
¶
Encoding
src/coomsuite/encodings/base/clingo/boolean.lp
¶
Encoding
Definedness of formulas
defined(X) :- value(X,_).
defined(F) :- binary(F,XL,_,XR), defined(XL), defined(XR).
defined(F) :- unary(F,_,F'), defined(F').
Satisfaction of binary comparison relations
satisfied(F) :- binary(F,XL,"=", XR), VL = VR, value(XL,VL), value(XR,VR).
satisfied(F) :- binary(F,XL,"!=",XR), VL != VR, value(XL,VL), value(XR,VR).
satisfied(F) :- binary(F,XL,">", XR), VL > VR, value(XL,VL), value(XR,VR).
satisfied(F) :- binary(F,XL,">=",XR), VL >= VR, value(XL,VL), value(XR,VR).
satisfied(F) :- binary(F,XL,"<", XR), VL < VR, value(XL,VL), value(XR,VR).
satisfied(F) :- binary(F,XL,"<=",XR), VL <= VR, value(XL,VL), value(XR,VR).
Satisfaction of unary/binary logical relations
satisfied(F) :- unary(F,"!",F'), not satisfied(F').
satisfied(F) :- unary(F,"()",F'), satisfied(F').
satisfied(F) :- binary(F,XL,"||",XR), 1 <= { satisfied(XL); satisfied(XR) }.
satisfied(F) :- binary(F,XL,"&&",XR), satisfied(XL), satisfied(XR).
A Boolean formula is violated if it is defined and not satisfied
src/coomsuite/encodings/base/clingo/numerics.lp
¶
Encoding
Evaluate aggregates
value(F,V) :- function(F,"count",P), V = #count{ X : set(P,X), include(X) }.
value(F,V) :- function(F,"sum", P), V = #sum { V',X : set(P,X), value(X,V') }.
value(F,V) :- function(F,"min", P), V = #min { V',X : set(P,X), value(X,V') }.
value(F,V) :- function(F,"max", P), V = #max { V',X : set(P,X), value(X,V') }.
Arithmetics
value(F,VL+VR) :- binary(F,XL,"+",XR), value(XL,VL), value(XR,VR).
value(F,VL-VR) :- binary(F,XL,"-",XR), value(XL,VL), value(XR,VR).
value(F,VL*VR) :- binary(F,XL,"*",XR), value(XL,VL), value(XR,VR).
value(F, V) :- unary(F,"()",X), value(X,V).
value(F, V) :- unary(F,"+", X), value(X,V).
value(F,-V) :- unary(F,"-", X), value(X,V).
TODO: Add more arithmetics (division and power) Default arithmetics
value(F,VL) :- binary(F,XL,"+",XR), value(XL,VL), not value(XR,_).
value(F,VR) :- binary(F,XL,"+",XR), value(XR,VR), not value(XL,_).
value(F,VL) :- binary(F,XL,"-",XR), value(XL,VL), not value(XR,_).
value(F,-VR) :- binary(F,XL,"-",XR), value(XR,VR), not value(XL,_).
TODO: More rules for multiplication?
src/coomsuite/encodings/base/clingo/table.lp
¶
Encoding
A table constraint is defined if none of its columns are undefined
undefined(C,ID) :- column(C,ID,_,X), not include(X).
defined(C,ID) :- column(C,ID,_,_), not undefined(C,ID).
A row of a table is not satisfied if any of its entries is not satisfied. Note that a table entry can contain multiple values. This is incompatible with flingo (mixed check of values).
not_hit(C,ID,Row) :- allow(Idx,(Col,Row),_), column(C,ID,Col,X), C=(Idx,_), not value(X,V) : allow(Idx,(Col,Row),V).
A table constraint is satisfied if one of its rows is satisfied (not not satisfied)
A table constraint is violated if is defined and not satisfied
src/coomsuite/encodings/base/constraints.lp
¶
Encoding
A lower bound (cardinality) constraint is violated if less than the minimum number of objects are included (objects are included in ascending order of indices) (maximum does not need to be checked)
violated((X',P)) :- constraint((P,Min),"lowerbound"), set(P,X), index(X,Min-1), not include(X), parent(X,X'), include(X').
Constraints cannot be violated
src/coomsuite/encodings/base/clingo/defaults.lp
¶
Encoding
src/coomsuite/encodings/base/clingo/optimization.lp
¶
Encoding
src/coomsuite/encodings/base/clingo/user.lp
¶
Encoding
consistent(X) :- user_include(X), type(X,_).
consistent(X,V) :- user_value(X,V), type(X,T), discrete(T), domain(T,V).
consistent(X,V) :- user_value(X,V), type(X,T), integer(T), range(T,Min,Max), Min <= V <= Max.
consistent(X,V) :- user_value(X,V), type(X,T), integer(T), not range(T,_,_).
include(X) :- user_include(X), consistent(X).
include(X) :- user_value(X,V), consistent(X,V).
value(X,V) :- user_value(X,V), consistent(X,V).
src/coomsuite/encodings/doc.lp
¶
Encoding
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Input predicates %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Parts and attributes %% Configuration variables %% Constraints %% User input %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Encoding predicates %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Boolean constraints %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Output predicates %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Glossary ¶
_hit(A, B, C)
¶
References
allow(Idx, Pos, V)
¶
Defines an entry of a table constraint (for allowed combinations)
| Parameter | Description |
|---|---|
Idx
|
The index of the table constraint (part of the constraint identifier) |
Pos
|
The position of the entry as a tuple (Col,Row) |
V
|
The value of the table entry |
binary(F, L, Op, R)
¶
Defines a binary operation
| Parameter | Description |
|---|---|
F
|
The identifier of the complete formula |
L
|
The identifier of the left operand |
Op
|
The operator |
R
|
The identifier of the right operand |
References
column(C, ID, Col, X)
¶
Defines a column of a table constraint
| Parameter | Description |
|---|---|
C
|
The identifier of the constraint |
ID
|
The identifier of the cross product of the table header variables |
Col
|
The column number |
X
|
The header variable of the column |
References
constant(C)
¶
Auxiliary predicate which defines a constant (string)
| Parameter | Description |
|---|---|
C
|
The constant as a string |
References
constraint(C, T)
¶
Instantiates a constraint
| Parameter | Description |
|---|---|
C
|
The constraint identifier |
T
|
The type of the constraint (boolean, table, lowerbound) |
References
default(X, V)
¶
Defines a default value
| Parameter | Description |
|---|---|
X
|
The variable that gets assigned a default value |
V
|
The default value |
References
discrete(T)
¶
Declares the part of a discrete attribute
| Parameter | Description |
|---|---|
T
|
The type of the attribute |
domain(T, V)
¶
Declares a domain element of a discrete attribute
| Parameter | Description |
|---|---|
T
|
The type of the attribute |
V
|
The domain element |
function(F, Fun, Arg)
¶
Defines a calculation involving a function
| Parameter | Description |
|---|---|
F
|
The identifier of the complete formula |
Fun
|
The function type |
Arg
|
The argument of the function |
References
hit(C, ID, Pos)
¶
Whether an entry of a table constraint is satisfied (only for flingo encoding)
| Parameter | Description |
|---|---|
C
|
The table constraint identifier |
ID
|
The identifier of the cross product of the column header variables |
Pos
|
The position of the table entry as a tuple (Col,Row) |
References
index(X, I)
¶
The index of a variable in a cardinality set, for example, "root.frame[1]" has index 1
| Parameter | Description |
|---|---|
X
|
The variable (either a part or an attribute) |
I
|
The index of the variable |
integer(T)
¶
Declares the part of an integer attribute
| Parameter | Description |
|---|---|
T
|
The type of the attribute |
References
number(C, N)
¶
Auxiliary predicate which defines a constant number
| Parameter | Description |
|---|---|
C
|
The number as a string |
N
|
The number as an integer |
References
parent(X, P)
¶
The parent of a variable
| Parameter | Description |
|---|---|
X
|
The variable (either a part or an attribute) |
P
|
The parent of the variable |
part(T)
¶
Declares the type of a part
| Parameter | Description |
|---|---|
T
|
The type of the part |
References
range(T, Min, Max)
¶
Declares the range of an integer attribute
| Parameter | Description |
|---|---|
T
|
The type of the attribute |
Min
|
The minimum value of the range |
Max
|
The maximum value of the range |
set(S, X)
¶
Defines the members of a set (for cardinalities and aggregate functions)
| Parameter | Description |
|---|---|
S
|
The identifier of the set |
X
|
The variable (either a part or an attribute) which is a member of the set |
References
type(X, T)
¶
The type of a variable
| Parameter | Description |
|---|---|
X
|
The variable (either a part or an attribute) |
T
|
The type of the variable |
References
unary(F, Op, F')
¶
Defines a unary operation
| Parameter | Description |
|---|---|
F
|
The identifier of the complete formula |
Op
|
The operator |
F'
|
The identifier of the operand |
undefined(X)
¶
Whether a variable or (sub)formula is undefined
| Parameter | Description |
|---|---|
X
|
The variable or (sub)formula |
References
user_include(X)
¶
An include statement from user input
| Parameter | Description |
|---|---|
X
|
The variable (either a part or an attribute) to be included |
user_value(X, V)
¶
An attribute variable value set by user input
| Parameter | Description |
|---|---|
X
|
The attribute variable for which the value is set |
V
|
The value of the attribute variable |
References
include(X)
¶
Whether a variable is included in the configuration
| Parameter | Description |
|---|---|
X
|
The variable (either a part or an attribute) |
References
value(X, V)
¶
The value of an attribute variable
| Parameter | Description |
|---|---|
X
|
The attribute variable |
V
|
The value of the variable |
References
consistent(X)
¶
Whether a user input variable is consistent with the configuration model
| Parameter | Description |
|---|---|
X
|
The variable (either a part or an attribute) to be included |
consistent(X, V)
¶
Whether a user input value is consistent with the configuration model
| Parameter | Description |
|---|---|
X
|
The attribute variable for which the value is set |
V
|
The value of the attribute variable |
References
defined(X)
¶
Whether a variable or (sub)formula is defined
| Parameter | Description |
|---|---|
X
|
The variable or (sub)formula |
defined(C, ID)
¶
Whether a table constraint is defined
| Parameter | Description |
|---|---|
C
|
The table constraint identifier |
ID
|
The identifier of the cross product of the column header variables |
not_hit(C, ID, Row)
¶
Whether a row of a table constraint is not satisfied
| Parameter | Description |
|---|---|
C
|
The table constraint identifier |
ID
|
The identifier of the cross product of the column header variables |
Row
|
The row number |
References
satisfied(X)
¶
Whether a variable or (sub)formula is satisfied
| Parameter | Description |
|---|---|
X
|
The variable or (sub)formula |
References
satisfied(C, ID)
¶
Whether a table constraint is satisfied
| Parameter | Description |
|---|---|
C
|
The table constraint identifier |
ID
|
The identifier of the cross product of the column header variables |
undefined(C, ID)
¶
Whether a table constraint is undefined
| Parameter | Description |
|---|---|
C
|
The table constraint identifier |
ID
|
The identifier of the cross product of the column header variables |
violated(C)
¶
Whether a constraint is violated (Boolean, table or lower bound)
| Parameter | Description |
|---|---|
C
|
The constraint identifier (tuple that differs for each constraint type) |
References