| X | ::= variable | { domain variable }
|
|
| Constant | ::= integer
|
| | inf | { minus infinity }
|
| | sup | { plus infinity }
|
|
| Term | ::= Constant
|
| | X | { suspend until assigned }
|
| | min(X) | { min. of domain of X }
|
| | max(X) | { max. of domain of X }
|
| | card(X) | { size of domain of X }
|
| | - Term
|
| | Term + Term
|
| | Term - Term
|
| | Term * Term
|
| | Term /> Term | { division rounded up }
|
| | Term /< Term | { division rounded down }
|
| | Term mod Term
|
| | Term rem Term
|
|
| TermSet | ::= {Term,...,Term}
|
|
| Range | ::= TermSet
|
| | dom(X) | { domain of X }
|
| | Term .. Term | { interval }
|
| | Range /\ Range | { intersection }
|
| | Range \/ Range | { union }
|
| | \ Range | { complement }
|
| | - Range | { pointwise negation }
|
| | Range + Range | { pointwise addition }
|
| | Range - Range | { pointwise subtraction }
|
| | Range mod Range | { pointwise modulo }
|
| | Range rem Range | { pointwise remainder }
|
| | Range + Term | { pointwise addition }
|
| | Range - Term | { pointwise subtraction }
|
| | Term - Range | { pointwise subtraction }
|
| | Range mod Term | { pointwise modulo }
|
| | Range rem Term | { pointwise remainder }
|
| | Range ? Range
|
| | unionof(X,Range,Range)
|
| | switch(Term,MapList)
|
|
| ConstantSet | ::= {integer,...,integer}
|
|
| ConstantRange | ::= ConstantSet
|
| | Constant .. Constant
|
| | ConstantRange /\ ConstantRange
|
| | ConstantRange \/ ConstantRange
|
| | \ ConstantRange
|
|
| MapList | ::= []
|
| | [integer-ConstantRange|MapList]
|
|
| CTable | ::= []
|
| | [CRow|CTable]
|
|
| CRow | ::= []
|
| | [integer|CRow]
|
| | [ConstantRange|CRow]
|
|
| CList | ::= []
|
| | [integer|CList]
|
|
| Indexical | ::= X in Range
|
|
| Indexicals | ::= Indexical
|
| | Indexical , Indexicals
|
|
| ConstraintBody | ::= Indexicals
|
| | LinExpr RelOp LinExpr
|
| | element(X,CList,X)
|
| | table(CTable)
|
|
| Head | ::= term | { a compound term with unique variable args }
|
|
| TellPos | ::= Head +: ConstraintBody
|
| TellNeg | ::= Head -: ConstraintBody
|
| AskPos | ::= Head +? Indexical
|
| AskNeg | ::= Head -? Indexical
|
|
| ConstraintDef | ::= TellPos.
|
| ?(TellNeg.)
|
| ?(AskPos.)
|
| ?(AskNeg.)
|