Go backward to 2.9.3 User Facilities Not Yet Implemented
Go up to 2.9 System Issues and Debugging
Go forward to 2.9.5 Traps for the Unwary
2.9.4 Miscellaneous Differences from OBJ3
- True rewriting modulo identity is implemented rather than the
restricted version done by OBJ3; this leads to nontermination
more often.
- The attribute idr: is not recognized.
- Maude allows arbitrary forward references to sorts, variables and
operators within a module. The order of statements in a module is irrelevant,
except, possibly, on error messages, importations, and nonconfluent systems.
- Identities are not restricted to being constants; an identity
may be any ground term that does not have the parent operator on top.
Cyclic dependencies between two or more identity elements is
explicitly allowed and is correctly resolved by the matching algorithms.
- The attribute idem means rewriting modulo idempotence, rather
than adding the equation for idempotence.
- The lefthand side of an equation can be a single variable; this often
(but not always) leads to nontermination.
- Error supersorts are used instead of retracts; this is due to the use
of membership equational logic, so that the error supersorts exactly
correspond to kinds.
- Operator strategies available with the strat attribute do not support
negative integers (evaluate on demand) and are restricted to a subset of
"sensible" strategies that depend on the operator's other
attributes. Various OBJ3 strategy bugs are not emulated [21].
- Operators which have the assoc attribute may be used in
"flattened" form, e.g., f(a, b, c) instead of f(a, f(b, c))
or f(f(a, b), c).
- Operators may always be used in prefix form, e.g.,
if_then_else_fi(b, t, e) instead of
if b then t else e fi.
- Labeled equations are not supported (use labeled rules).
- Sort declarations of operators with assoc, comm,
id: and idem
attributes must respect those attributes: rearrangement or permutation
by associativity or commutativity must not change the sort of a
term, while collapse due to identity or idempotence must
either lower the sort of a term or leave it unchanged.
- There is no support for Lisp--the Maude interpreter is written in C++.