@stevenvo780/st-lang 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/lambda-calc/church.d.ts.map +1 -1
- package/dist/lambda-calc/church.js.map +1 -1
- package/dist/lambda-calc/combinators.d.ts.map +1 -1
- package/dist/lambda-calc/combinators.js.map +1 -1
- package/dist/lambda-calc/index.d.ts +1 -1
- package/dist/lambda-calc/index.d.ts.map +1 -1
- package/dist/lambda-calc/index.js.map +1 -1
- package/dist/mltt/equality.d.ts +9 -0
- package/dist/mltt/equality.d.ts.map +1 -0
- package/dist/mltt/equality.js +79 -0
- package/dist/mltt/equality.js.map +1 -0
- package/dist/mltt/index.d.ts +8 -0
- package/dist/mltt/index.d.ts.map +1 -0
- package/dist/mltt/index.js +49 -0
- package/dist/mltt/index.js.map +1 -0
- package/dist/mltt/infer.d.ts +17 -0
- package/dist/mltt/infer.d.ts.map +1 -0
- package/dist/mltt/infer.js +269 -0
- package/dist/mltt/infer.js.map +1 -0
- package/dist/mltt/normalize.d.ts +7 -0
- package/dist/mltt/normalize.d.ts.map +1 -0
- package/dist/mltt/normalize.js +131 -0
- package/dist/mltt/normalize.js.map +1 -0
- package/dist/mltt/substitute.d.ts +4 -0
- package/dist/mltt/substitute.d.ts.map +1 -0
- package/dist/mltt/substitute.js +94 -0
- package/dist/mltt/substitute.js.map +1 -0
- package/dist/mltt/types.d.ts +72 -0
- package/dist/mltt/types.d.ts.map +1 -0
- package/dist/mltt/types.js +211 -0
- package/dist/mltt/types.js.map +1 -0
- package/dist/profiles/many-valued/index.d.ts.map +1 -1
- package/dist/profiles/many-valued/index.js.map +1 -1
- package/dist/profiles/mu-calculus/check.d.ts +15 -0
- package/dist/profiles/mu-calculus/check.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/check.js +172 -0
- package/dist/profiles/mu-calculus/check.js.map +1 -0
- package/dist/profiles/mu-calculus/ctl-translate.d.ts +61 -0
- package/dist/profiles/mu-calculus/ctl-translate.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/ctl-translate.js +181 -0
- package/dist/profiles/mu-calculus/ctl-translate.js.map +1 -0
- package/dist/profiles/mu-calculus/index.d.ts +7 -0
- package/dist/profiles/mu-calculus/index.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/index.js +33 -0
- package/dist/profiles/mu-calculus/index.js.map +1 -0
- package/dist/profiles/mu-calculus/types.d.ts +51 -0
- package/dist/profiles/mu-calculus/types.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/types.js +42 -0
- package/dist/profiles/mu-calculus/types.js.map +1 -0
- package/dist/profiles/mu-calculus/wellformed.d.ts +40 -0
- package/dist/profiles/mu-calculus/wellformed.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/wellformed.js +160 -0
- package/dist/profiles/mu-calculus/wellformed.js.map +1 -0
- package/dist/profiles/sequent-lk/cut-elimination.d.ts +11 -0
- package/dist/profiles/sequent-lk/cut-elimination.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/cut-elimination.js +216 -0
- package/dist/profiles/sequent-lk/cut-elimination.js.map +1 -0
- package/dist/profiles/sequent-lk/index.d.ts +5 -0
- package/dist/profiles/sequent-lk/index.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/index.js +24 -0
- package/dist/profiles/sequent-lk/index.js.map +1 -0
- package/dist/profiles/sequent-lk/prover.d.ts +25 -0
- package/dist/profiles/sequent-lk/prover.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/prover.js +532 -0
- package/dist/profiles/sequent-lk/prover.js.map +1 -0
- package/dist/profiles/sequent-lk/types.d.ts +55 -0
- package/dist/profiles/sequent-lk/types.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/types.js +18 -0
- package/dist/profiles/sequent-lk/types.js.map +1 -0
- package/dist/profiles/sequent-lk/util.d.ts +18 -0
- package/dist/profiles/sequent-lk/util.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/util.js +71 -0
- package/dist/profiles/sequent-lk/util.js.map +1 -0
- package/dist/refinement-types/checker.d.ts +19 -0
- package/dist/refinement-types/checker.d.ts.map +1 -0
- package/dist/refinement-types/checker.js +248 -0
- package/dist/refinement-types/checker.js.map +1 -0
- package/dist/refinement-types/index.d.ts +11 -0
- package/dist/refinement-types/index.d.ts.map +1 -0
- package/dist/refinement-types/index.js +51 -0
- package/dist/refinement-types/index.js.map +1 -0
- package/dist/refinement-types/predicate.d.ts +31 -0
- package/dist/refinement-types/predicate.d.ts.map +1 -0
- package/dist/refinement-types/predicate.js +369 -0
- package/dist/refinement-types/predicate.js.map +1 -0
- package/dist/refinement-types/solver.d.ts +24 -0
- package/dist/refinement-types/solver.d.ts.map +1 -0
- package/dist/refinement-types/solver.js +207 -0
- package/dist/refinement-types/solver.js.map +1 -0
- package/dist/refinement-types/subtype.d.ts +14 -0
- package/dist/refinement-types/subtype.d.ts.map +1 -0
- package/dist/refinement-types/subtype.js +39 -0
- package/dist/refinement-types/subtype.js.map +1 -0
- package/dist/refinement-types/types.d.ts +64 -0
- package/dist/refinement-types/types.d.ts.map +1 -0
- package/dist/refinement-types/types.js +130 -0
- package/dist/refinement-types/types.js.map +1 -0
- package/dist/runtime/anti-unification/anti-unify.d.ts +22 -0
- package/dist/runtime/anti-unification/anti-unify.d.ts.map +1 -0
- package/dist/runtime/anti-unification/anti-unify.js +154 -0
- package/dist/runtime/anti-unification/anti-unify.js.map +1 -0
- package/dist/runtime/anti-unification/index.d.ts +6 -0
- package/dist/runtime/anti-unification/index.d.ts.map +1 -0
- package/dist/runtime/anti-unification/index.js +23 -0
- package/dist/runtime/anti-unification/index.js.map +1 -0
- package/dist/runtime/anti-unification/many.d.ts +49 -0
- package/dist/runtime/anti-unification/many.d.ts.map +1 -0
- package/dist/runtime/anti-unification/many.js +185 -0
- package/dist/runtime/anti-unification/many.js.map +1 -0
- package/dist/runtime/anti-unification/term-utils.d.ts +40 -0
- package/dist/runtime/anti-unification/term-utils.d.ts.map +1 -0
- package/dist/runtime/anti-unification/term-utils.js +173 -0
- package/dist/runtime/anti-unification/term-utils.js.map +1 -0
- package/dist/runtime/anti-unification/types.d.ts +41 -0
- package/dist/runtime/anti-unification/types.d.ts.map +1 -0
- package/dist/runtime/anti-unification/types.js +26 -0
- package/dist/runtime/anti-unification/types.js.map +1 -0
- package/dist/runtime/csp/ac3.d.ts +20 -0
- package/dist/runtime/csp/ac3.d.ts.map +1 -0
- package/dist/runtime/csp/ac3.js +165 -0
- package/dist/runtime/csp/ac3.js.map +1 -0
- package/dist/runtime/csp/backtrack.d.ts +15 -0
- package/dist/runtime/csp/backtrack.d.ts.map +1 -0
- package/dist/runtime/csp/backtrack.js +233 -0
- package/dist/runtime/csp/backtrack.js.map +1 -0
- package/dist/runtime/csp/builtins.d.ts +27 -0
- package/dist/runtime/csp/builtins.d.ts.map +1 -0
- package/dist/runtime/csp/builtins.js +109 -0
- package/dist/runtime/csp/builtins.js.map +1 -0
- package/dist/runtime/csp/index.d.ts +5 -0
- package/dist/runtime/csp/index.d.ts.map +1 -0
- package/dist/runtime/csp/index.js +23 -0
- package/dist/runtime/csp/index.js.map +1 -0
- package/dist/runtime/csp/types.d.ts +54 -0
- package/dist/runtime/csp/types.d.ts.map +1 -0
- package/dist/runtime/csp/types.js +14 -0
- package/dist/runtime/csp/types.js.map +1 -0
- package/dist/runtime/markov-logic/grounding.d.ts +19 -0
- package/dist/runtime/markov-logic/grounding.d.ts.map +1 -0
- package/dist/runtime/markov-logic/grounding.js +252 -0
- package/dist/runtime/markov-logic/grounding.js.map +1 -0
- package/dist/runtime/markov-logic/index.d.ts +6 -0
- package/dist/runtime/markov-logic/index.d.ts.map +1 -0
- package/dist/runtime/markov-logic/index.js +47 -0
- package/dist/runtime/markov-logic/index.js.map +1 -0
- package/dist/runtime/markov-logic/inference.d.ts +77 -0
- package/dist/runtime/markov-logic/inference.d.ts.map +1 -0
- package/dist/runtime/markov-logic/inference.js +382 -0
- package/dist/runtime/markov-logic/inference.js.map +1 -0
- package/dist/runtime/markov-logic/parser.d.ts +25 -0
- package/dist/runtime/markov-logic/parser.d.ts.map +1 -0
- package/dist/runtime/markov-logic/parser.js +264 -0
- package/dist/runtime/markov-logic/parser.js.map +1 -0
- package/dist/runtime/markov-logic/types.d.ts +64 -0
- package/dist/runtime/markov-logic/types.d.ts.map +1 -0
- package/dist/runtime/markov-logic/types.js +17 -0
- package/dist/runtime/markov-logic/types.js.map +1 -0
- package/dist/runtime/pi-calculus/congruence.d.ts +15 -0
- package/dist/runtime/pi-calculus/congruence.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/congruence.js +271 -0
- package/dist/runtime/pi-calculus/congruence.js.map +1 -0
- package/dist/runtime/pi-calculus/index.d.ts +6 -0
- package/dist/runtime/pi-calculus/index.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/index.js +30 -0
- package/dist/runtime/pi-calculus/index.js.map +1 -0
- package/dist/runtime/pi-calculus/names.d.ts +28 -0
- package/dist/runtime/pi-calculus/names.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/names.js +182 -0
- package/dist/runtime/pi-calculus/names.js.map +1 -0
- package/dist/runtime/pi-calculus/reduction.d.ts +25 -0
- package/dist/runtime/pi-calculus/reduction.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/reduction.js +338 -0
- package/dist/runtime/pi-calculus/reduction.js.map +1 -0
- package/dist/runtime/pi-calculus/substitution.d.ts +11 -0
- package/dist/runtime/pi-calculus/substitution.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/substitution.js +109 -0
- package/dist/runtime/pi-calculus/substitution.js.map +1 -0
- package/dist/runtime/pi-calculus/types.d.ts +38 -0
- package/dist/runtime/pi-calculus/types.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/types.js +22 -0
- package/dist/runtime/pi-calculus/types.js.map +1 -0
- package/dist/runtime/planning/astar.d.ts +10 -0
- package/dist/runtime/planning/astar.d.ts.map +1 -0
- package/dist/runtime/planning/astar.js +155 -0
- package/dist/runtime/planning/astar.js.map +1 -0
- package/dist/runtime/planning/bfs.d.ts +17 -0
- package/dist/runtime/planning/bfs.d.ts.map +1 -0
- package/dist/runtime/planning/bfs.js +87 -0
- package/dist/runtime/planning/bfs.js.map +1 -0
- package/dist/runtime/planning/ground.d.ts +55 -0
- package/dist/runtime/planning/ground.d.ts.map +1 -0
- package/dist/runtime/planning/ground.js +154 -0
- package/dist/runtime/planning/ground.js.map +1 -0
- package/dist/runtime/planning/heuristic.d.ts +29 -0
- package/dist/runtime/planning/heuristic.d.ts.map +1 -0
- package/dist/runtime/planning/heuristic.js +172 -0
- package/dist/runtime/planning/heuristic.js.map +1 -0
- package/dist/runtime/planning/index.d.ts +6 -0
- package/dist/runtime/planning/index.d.ts.map +1 -0
- package/dist/runtime/planning/index.js +38 -0
- package/dist/runtime/planning/index.js.map +1 -0
- package/dist/runtime/planning/types.d.ts +100 -0
- package/dist/runtime/planning/types.d.ts.map +1 -0
- package/dist/runtime/planning/types.js +22 -0
- package/dist/runtime/planning/types.js.map +1 -0
- package/dist/runtime/symbolic-diff/differentiate.d.ts.map +1 -1
- package/dist/runtime/symbolic-diff/differentiate.js.map +1 -1
- package/dist/runtime/symbolic-diff/index.d.ts +1 -1
- package/dist/runtime/symbolic-diff/index.d.ts.map +1 -1
- package/dist/runtime/symbolic-diff/index.js.map +1 -1
- package/dist/runtime/symbolic-diff/parse.d.ts.map +1 -1
- package/dist/runtime/symbolic-diff/parse.js +7 -1
- package/dist/runtime/symbolic-diff/parse.js.map +1 -1
- package/dist/runtime/theorem-cache/cache.d.ts +100 -0
- package/dist/runtime/theorem-cache/cache.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/cache.js +213 -0
- package/dist/runtime/theorem-cache/cache.js.map +1 -0
- package/dist/runtime/theorem-cache/canonical.d.ts +59 -0
- package/dist/runtime/theorem-cache/canonical.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/canonical.js +105 -0
- package/dist/runtime/theorem-cache/canonical.js.map +1 -0
- package/dist/runtime/theorem-cache/index.d.ts +6 -0
- package/dist/runtime/theorem-cache/index.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/index.js +16 -0
- package/dist/runtime/theorem-cache/index.js.map +1 -0
- package/dist/runtime/theorem-cache/pattern.d.ts +24 -0
- package/dist/runtime/theorem-cache/pattern.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/pattern.js +80 -0
- package/dist/runtime/theorem-cache/pattern.js.map +1 -0
- package/dist/system-f/index.d.ts +7 -0
- package/dist/system-f/index.d.ts.map +1 -0
- package/dist/system-f/index.js +48 -0
- package/dist/system-f/index.js.map +1 -0
- package/dist/system-f/infer.d.ts +9 -0
- package/dist/system-f/infer.d.ts.map +1 -0
- package/dist/system-f/infer.js +94 -0
- package/dist/system-f/infer.js.map +1 -0
- package/dist/system-f/reduce.d.ts +15 -0
- package/dist/system-f/reduce.d.ts.map +1 -0
- package/dist/system-f/reduce.js +259 -0
- package/dist/system-f/reduce.js.map +1 -0
- package/dist/system-f/types.d.ts +53 -0
- package/dist/system-f/types.d.ts.map +1 -0
- package/dist/system-f/types.js +157 -0
- package/dist/system-f/types.js.map +1 -0
- package/dist/tests/anti-unification/anti-unify.test.d.ts +2 -0
- package/dist/tests/anti-unification/anti-unify.test.d.ts.map +1 -0
- package/dist/tests/anti-unification/anti-unify.test.js +219 -0
- package/dist/tests/anti-unification/anti-unify.test.js.map +1 -0
- package/dist/tests/coverage-fill-aristotelian.test.js +1 -1
- package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -1
- package/dist/tests/coverage-fill-fallacies.test.js +1 -1
- package/dist/tests/coverage-fill-fallacies.test.js.map +1 -1
- package/dist/tests/coverage-fill-format.test.js +1 -1
- package/dist/tests/coverage-fill-format.test.js.map +1 -1
- package/dist/tests/coverage-fill-intuitionistic.test.js +1 -1
- package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -1
- package/dist/tests/coverage-fill-probabilistic.test.js +1 -1
- package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -1
- package/dist/tests/csp/csp.test.d.ts +2 -0
- package/dist/tests/csp/csp.test.d.ts.map +1 -0
- package/dist/tests/csp/csp.test.js +292 -0
- package/dist/tests/csp/csp.test.js.map +1 -0
- package/dist/tests/lambda-calc/lambda-calc.test.js.map +1 -1
- package/dist/tests/many-valued/many-valued.test.js.map +1 -1
- package/dist/tests/markov-logic/markov-logic.test.d.ts +2 -0
- package/dist/tests/markov-logic/markov-logic.test.d.ts.map +1 -0
- package/dist/tests/markov-logic/markov-logic.test.js +349 -0
- package/dist/tests/markov-logic/markov-logic.test.js.map +1 -0
- package/dist/tests/mltt/mltt.test.d.ts +2 -0
- package/dist/tests/mltt/mltt.test.d.ts.map +1 -0
- package/dist/tests/mltt/mltt.test.js +181 -0
- package/dist/tests/mltt/mltt.test.js.map +1 -0
- package/dist/tests/mu-calculus/check.test.d.ts +2 -0
- package/dist/tests/mu-calculus/check.test.d.ts.map +1 -0
- package/dist/tests/mu-calculus/check.test.js +234 -0
- package/dist/tests/mu-calculus/check.test.js.map +1 -0
- package/dist/tests/pi-calculus/pi-calculus.test.d.ts +2 -0
- package/dist/tests/pi-calculus/pi-calculus.test.d.ts.map +1 -0
- package/dist/tests/pi-calculus/pi-calculus.test.js +273 -0
- package/dist/tests/pi-calculus/pi-calculus.test.js.map +1 -0
- package/dist/tests/planning/planning.test.d.ts +2 -0
- package/dist/tests/planning/planning.test.d.ts.map +1 -0
- package/dist/tests/planning/planning.test.js +397 -0
- package/dist/tests/planning/planning.test.js.map +1 -0
- package/dist/tests/refinement-types/refinement-types.test.d.ts +2 -0
- package/dist/tests/refinement-types/refinement-types.test.d.ts.map +1 -0
- package/dist/tests/refinement-types/refinement-types.test.js +174 -0
- package/dist/tests/refinement-types/refinement-types.test.js.map +1 -0
- package/dist/tests/sequent-lk/prover.test.d.ts +2 -0
- package/dist/tests/sequent-lk/prover.test.d.ts.map +1 -0
- package/dist/tests/sequent-lk/prover.test.js +317 -0
- package/dist/tests/sequent-lk/prover.test.js.map +1 -0
- package/dist/tests/symbolic-diff/symbolic-diff.test.js.map +1 -1
- package/dist/tests/system-f/system-f.test.d.ts +2 -0
- package/dist/tests/system-f/system-f.test.d.ts.map +1 -0
- package/dist/tests/system-f/system-f.test.js +217 -0
- package/dist/tests/system-f/system-f.test.js.map +1 -0
- package/dist/tests/theorem-cache/cache.test.d.ts +2 -0
- package/dist/tests/theorem-cache/cache.test.d.ts.map +1 -0
- package/dist/tests/theorem-cache/cache.test.js +510 -0
- package/dist/tests/theorem-cache/cache.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// CTL → modal μ-calculus translator
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Encoding clásico (Emerson 1990 — "Temporal and Modal Logic"):
|
|
6
|
+
//
|
|
7
|
+
// EX φ ≡ ◇φ
|
|
8
|
+
// AX φ ≡ □φ
|
|
9
|
+
// EF φ ≡ μX. φ ∨ ◇X
|
|
10
|
+
// AF φ ≡ μX. φ ∨ □X
|
|
11
|
+
// EG φ ≡ νX. φ ∧ ◇X
|
|
12
|
+
// AG φ ≡ νX. φ ∧ □X
|
|
13
|
+
// E[φ U ψ] ≡ μX. ψ ∨ (φ ∧ ◇X)
|
|
14
|
+
// A[φ U ψ] ≡ μX. ψ ∨ (φ ∧ □X ∧ ◇true)
|
|
15
|
+
// (la cláusula `◇true` excluye deadlocks que no han
|
|
16
|
+
// alcanzado ψ — coincide con la semántica AU clásica
|
|
17
|
+
// donde un camino debe existir hasta ψ).
|
|
18
|
+
//
|
|
19
|
+
// Para evitar capturas accidentales en fórmulas anidadas (`EF (EF p)`),
|
|
20
|
+
// generamos nombres de variable frescos en cada `gensym()`.
|
|
21
|
+
// ============================================================
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.ctlToMu = ctlToMu;
|
|
24
|
+
function makeGensym() {
|
|
25
|
+
let n = 0;
|
|
26
|
+
return () => `__X${n++}`;
|
|
27
|
+
}
|
|
28
|
+
/** Constantes ⊤/⊥ codificadas como `μX.X ∨ ¬X` evitables: usamos
|
|
29
|
+
* atoms internos siempre verdaderos/falsos vía `or`/`and` vacíos? El
|
|
30
|
+
* AST de μ no admite n-arios vacíos, así que codificamos con un
|
|
31
|
+
* binder trivial: ⊤ ≡ νX. X ; ⊥ ≡ μX. X. */
|
|
32
|
+
function muTrue(gensym) {
|
|
33
|
+
const x = gensym();
|
|
34
|
+
return { kind: 'nu', bind: x, body: { kind: 'var', name: x } };
|
|
35
|
+
}
|
|
36
|
+
function muFalse(gensym) {
|
|
37
|
+
const x = gensym();
|
|
38
|
+
return { kind: 'mu', bind: x, body: { kind: 'var', name: x } };
|
|
39
|
+
}
|
|
40
|
+
function bigAnd(parts, gensym) {
|
|
41
|
+
if (parts.length === 0)
|
|
42
|
+
return muTrue(gensym);
|
|
43
|
+
let acc = parts[0];
|
|
44
|
+
for (let i = 1; i < parts.length; i++) {
|
|
45
|
+
acc = { kind: 'and', left: acc, right: parts[i] };
|
|
46
|
+
}
|
|
47
|
+
return acc;
|
|
48
|
+
}
|
|
49
|
+
function bigOr(parts, gensym) {
|
|
50
|
+
if (parts.length === 0)
|
|
51
|
+
return muFalse(gensym);
|
|
52
|
+
let acc = parts[0];
|
|
53
|
+
for (let i = 1; i < parts.length; i++) {
|
|
54
|
+
acc = { kind: 'or', left: acc, right: parts[i] };
|
|
55
|
+
}
|
|
56
|
+
return acc;
|
|
57
|
+
}
|
|
58
|
+
function translate(phi, gensym) {
|
|
59
|
+
switch (phi.kind) {
|
|
60
|
+
case 'atom':
|
|
61
|
+
return { kind: 'atom', name: phi.name };
|
|
62
|
+
case 'true':
|
|
63
|
+
return muTrue(gensym);
|
|
64
|
+
case 'false':
|
|
65
|
+
return muFalse(gensym);
|
|
66
|
+
case 'not':
|
|
67
|
+
return { kind: 'not', arg: translate(phi.arg, gensym) };
|
|
68
|
+
case 'and':
|
|
69
|
+
return bigAnd(phi.args.map((a) => translate(a, gensym)), gensym);
|
|
70
|
+
case 'or':
|
|
71
|
+
return bigOr(phi.args.map((a) => translate(a, gensym)), gensym);
|
|
72
|
+
case 'implies': {
|
|
73
|
+
// p → q ≡ ¬p ∨ q
|
|
74
|
+
return {
|
|
75
|
+
kind: 'or',
|
|
76
|
+
left: { kind: 'not', arg: translate(phi.left, gensym) },
|
|
77
|
+
right: translate(phi.right, gensym),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
case 'EX':
|
|
81
|
+
return { kind: 'diamond', arg: translate(phi.arg, gensym) };
|
|
82
|
+
case 'AX':
|
|
83
|
+
return { kind: 'box', arg: translate(phi.arg, gensym) };
|
|
84
|
+
case 'EF': {
|
|
85
|
+
const x = gensym();
|
|
86
|
+
return {
|
|
87
|
+
kind: 'mu',
|
|
88
|
+
bind: x,
|
|
89
|
+
body: {
|
|
90
|
+
kind: 'or',
|
|
91
|
+
left: translate(phi.arg, gensym),
|
|
92
|
+
right: { kind: 'diamond', arg: { kind: 'var', name: x } },
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
case 'AF': {
|
|
97
|
+
const x = gensym();
|
|
98
|
+
return {
|
|
99
|
+
kind: 'mu',
|
|
100
|
+
bind: x,
|
|
101
|
+
body: {
|
|
102
|
+
kind: 'or',
|
|
103
|
+
left: translate(phi.arg, gensym),
|
|
104
|
+
right: { kind: 'box', arg: { kind: 'var', name: x } },
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
case 'EG': {
|
|
109
|
+
const x = gensym();
|
|
110
|
+
return {
|
|
111
|
+
kind: 'nu',
|
|
112
|
+
bind: x,
|
|
113
|
+
body: {
|
|
114
|
+
kind: 'and',
|
|
115
|
+
left: translate(phi.arg, gensym),
|
|
116
|
+
right: { kind: 'diamond', arg: { kind: 'var', name: x } },
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
case 'AG': {
|
|
121
|
+
const x = gensym();
|
|
122
|
+
return {
|
|
123
|
+
kind: 'nu',
|
|
124
|
+
bind: x,
|
|
125
|
+
body: {
|
|
126
|
+
kind: 'and',
|
|
127
|
+
left: translate(phi.arg, gensym),
|
|
128
|
+
right: { kind: 'box', arg: { kind: 'var', name: x } },
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
case 'EU': {
|
|
133
|
+
// E[A U B] ≡ μX. B ∨ (A ∧ ◇X)
|
|
134
|
+
const x = gensym();
|
|
135
|
+
return {
|
|
136
|
+
kind: 'mu',
|
|
137
|
+
bind: x,
|
|
138
|
+
body: {
|
|
139
|
+
kind: 'or',
|
|
140
|
+
left: translate(phi.right, gensym),
|
|
141
|
+
right: {
|
|
142
|
+
kind: 'and',
|
|
143
|
+
left: translate(phi.left, gensym),
|
|
144
|
+
right: { kind: 'diamond', arg: { kind: 'var', name: x } },
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
case 'AU': {
|
|
150
|
+
// A[A U B] ≡ μX. B ∨ (A ∧ □X ∧ ◇⊤)
|
|
151
|
+
const x = gensym();
|
|
152
|
+
return {
|
|
153
|
+
kind: 'mu',
|
|
154
|
+
bind: x,
|
|
155
|
+
body: {
|
|
156
|
+
kind: 'or',
|
|
157
|
+
left: translate(phi.right, gensym),
|
|
158
|
+
right: {
|
|
159
|
+
kind: 'and',
|
|
160
|
+
left: translate(phi.left, gensym),
|
|
161
|
+
right: {
|
|
162
|
+
kind: 'and',
|
|
163
|
+
left: { kind: 'box', arg: { kind: 'var', name: x } },
|
|
164
|
+
right: { kind: 'diamond', arg: muTrue(gensym) },
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Traduce una fórmula CTL a su equivalente en μ-cálculo.
|
|
174
|
+
*
|
|
175
|
+
* Acepta el shape estructural del AST de CTL (sin importar la fuente
|
|
176
|
+
* exacta) — útil para evitar acoplamiento directo con `src/profiles/ctl`.
|
|
177
|
+
*/
|
|
178
|
+
function ctlToMu(ctlFormula) {
|
|
179
|
+
return translate(ctlFormula, makeGensym());
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=ctl-translate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctl-translate.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/ctl-translate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { MuFormula, MuVarName, KripkeStructure } from './types';
|
|
2
|
+
export { muToString } from './types';
|
|
3
|
+
export { modelCheck, satisfiesAt } from './check';
|
|
4
|
+
export { isWellFormed, isClosed, isPositive, freeVars, alternationDepth } from './wellformed';
|
|
5
|
+
export { ctlToMu } from './ctl-translate';
|
|
6
|
+
export type { CTLLike } from './ctl-translate';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/index.ts"],"names":[],"mappings":"AAiBA,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST modal μ-calculus — punto de entrada público
|
|
4
|
+
// ============================================================
|
|
5
|
+
// API:
|
|
6
|
+
// modelCheck(K, φ) → Set<stateId> que satisfacen φ
|
|
7
|
+
// satisfiesAt(K, φ, s) → boolean
|
|
8
|
+
// isWellFormed(φ) → boolean (cerrada + positiva)
|
|
9
|
+
// isClosed(φ) / freeVars(φ) → análisis sintáctico
|
|
10
|
+
// alternationDepth(φ) → number
|
|
11
|
+
// ctlToMu(ctlFormula) → MuFormula
|
|
12
|
+
// muToString(φ) → notación textual
|
|
13
|
+
//
|
|
14
|
+
// El μ-cálculo subsume CTL, LTL y PDL: cualquier fórmula CTL puede
|
|
15
|
+
// traducirse vía `ctlToMu`. Es el "ensemble logic" de la familia
|
|
16
|
+
// modal/temporal.
|
|
17
|
+
// ============================================================
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ctlToMu = exports.alternationDepth = exports.freeVars = exports.isPositive = exports.isClosed = exports.isWellFormed = exports.satisfiesAt = exports.modelCheck = exports.muToString = void 0;
|
|
20
|
+
var types_1 = require("./types");
|
|
21
|
+
Object.defineProperty(exports, "muToString", { enumerable: true, get: function () { return types_1.muToString; } });
|
|
22
|
+
var check_1 = require("./check");
|
|
23
|
+
Object.defineProperty(exports, "modelCheck", { enumerable: true, get: function () { return check_1.modelCheck; } });
|
|
24
|
+
Object.defineProperty(exports, "satisfiesAt", { enumerable: true, get: function () { return check_1.satisfiesAt; } });
|
|
25
|
+
var wellformed_1 = require("./wellformed");
|
|
26
|
+
Object.defineProperty(exports, "isWellFormed", { enumerable: true, get: function () { return wellformed_1.isWellFormed; } });
|
|
27
|
+
Object.defineProperty(exports, "isClosed", { enumerable: true, get: function () { return wellformed_1.isClosed; } });
|
|
28
|
+
Object.defineProperty(exports, "isPositive", { enumerable: true, get: function () { return wellformed_1.isPositive; } });
|
|
29
|
+
Object.defineProperty(exports, "freeVars", { enumerable: true, get: function () { return wellformed_1.freeVars; } });
|
|
30
|
+
Object.defineProperty(exports, "alternationDepth", { enumerable: true, get: function () { return wellformed_1.alternationDepth; } });
|
|
31
|
+
var ctl_translate_1 = require("./ctl-translate");
|
|
32
|
+
Object.defineProperty(exports, "ctlToMu", { enumerable: true, get: function () { return ctl_translate_1.ctlToMu; } });
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,iDAAiD;AACjD,+DAA+D;AAC/D,OAAO;AACP,4DAA4D;AAC5D,sCAAsC;AACtC,2DAA2D;AAC3D,oDAAoD;AACpD,qCAAqC;AACrC,wCAAwC;AACxC,+CAA+C;AAC/C,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,kBAAkB;AAClB,+DAA+D;;;AAG/D,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AACnB,iCAAkD;AAAzC,mGAAA,UAAU,OAAA;AAAE,oGAAA,WAAW,OAAA;AAChC,2CAA8F;AAArF,0GAAA,YAAY,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,wGAAA,UAAU,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACvE,iDAA0C;AAAjC,wGAAA,OAAO,OAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Variable proposicional ligada por μ/ν. */
|
|
2
|
+
export type MuVarName = string;
|
|
3
|
+
/** AST del modal μ-calculus. */
|
|
4
|
+
export type MuFormula = {
|
|
5
|
+
kind: 'atom';
|
|
6
|
+
name: string;
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'var';
|
|
9
|
+
name: MuVarName;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'not';
|
|
12
|
+
arg: MuFormula;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'and';
|
|
15
|
+
left: MuFormula;
|
|
16
|
+
right: MuFormula;
|
|
17
|
+
} | {
|
|
18
|
+
kind: 'or';
|
|
19
|
+
left: MuFormula;
|
|
20
|
+
right: MuFormula;
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'box';
|
|
23
|
+
arg: MuFormula;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'diamond';
|
|
26
|
+
arg: MuFormula;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'mu';
|
|
29
|
+
bind: MuVarName;
|
|
30
|
+
body: MuFormula;
|
|
31
|
+
} | {
|
|
32
|
+
kind: 'nu';
|
|
33
|
+
bind: MuVarName;
|
|
34
|
+
body: MuFormula;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Estructura de Kripke en el formato pedido por la API pública del
|
|
38
|
+
* perfil. `labelling[stateId]` es el conjunto de proposiciones que
|
|
39
|
+
* se cumplen en ese estado.
|
|
40
|
+
*
|
|
41
|
+
* El algoritmo asume estructuras finitas. Estados sin sucesores son
|
|
42
|
+
* "deadlocks": `□φ` se cumple trivialmente, `◇φ` es falso.
|
|
43
|
+
*/
|
|
44
|
+
export interface KripkeStructure {
|
|
45
|
+
states: string[];
|
|
46
|
+
transitions: Array<[string, string]>;
|
|
47
|
+
labelling: Record<string, Set<string>>;
|
|
48
|
+
}
|
|
49
|
+
/** Renderiza una fórmula μ-cálculo a notación textual estándar. */
|
|
50
|
+
export declare function muToString(phi: MuFormula): string;
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/types.ts"],"names":[],"mappings":"AAgBA,6CAA6C;AAC7C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,gCAAgC;AAChC,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACxC;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAqBjD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST μ-calculus — tipos
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Modal μ-calculus: lógica modal extendida con operadores de
|
|
6
|
+
// punto fijo `μ` (least fixed-point) y `ν` (greatest fixed-point).
|
|
7
|
+
// Subsume CTL, LTL y PDL: cualquier fórmula CTL puede traducirse
|
|
8
|
+
// a μ-cálculo (ver `ctl-translate.ts`).
|
|
9
|
+
//
|
|
10
|
+
// Sintaxis:
|
|
11
|
+
// φ ::= p | X | ¬φ | φ ∧ φ | φ ∨ φ | □φ | ◇φ | μX. φ | νX. φ
|
|
12
|
+
//
|
|
13
|
+
// Restricción semántica: las variables ligadas deben aparecer
|
|
14
|
+
// bajo un número par de negaciones (positividad / monotonicidad)
|
|
15
|
+
// para que los puntos fijos existan por el teorema de Knaster-Tarski.
|
|
16
|
+
// ============================================================
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.muToString = muToString;
|
|
19
|
+
/** Renderiza una fórmula μ-cálculo a notación textual estándar. */
|
|
20
|
+
function muToString(phi) {
|
|
21
|
+
switch (phi.kind) {
|
|
22
|
+
case 'atom':
|
|
23
|
+
return phi.name;
|
|
24
|
+
case 'var':
|
|
25
|
+
return phi.name;
|
|
26
|
+
case 'not':
|
|
27
|
+
return `¬${muToString(phi.arg)}`;
|
|
28
|
+
case 'and':
|
|
29
|
+
return `(${muToString(phi.left)} ∧ ${muToString(phi.right)})`;
|
|
30
|
+
case 'or':
|
|
31
|
+
return `(${muToString(phi.left)} ∨ ${muToString(phi.right)})`;
|
|
32
|
+
case 'box':
|
|
33
|
+
return `□${muToString(phi.arg)}`;
|
|
34
|
+
case 'diamond':
|
|
35
|
+
return `◇${muToString(phi.arg)}`;
|
|
36
|
+
case 'mu':
|
|
37
|
+
return `μ${phi.bind}. ${muToString(phi.body)}`;
|
|
38
|
+
case 'nu':
|
|
39
|
+
return `ν${phi.bind}. ${muToString(phi.body)}`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAC/D,6DAA6D;AAC7D,mEAAmE;AACnE,iEAAiE;AACjE,wCAAwC;AACxC,EAAE;AACF,YAAY;AACZ,+DAA+D;AAC/D,EAAE;AACF,8DAA8D;AAC9D,iEAAiE;AACjE,sEAAsE;AACtE,+DAA+D;;AAgC/D,gCAqBC;AAtBD,mEAAmE;AACnE,SAAgB,UAAU,CAAC,GAAc;IACvC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAChE,KAAK,IAAI;YACP,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAChE,KAAK,KAAK;YACR,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI;YACP,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,KAAK,IAAI;YACP,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { MuFormula } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Verifica que una fórmula sea sintácticamente bien formada:
|
|
4
|
+
* - Cerrada (sin variables libres).
|
|
5
|
+
* - Positiva en cada variable ligada (paridad par de negaciones).
|
|
6
|
+
* - Sin shadowing nocivo: rebindings ocultan al outer, lo cual es
|
|
7
|
+
* legal pero detectable. Aquí lo permitimos.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isWellFormed(phi: MuFormula): boolean;
|
|
10
|
+
/** Variables libres del término. */
|
|
11
|
+
export declare function freeVars(phi: MuFormula): Set<string>;
|
|
12
|
+
/** Una fórmula es cerrada cuando no tiene variables libres. */
|
|
13
|
+
export declare function isClosed(phi: MuFormula): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Una fórmula es positiva cuando toda `var X` ligada por un μ/ν
|
|
16
|
+
* aparece bajo un número par de negaciones desde su binder.
|
|
17
|
+
*
|
|
18
|
+
* Implementación: caminamos el AST con un map `binder → paridad`
|
|
19
|
+
* (0 = par, 1 = impar) que se actualiza al cruzar un `not`. Cuando
|
|
20
|
+
* vemos `var X`, miramos su binder más cercano y verificamos que
|
|
21
|
+
* su paridad relativa sea par.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isPositive(phi: MuFormula): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Profundidad de alternancia μ/ν. Métrica clásica:
|
|
26
|
+
* ad(p) = ad(X) = 0
|
|
27
|
+
* ad(¬φ) = ad(◇φ) = ad(□φ) = ad(φ)
|
|
28
|
+
* ad(φ ∧ ψ) = ad(φ ∨ ψ) = max(ad(φ), ad(ψ))
|
|
29
|
+
* ad(μX. φ) = max(1, ad(φ), 1 + maxNuAlt(φ))
|
|
30
|
+
* ad(νX. φ) = max(1, ad(φ), 1 + maxMuAlt(φ))
|
|
31
|
+
* donde `maxNuAlt(φ)` es la profundidad considerando solo subfórmulas
|
|
32
|
+
* con binder ν cuyo cuerpo menciona la variable ligada externamente,
|
|
33
|
+
* y simétrico para μ.
|
|
34
|
+
*
|
|
35
|
+
* Aquí usamos la versión simplificada y muy usada en práctica
|
|
36
|
+
* (Cleaveland/Steffen): contar el cambio de tipo de binder en el
|
|
37
|
+
* camino sintáctico raíz→hoja.
|
|
38
|
+
*/
|
|
39
|
+
export declare function alternationDepth(phi: MuFormula): number;
|
|
40
|
+
//# sourceMappingURL=wellformed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wellformed.d.ts","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/wellformed.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEpD;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAIpD;AA+BD,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAElD;AAmCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// μ-calculus — well-formedness y alternation depth
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Una fórmula μ-cálculo es bien formada cuando:
|
|
6
|
+
// 1. Es "cerrada": cada `var` ligada referencia un `μ`/`ν` que la
|
|
7
|
+
// envuelve sintácticamente.
|
|
8
|
+
// 2. Es "positiva": cada variable ligada aparece bajo un número PAR
|
|
9
|
+
// de negaciones desde su binder. Esto garantiza monotonía del
|
|
10
|
+
// funcional asociado y la existencia de los puntos fijos por
|
|
11
|
+
// Knaster-Tarski.
|
|
12
|
+
//
|
|
13
|
+
// Alternation depth: máxima profundidad de anidamiento alternante
|
|
14
|
+
// μ/ν con variables libres del binder externo. Aproximación estándar
|
|
15
|
+
// (Niwiński/Emerson-Lei): si el body de un μX contiene νY donde Y
|
|
16
|
+
// depende sintácticamente de X (o viceversa), la profundidad sube.
|
|
17
|
+
// Aquí usamos la versión sintáctica simple: cuento bindings μ/ν
|
|
18
|
+
// distintos en el camino raíz→hoja, contando saltos μ↔ν.
|
|
19
|
+
// ============================================================
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.isWellFormed = isWellFormed;
|
|
22
|
+
exports.freeVars = freeVars;
|
|
23
|
+
exports.isClosed = isClosed;
|
|
24
|
+
exports.isPositive = isPositive;
|
|
25
|
+
exports.alternationDepth = alternationDepth;
|
|
26
|
+
/**
|
|
27
|
+
* Verifica que una fórmula sea sintácticamente bien formada:
|
|
28
|
+
* - Cerrada (sin variables libres).
|
|
29
|
+
* - Positiva en cada variable ligada (paridad par de negaciones).
|
|
30
|
+
* - Sin shadowing nocivo: rebindings ocultan al outer, lo cual es
|
|
31
|
+
* legal pero detectable. Aquí lo permitimos.
|
|
32
|
+
*/
|
|
33
|
+
function isWellFormed(phi) {
|
|
34
|
+
return isClosed(phi) && isPositive(phi);
|
|
35
|
+
}
|
|
36
|
+
/** Variables libres del término. */
|
|
37
|
+
function freeVars(phi) {
|
|
38
|
+
const out = new Set();
|
|
39
|
+
collectFree(phi, new Set(), out);
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function collectFree(phi, bound, out) {
|
|
43
|
+
switch (phi.kind) {
|
|
44
|
+
case 'atom':
|
|
45
|
+
return;
|
|
46
|
+
case 'var':
|
|
47
|
+
if (!bound.has(phi.name))
|
|
48
|
+
out.add(phi.name);
|
|
49
|
+
return;
|
|
50
|
+
case 'not':
|
|
51
|
+
collectFree(phi.arg, bound, out);
|
|
52
|
+
return;
|
|
53
|
+
case 'and':
|
|
54
|
+
case 'or':
|
|
55
|
+
collectFree(phi.left, bound, out);
|
|
56
|
+
collectFree(phi.right, bound, out);
|
|
57
|
+
return;
|
|
58
|
+
case 'box':
|
|
59
|
+
case 'diamond':
|
|
60
|
+
collectFree(phi.arg, bound, out);
|
|
61
|
+
return;
|
|
62
|
+
case 'mu':
|
|
63
|
+
case 'nu': {
|
|
64
|
+
const nextBound = new Set(bound);
|
|
65
|
+
nextBound.add(phi.bind);
|
|
66
|
+
collectFree(phi.body, nextBound, out);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Una fórmula es cerrada cuando no tiene variables libres. */
|
|
72
|
+
function isClosed(phi) {
|
|
73
|
+
return freeVars(phi).size === 0;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Una fórmula es positiva cuando toda `var X` ligada por un μ/ν
|
|
77
|
+
* aparece bajo un número par de negaciones desde su binder.
|
|
78
|
+
*
|
|
79
|
+
* Implementación: caminamos el AST con un map `binder → paridad`
|
|
80
|
+
* (0 = par, 1 = impar) que se actualiza al cruzar un `not`. Cuando
|
|
81
|
+
* vemos `var X`, miramos su binder más cercano y verificamos que
|
|
82
|
+
* su paridad relativa sea par.
|
|
83
|
+
*/
|
|
84
|
+
function isPositive(phi) {
|
|
85
|
+
return checkPositive(phi, new Map(), 0);
|
|
86
|
+
}
|
|
87
|
+
function checkPositive(phi, parityAt, parityHere) {
|
|
88
|
+
switch (phi.kind) {
|
|
89
|
+
case 'atom':
|
|
90
|
+
return true;
|
|
91
|
+
case 'var': {
|
|
92
|
+
const parityAtBinder = parityAt.get(phi.name);
|
|
93
|
+
if (parityAtBinder === undefined) {
|
|
94
|
+
// Variable libre: no es responsabilidad de positividad detectarlo.
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
// Paridad relativa = (parityHere - parityAtBinder) mod 2.
|
|
98
|
+
return (parityHere - parityAtBinder) % 2 === 0;
|
|
99
|
+
}
|
|
100
|
+
case 'not':
|
|
101
|
+
return checkPositive(phi.arg, parityAt, (parityHere + 1) % 2);
|
|
102
|
+
case 'and':
|
|
103
|
+
case 'or':
|
|
104
|
+
return (checkPositive(phi.left, parityAt, parityHere) &&
|
|
105
|
+
checkPositive(phi.right, parityAt, parityHere));
|
|
106
|
+
case 'box':
|
|
107
|
+
case 'diamond':
|
|
108
|
+
return checkPositive(phi.arg, parityAt, parityHere);
|
|
109
|
+
case 'mu':
|
|
110
|
+
case 'nu': {
|
|
111
|
+
const next = new Map(parityAt);
|
|
112
|
+
next.set(phi.bind, parityHere);
|
|
113
|
+
return checkPositive(phi.body, next, parityHere);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Profundidad de alternancia μ/ν. Métrica clásica:
|
|
119
|
+
* ad(p) = ad(X) = 0
|
|
120
|
+
* ad(¬φ) = ad(◇φ) = ad(□φ) = ad(φ)
|
|
121
|
+
* ad(φ ∧ ψ) = ad(φ ∨ ψ) = max(ad(φ), ad(ψ))
|
|
122
|
+
* ad(μX. φ) = max(1, ad(φ), 1 + maxNuAlt(φ))
|
|
123
|
+
* ad(νX. φ) = max(1, ad(φ), 1 + maxMuAlt(φ))
|
|
124
|
+
* donde `maxNuAlt(φ)` es la profundidad considerando solo subfórmulas
|
|
125
|
+
* con binder ν cuyo cuerpo menciona la variable ligada externamente,
|
|
126
|
+
* y simétrico para μ.
|
|
127
|
+
*
|
|
128
|
+
* Aquí usamos la versión simplificada y muy usada en práctica
|
|
129
|
+
* (Cleaveland/Steffen): contar el cambio de tipo de binder en el
|
|
130
|
+
* camino sintáctico raíz→hoja.
|
|
131
|
+
*/
|
|
132
|
+
function alternationDepth(phi) {
|
|
133
|
+
return computeDepth(phi, null);
|
|
134
|
+
}
|
|
135
|
+
function computeDepth(phi, lastBinder) {
|
|
136
|
+
switch (phi.kind) {
|
|
137
|
+
case 'atom':
|
|
138
|
+
case 'var':
|
|
139
|
+
return 0;
|
|
140
|
+
case 'not':
|
|
141
|
+
case 'box':
|
|
142
|
+
case 'diamond':
|
|
143
|
+
return computeDepth(phi.arg, lastBinder);
|
|
144
|
+
case 'and':
|
|
145
|
+
case 'or':
|
|
146
|
+
return Math.max(computeDepth(phi.left, lastBinder), computeDepth(phi.right, lastBinder));
|
|
147
|
+
case 'mu': {
|
|
148
|
+
const inner = computeDepth(phi.body, 'mu');
|
|
149
|
+
// Mismo tipo de binder consecutivo: pertenece al mismo "segmento"
|
|
150
|
+
// y no aporta alternancia adicional. Cambio (o segmento inicial)
|
|
151
|
+
// suma 1 nivel al conteo del cuerpo.
|
|
152
|
+
return lastBinder === 'mu' ? inner : 1 + inner;
|
|
153
|
+
}
|
|
154
|
+
case 'nu': {
|
|
155
|
+
const inner = computeDepth(phi.body, 'nu');
|
|
156
|
+
return lastBinder === 'nu' ? inner : 1 + inner;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=wellformed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wellformed.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/wellformed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LKProof } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Elimina todos los cortes de la derivacion. Devuelve una derivacion
|
|
4
|
+
* estructuralmente equivalente al mismo secuente sin nodos `cut`.
|
|
5
|
+
*
|
|
6
|
+
* Implementacion: eliminamos primero los cortes interiores (de las
|
|
7
|
+
* hojas hacia la raiz) y luego reducimos el cut de la raiz aplicando
|
|
8
|
+
* la regla principal correspondiente.
|
|
9
|
+
*/
|
|
10
|
+
export declare function eliminateCut(proof: LKProof): LKProof;
|
|
11
|
+
//# sourceMappingURL=cut-elimination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cut-elimination.d.ts","sourceRoot":"","sources":["../../../src/profiles/sequent-lk/cut-elimination.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA+JlC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAsBpD"}
|