Variables used in equations can be declared beforehand. The scope of such variables is inside the module.
A variable is declared with the keyword var as follows:
var <var-name> : <sort-name>
Plural variables of the same sort can be declared with the keyword vars as follows:
vars <var-name> ... <var-name> : <sort-name>
NAT+ can be rewritten as follows:
mod! NAT+ {
pr(SIMPLE-NAT)
op _+_ : Nat Nat -> Nat
vars N M : Nat
eq 0 + M = M .
eq s(N) + M = s(N + M) .
}Original Copyright © Takahiro Seino, all rights reserved.