Self-hosted z3.sx translator, prove.sx prover, parser unicode, auto reader macros
- z3.sx: SX-to-SMT-LIB translator written in SX (359 lines), replaces Python translation logic - prove.sx: SMT-LIB satisfiability checker in SX — proves all 91 primitives sat by construction - Parser: support unicode characters (em-dash, accented letters) in symbols - Auto-resolve reader macros: #name finds name-translate in component env, no Python registration - Platform primitives: type-of, symbol-name, keyword-name, sx-parse registered in primitives.py - Cond heuristic: predicates ending in ? recognized as Clojure-style tests - Library loading: z3.sx loaded at startup with reload callbacks for hot-reload ordering - reader_z3.py: rewritten as thin shell delegating to z3.sx - Split monolithic .sx files: essays (22), plans (13), reactive-islands (6) into separate files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -233,13 +233,20 @@ def _sf_cond(expr: list, env: dict) -> Any:
|
||||
clauses = expr[1:]
|
||||
if not clauses:
|
||||
return NIL
|
||||
# Detect scheme-style: first clause is a 2-element list that isn't a comparison
|
||||
# Detect scheme-style: first clause is a 2-element list that isn't a
|
||||
# comparison or predicate call (predicates end in ?)
|
||||
def _is_clojure_test(clause):
|
||||
if not isinstance(clause, list) or len(clause) != 2:
|
||||
return False
|
||||
head = clause[0]
|
||||
if not isinstance(head, Symbol):
|
||||
return False
|
||||
return (head.name in ("=", "<", ">", "<=", ">=", "!=", "and", "or")
|
||||
or head.name.endswith("?"))
|
||||
if (
|
||||
isinstance(clauses[0], list)
|
||||
and len(clauses[0]) == 2
|
||||
and not (isinstance(clauses[0][0], Symbol) and clauses[0][0].name in (
|
||||
"=", "<", ">", "<=", ">=", "!=", "and", "or",
|
||||
))
|
||||
and not _is_clojure_test(clauses[0])
|
||||
):
|
||||
for clause in clauses:
|
||||
if not isinstance(clause, list) or len(clause) < 2:
|
||||
|
||||
Reference in New Issue
Block a user