The contraction command performs in situ replacements that are each like expansion steps but performed in the opposite direction. The earliest applicable contraction step in the list is the one that is applied.
![]() ![]() | ![]() | p1 ![]() |
p1 ![]() ![]() ![]() | ![]() | p1 ![]() |
![]() ![]() | ![]() | p1 ![]() |
![]() ![]() ![]() ![]() ![]() ![]() | ![]() | e1 = e2 |
where e1 and e2 are expressions of type
.
![]() ![]() | ![]() | e1 ![]() ![]() |
where no references in e1 are bound to declarations in s (the variable release problem).
e . 1 ![]() ![]() ![]() ![]() | ![]() | e ![]() ![]() ![]() |
e . 1 = e1 ![]() ![]() | ![]() | e = ( e1, ..., en ) |
e . i1 = e1 ![]() ![]() | ![]() | e = ![]() ![]() |
e = e1 ![]() ![]() | ![]() | e ![]() |
e ![]() | ![]() | relation operator application |
{ i1 : e1; ...; in : en } | ![]() | e1 ![]() ![]() |
![]() ![]() | ![]() | e1 ![]() |
e1 ![]() ![]() ![]() | ![]() | e1 ![]() |
![]() ![]() | ![]() | e1 ![]() |
( i.1, ..., i.n ) | ![]() | i |
![]() ![]() | ![]() | i |
"contraction" p1 p2
This example applies the contraction command to predicates p1 and p2.