maude: Phase 4 conditional equations (19 tests, 138 total)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 49s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 49s
lib/maude/conditional.sx — condition-aware reducer. ceq fires only when its guard holds: equational guards (l=r reduce to same normal form) and boolean guards (term reduces to true), evaluated by recursing through the same reducer. Verified on gcd, insertion sort, max, even. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -81,9 +81,9 @@ The novel substrate stress: equational matching. Pattern `X + Y` against `1 + 2
|
||||
- [x] Tests: classic AC-matching examples (multiset rewriting, set theory, group equations).
|
||||
|
||||
### Phase 4 — Conditional equations
|
||||
- [ ] `ceq L = R if Cond` — apply only when `Cond` reduces to true.
|
||||
- [ ] Recursion via the same reduce engine (terminating because Cond is shorter).
|
||||
- [ ] Tests: gcd, sorting, conditional simplifications.
|
||||
- [x] `ceq L = R if Cond` — apply only when `Cond` reduces to true.
|
||||
- [x] Recursion via the same reduce engine (terminating because Cond is shorter).
|
||||
- [x] Tests: gcd, sorting, conditional simplifications.
|
||||
|
||||
### Phase 5 — System modules + rewrite rules
|
||||
- [ ] `mod ... endm` syntax with `rl` rules.
|
||||
@@ -177,5 +177,23 @@ The novel substrate stress: equational matching. Pattern `X + Y` against `1 + 2
|
||||
oracle. `$EMPTY` is a transient marker for empty rest blocks w/o id; never
|
||||
leaks past `mau/restv`.
|
||||
|
||||
- **Phase 4 (conditional equations) — DONE, 138/138 total.**
|
||||
`lib/maude/conditional.sx` is a condition-aware superset of the Phase 3
|
||||
reducer. `mau/eq-candidates` enumerates (subst, result) pairs for an
|
||||
equation (AC via rest-var extension `mau/ac-candidates`, else `mau/mm`);
|
||||
`mau/try-candidates` commits the first candidate that both makes progress
|
||||
(canonical form changes) AND whose guard holds. `mau/cond-holds?` evaluates
|
||||
`{:kind :eq}` guards (reduce both sides, `ac-equal?`) and `{:kind :bool}`
|
||||
guards (reduce, `=AC= true`), recursing through `mau/cnormalize` — same
|
||||
reducer, so guards can mention other (conditional) equations. Public:
|
||||
`mau/creduce` / `mau/creduce->str` / `mau/ccanon`. Verified on gcd
|
||||
(subtractive, recursive guard), insertion sort (true/false branches), max,
|
||||
and even (bool-kind `if pred` guard).
|
||||
- Notes for next phases: `mau/creduce` is the canonical reducer now; Phase 5
|
||||
rules reduce to normal form via creduce between rewrite steps. `_:_` cons
|
||||
parses LEFT-assoc (no `gather` support yet) — write list literals
|
||||
right-parenthesized, or add a `gather`/parse-assoc attr later if a test
|
||||
needs bare `a : b : c`.
|
||||
|
||||
## Blockers
|
||||
_(none)_
|
||||
|
||||
Reference in New Issue
Block a user