The predication command extracts the property that is implicit in a declaration, leaving the declaration unchanged (unlike normalization).
...; i : e; ... | p | ![]() | ...; i : e; ... | i ![]() ![]() |
...; i == e; ... | p | ![]() | ...; i == e; ... | i = e ![]() |
...; e; ... | p | ![]() | ...; e; ... | e ![]() |
In the first two rules, it must be the name of the declaration that is inspected. In the last rule, that of a schema inclusion declaration, it must be the schema inclusion declaration that is inspected, not the schema expression within it - an extra click of button 1 is needed. The extracted property is that schema expression used as a predicate.
The predication command can also be applied to declarations in the hypothesis part of a goal, the new predicate being generated as the first antecedent.
The predication command also makes some expressions used as predicates become predicates involving smaller expressions used as predicates.
[ds | p] | ![]() | pred(ds) ![]() |
![]() | ![]() | ![]() |
e1 ![]() | ![]() | e1 ![]() |
e1 ![]() | ![]() | e1 ![]() |
e1 ![]() | ![]() | e1 ![]() |
e1 ![]() | ![]() | e1 ![]() |
e1 ![]() | ![]() | e1 ![]() |
![]() ![]() | ![]() | ![]() ![]() |
![]() ![]() | ![]() | ![]() ![]() |
![]() ![]() | ![]() | ![]() ![]() |
In the above rules, the predicates on the left are schema expressions used as predicates, formed from logical operations on schema expressions, whereas the predicates on the right are logical predicates, formed from logical operations on schema expressions used as predicates.
"predication" d1 d2
This example applies the predication command to declarations d1 and d2.