date |
---|
2020-06-24 |
An extension presented in Deryck et al (2019) Adding Constraint Tables to the DMN Standard: Preliminary Results
- Tables can be translated into first-order logic, and they can be given to a SAT/SMT solver
- Outputs can contain the same FEEL expressions as inputs, including multiple values or negation. This makes sense due to the semantics of constraint tables.
ingredient1 | ingredient2 | dish1 | dish2 |
---|---|---|---|
banana | apple | fruitsalad | pie |
tomato | potato | soup | stew |
- row = conjunction of cells
- table = disjunction of rows
(ingredient1=banana ^ ingredient2=apple ^ dish1=fruitsalad ^ dish2=pie)
v
(ingredient1=tomato ^ ingredient2=potato ^ dish1=soup ^ dish2=stew)
- row = implication from (conjunction of) inputs to (conjunction of) outputs
- table = conjunction between implications
(ingredient1=banana ^ ingredient2=apple => dish1=fruitsalad ^ dish2=pie)
^
(ingredient1=tomato ^ ingredient2=potato => dish1=soup ^ dish2=stew)
The authors introduce a new hit policy E* (for 'Every').
E* expresses that every row must be satisfied. This makes sense, because the rows are now implications about constraints, not about the concrete state of our pantry.
In traditional DMN, if input, then output translates into "if input satisfies constraints, then output is chosen". In constraint tables with E* hit policy, if input, then output translates into a literal implication: "if input satisfies constraints, then output must satisfy constraints".
Is there a way to compile constraint tables into traditional DMN? Would be useful both for debugging and for ease of implementation
Show in which cases the constraints would be unsolvable.