@stevenvo780/st-lang 4.2.0 → 4.3.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 -1
- package/dist/index.js.map +1 -1
- package/dist/lambda-calc/church.d.ts +8 -0
- package/dist/lambda-calc/church.d.ts.map +1 -0
- package/dist/lambda-calc/church.js +67 -0
- package/dist/lambda-calc/church.js.map +1 -0
- package/dist/lambda-calc/combinators.d.ts +8 -0
- package/dist/lambda-calc/combinators.d.ts.map +1 -0
- package/dist/lambda-calc/combinators.js +24 -0
- package/dist/lambda-calc/combinators.js.map +1 -0
- package/dist/lambda-calc/index.d.ts +8 -0
- package/dist/lambda-calc/index.d.ts.map +1 -0
- package/dist/lambda-calc/index.js +48 -0
- package/dist/lambda-calc/index.js.map +1 -0
- package/dist/lambda-calc/reduce.d.ts +18 -0
- package/dist/lambda-calc/reduce.d.ts.map +1 -0
- package/dist/lambda-calc/reduce.js +174 -0
- package/dist/lambda-calc/reduce.js.map +1 -0
- package/dist/lambda-calc/substitution.d.ts +6 -0
- package/dist/lambda-calc/substitution.d.ts.map +1 -0
- package/dist/lambda-calc/substitution.js +120 -0
- package/dist/lambda-calc/substitution.js.map +1 -0
- package/dist/lambda-calc/types.d.ts +19 -0
- package/dist/lambda-calc/types.d.ts.map +1 -0
- package/dist/lambda-calc/types.js +72 -0
- package/dist/lambda-calc/types.js.map +1 -0
- package/dist/profiles/intuitionistic-nj/formula.d.ts +19 -0
- package/dist/profiles/intuitionistic-nj/formula.d.ts.map +1 -0
- package/dist/profiles/intuitionistic-nj/formula.js +99 -0
- package/dist/profiles/intuitionistic-nj/formula.js.map +1 -0
- package/dist/profiles/intuitionistic-nj/index.d.ts +5 -0
- package/dist/profiles/intuitionistic-nj/index.d.ts.map +1 -0
- package/dist/profiles/intuitionistic-nj/index.js +24 -0
- package/dist/profiles/intuitionistic-nj/index.js.map +1 -0
- package/dist/profiles/intuitionistic-nj/kripke.d.ts +17 -0
- package/dist/profiles/intuitionistic-nj/kripke.d.ts.map +1 -0
- package/dist/profiles/intuitionistic-nj/kripke.js +206 -0
- package/dist/profiles/intuitionistic-nj/kripke.js.map +1 -0
- package/dist/profiles/intuitionistic-nj/prover.d.ts +13 -0
- package/dist/profiles/intuitionistic-nj/prover.d.ts.map +1 -0
- package/dist/profiles/intuitionistic-nj/prover.js +418 -0
- package/dist/profiles/intuitionistic-nj/prover.js.map +1 -0
- package/dist/profiles/intuitionistic-nj/types.d.ts +55 -0
- package/dist/profiles/intuitionistic-nj/types.d.ts.map +1 -0
- package/dist/profiles/intuitionistic-nj/types.js +21 -0
- package/dist/profiles/intuitionistic-nj/types.js.map +1 -0
- package/dist/profiles/many-valued/index.d.ts +39 -0
- package/dist/profiles/many-valued/index.d.ts.map +1 -0
- package/dist/profiles/many-valued/index.js +250 -0
- package/dist/profiles/many-valued/index.js.map +1 -0
- package/dist/profiles/modal-frame-axioms/formula.d.ts +23 -0
- package/dist/profiles/modal-frame-axioms/formula.d.ts.map +1 -0
- package/dist/profiles/modal-frame-axioms/formula.js +158 -0
- package/dist/profiles/modal-frame-axioms/formula.js.map +1 -0
- package/dist/profiles/modal-frame-axioms/index.d.ts +6 -0
- package/dist/profiles/modal-frame-axioms/index.d.ts.map +1 -0
- package/dist/profiles/modal-frame-axioms/index.js +41 -0
- package/dist/profiles/modal-frame-axioms/index.js.map +1 -0
- package/dist/profiles/modal-frame-axioms/systems.d.ts +29 -0
- package/dist/profiles/modal-frame-axioms/systems.d.ts.map +1 -0
- package/dist/profiles/modal-frame-axioms/systems.js +96 -0
- package/dist/profiles/modal-frame-axioms/systems.js.map +1 -0
- package/dist/profiles/modal-frame-axioms/tableau.d.ts +12 -0
- package/dist/profiles/modal-frame-axioms/tableau.d.ts.map +1 -0
- package/dist/profiles/modal-frame-axioms/tableau.js +299 -0
- package/dist/profiles/modal-frame-axioms/tableau.js.map +1 -0
- package/dist/profiles/modal-frame-axioms/types.d.ts +61 -0
- package/dist/profiles/modal-frame-axioms/types.d.ts.map +1 -0
- package/dist/profiles/modal-frame-axioms/types.js +27 -0
- package/dist/profiles/modal-frame-axioms/types.js.map +1 -0
- package/dist/profiles/substructural/index.d.ts +4 -0
- package/dist/profiles/substructural/index.d.ts.map +1 -0
- package/dist/profiles/substructural/index.js +22 -0
- package/dist/profiles/substructural/index.js.map +1 -0
- package/dist/profiles/substructural/prover.d.ts +13 -0
- package/dist/profiles/substructural/prover.d.ts.map +1 -0
- package/dist/profiles/substructural/prover.js +481 -0
- package/dist/profiles/substructural/prover.js.map +1 -0
- package/dist/profiles/substructural/types.d.ts +72 -0
- package/dist/profiles/substructural/types.d.ts.map +1 -0
- package/dist/profiles/substructural/types.js +27 -0
- package/dist/profiles/substructural/types.js.map +1 -0
- package/dist/runtime/abduction/entails.d.ts +21 -0
- package/dist/runtime/abduction/entails.d.ts.map +1 -0
- package/dist/runtime/abduction/entails.js +308 -0
- package/dist/runtime/abduction/entails.js.map +1 -0
- package/dist/runtime/abduction/find.d.ts +18 -0
- package/dist/runtime/abduction/find.d.ts.map +1 -0
- package/dist/runtime/abduction/find.js +202 -0
- package/dist/runtime/abduction/find.js.map +1 -0
- package/dist/runtime/abduction/index.d.ts +4 -0
- package/dist/runtime/abduction/index.d.ts.map +1 -0
- package/dist/runtime/abduction/index.js +26 -0
- package/dist/runtime/abduction/index.js.map +1 -0
- package/dist/runtime/abduction/types.d.ts +78 -0
- package/dist/runtime/abduction/types.d.ts.map +1 -0
- package/dist/runtime/abduction/types.js +23 -0
- package/dist/runtime/abduction/types.js.map +1 -0
- package/dist/runtime/bayesian/factor.d.ts +22 -0
- package/dist/runtime/bayesian/factor.d.ts.map +1 -0
- package/dist/runtime/bayesian/factor.js +249 -0
- package/dist/runtime/bayesian/factor.js.map +1 -0
- package/dist/runtime/bayesian/index.d.ts +3 -0
- package/dist/runtime/bayesian/index.d.ts.map +1 -0
- package/dist/runtime/bayesian/index.js +25 -0
- package/dist/runtime/bayesian/index.js.map +1 -0
- package/dist/runtime/bayesian/inference.d.ts +6 -0
- package/dist/runtime/bayesian/inference.d.ts.map +1 -0
- package/dist/runtime/bayesian/inference.js +260 -0
- package/dist/runtime/bayesian/inference.js.map +1 -0
- package/dist/runtime/bayesian/types.d.ts +19 -0
- package/dist/runtime/bayesian/types.d.ts.map +1 -0
- package/dist/runtime/bayesian/types.js +9 -0
- package/dist/runtime/bayesian/types.js.map +1 -0
- package/dist/runtime/bisimulation/index.d.ts +4 -0
- package/dist/runtime/bisimulation/index.d.ts.map +1 -0
- package/dist/runtime/bisimulation/index.js +21 -0
- package/dist/runtime/bisimulation/index.js.map +1 -0
- package/dist/runtime/bisimulation/operations.d.ts +40 -0
- package/dist/runtime/bisimulation/operations.d.ts.map +1 -0
- package/dist/runtime/bisimulation/operations.js +219 -0
- package/dist/runtime/bisimulation/operations.js.map +1 -0
- package/dist/runtime/bisimulation/paige-tarjan.d.ts +8 -0
- package/dist/runtime/bisimulation/paige-tarjan.d.ts.map +1 -0
- package/dist/runtime/bisimulation/paige-tarjan.js +199 -0
- package/dist/runtime/bisimulation/paige-tarjan.js.map +1 -0
- package/dist/runtime/bisimulation/types.d.ts +26 -0
- package/dist/runtime/bisimulation/types.d.ts.map +1 -0
- package/dist/runtime/bisimulation/types.js +22 -0
- package/dist/runtime/bisimulation/types.js.map +1 -0
- package/dist/runtime/fca/context.d.ts +46 -0
- package/dist/runtime/fca/context.d.ts.map +1 -0
- package/dist/runtime/fca/context.js +155 -0
- package/dist/runtime/fca/context.js.map +1 -0
- package/dist/runtime/fca/implications.d.ts +10 -0
- package/dist/runtime/fca/implications.d.ts.map +1 -0
- package/dist/runtime/fca/implications.js +33 -0
- package/dist/runtime/fca/implications.js.map +1 -0
- package/dist/runtime/fca/index.d.ts +6 -0
- package/dist/runtime/fca/index.d.ts.map +1 -0
- package/dist/runtime/fca/index.js +39 -0
- package/dist/runtime/fca/index.js.map +1 -0
- package/dist/runtime/fca/lattice.d.ts +10 -0
- package/dist/runtime/fca/lattice.d.ts.map +1 -0
- package/dist/runtime/fca/lattice.js +86 -0
- package/dist/runtime/fca/lattice.js.map +1 -0
- package/dist/runtime/fca/next-closure.d.ts +12 -0
- package/dist/runtime/fca/next-closure.d.ts.map +1 -0
- package/dist/runtime/fca/next-closure.js +99 -0
- package/dist/runtime/fca/next-closure.js.map +1 -0
- package/dist/runtime/fca/types.d.ts +31 -0
- package/dist/runtime/fca/types.d.ts.map +1 -0
- package/dist/runtime/fca/types.js +30 -0
- package/dist/runtime/fca/types.js.map +1 -0
- package/dist/runtime/proof-minify/index.d.ts +3 -0
- package/dist/runtime/proof-minify/index.d.ts.map +1 -0
- package/dist/runtime/proof-minify/index.js +13 -0
- package/dist/runtime/proof-minify/index.js.map +1 -0
- package/dist/runtime/proof-minify/minify.d.ts +13 -0
- package/dist/runtime/proof-minify/minify.d.ts.map +1 -0
- package/dist/runtime/proof-minify/minify.js +540 -0
- package/dist/runtime/proof-minify/minify.js.map +1 -0
- package/dist/runtime/proof-minify/types.d.ts +89 -0
- package/dist/runtime/proof-minify/types.d.ts.map +1 -0
- package/dist/runtime/proof-minify/types.js +16 -0
- package/dist/runtime/proof-minify/types.js.map +1 -0
- package/dist/runtime/symbolic-diff/constructors.d.ts +16 -0
- package/dist/runtime/symbolic-diff/constructors.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/constructors.js +75 -0
- package/dist/runtime/symbolic-diff/constructors.js.map +1 -0
- package/dist/runtime/symbolic-diff/differentiate.d.ts +22 -0
- package/dist/runtime/symbolic-diff/differentiate.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/differentiate.js +107 -0
- package/dist/runtime/symbolic-diff/differentiate.js.map +1 -0
- package/dist/runtime/symbolic-diff/evaluate.d.ts +3 -0
- package/dist/runtime/symbolic-diff/evaluate.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/evaluate.js +47 -0
- package/dist/runtime/symbolic-diff/evaluate.js.map +1 -0
- package/dist/runtime/symbolic-diff/index.d.ts +9 -0
- package/dist/runtime/symbolic-diff/index.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/index.js +34 -0
- package/dist/runtime/symbolic-diff/index.js.map +1 -0
- package/dist/runtime/symbolic-diff/parse.d.ts +16 -0
- package/dist/runtime/symbolic-diff/parse.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/parse.js +206 -0
- package/dist/runtime/symbolic-diff/parse.js.map +1 -0
- package/dist/runtime/symbolic-diff/simplify.d.ts +11 -0
- package/dist/runtime/symbolic-diff/simplify.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/simplify.js +214 -0
- package/dist/runtime/symbolic-diff/simplify.js.map +1 -0
- package/dist/runtime/symbolic-diff/stringify.d.ts +3 -0
- package/dist/runtime/symbolic-diff/stringify.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/stringify.js +69 -0
- package/dist/runtime/symbolic-diff/stringify.js.map +1 -0
- package/dist/runtime/symbolic-diff/types.d.ts +35 -0
- package/dist/runtime/symbolic-diff/types.d.ts.map +1 -0
- package/dist/runtime/symbolic-diff/types.js +9 -0
- package/dist/runtime/symbolic-diff/types.js.map +1 -0
- package/dist/runtime/term-rewriting/critical-pairs.d.ts +38 -0
- package/dist/runtime/term-rewriting/critical-pairs.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/critical-pairs.js +109 -0
- package/dist/runtime/term-rewriting/critical-pairs.js.map +1 -0
- package/dist/runtime/term-rewriting/index.d.ts +9 -0
- package/dist/runtime/term-rewriting/index.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/index.js +38 -0
- package/dist/runtime/term-rewriting/index.js.map +1 -0
- package/dist/runtime/term-rewriting/knuth-bendix.d.ts +29 -0
- package/dist/runtime/term-rewriting/knuth-bendix.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/knuth-bendix.js +196 -0
- package/dist/runtime/term-rewriting/knuth-bendix.js.map +1 -0
- package/dist/runtime/term-rewriting/lpo.d.ts +17 -0
- package/dist/runtime/term-rewriting/lpo.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/lpo.js +158 -0
- package/dist/runtime/term-rewriting/lpo.js.map +1 -0
- package/dist/runtime/term-rewriting/rewrite.d.ts +44 -0
- package/dist/runtime/term-rewriting/rewrite.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/rewrite.js +189 -0
- package/dist/runtime/term-rewriting/rewrite.js.map +1 -0
- package/dist/runtime/term-rewriting/term-utils.d.ts +64 -0
- package/dist/runtime/term-rewriting/term-utils.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/term-utils.js +360 -0
- package/dist/runtime/term-rewriting/term-utils.js.map +1 -0
- package/dist/runtime/term-rewriting/types.d.ts +66 -0
- package/dist/runtime/term-rewriting/types.d.ts.map +1 -0
- package/dist/runtime/term-rewriting/types.js +21 -0
- package/dist/runtime/term-rewriting/types.js.map +1 -0
- package/dist/tests/abduction/abduction.test.d.ts +2 -0
- package/dist/tests/abduction/abduction.test.d.ts.map +1 -0
- package/dist/tests/abduction/abduction.test.js +380 -0
- package/dist/tests/abduction/abduction.test.js.map +1 -0
- package/dist/tests/bayesian/bayesian.test.d.ts +2 -0
- package/dist/tests/bayesian/bayesian.test.d.ts.map +1 -0
- package/dist/tests/bayesian/bayesian.test.js +328 -0
- package/dist/tests/bayesian/bayesian.test.js.map +1 -0
- package/dist/tests/bisimulation/paige-tarjan.test.d.ts +2 -0
- package/dist/tests/bisimulation/paige-tarjan.test.d.ts.map +1 -0
- package/dist/tests/bisimulation/paige-tarjan.test.js +254 -0
- package/dist/tests/bisimulation/paige-tarjan.test.js.map +1 -0
- package/dist/tests/fca/fca.test.d.ts +2 -0
- package/dist/tests/fca/fca.test.d.ts.map +1 -0
- package/dist/tests/fca/fca.test.js +317 -0
- package/dist/tests/fca/fca.test.js.map +1 -0
- package/dist/tests/intuitionistic-nj/nj.test.d.ts +2 -0
- package/dist/tests/intuitionistic-nj/nj.test.d.ts.map +1 -0
- package/dist/tests/intuitionistic-nj/nj.test.js +216 -0
- package/dist/tests/intuitionistic-nj/nj.test.js.map +1 -0
- package/dist/tests/lambda-calc/lambda-calc.test.d.ts +2 -0
- package/dist/tests/lambda-calc/lambda-calc.test.d.ts.map +1 -0
- package/dist/tests/lambda-calc/lambda-calc.test.js +164 -0
- package/dist/tests/lambda-calc/lambda-calc.test.js.map +1 -0
- package/dist/tests/many-valued/many-valued.test.d.ts +2 -0
- package/dist/tests/many-valued/many-valued.test.d.ts.map +1 -0
- package/dist/tests/many-valued/many-valued.test.js +150 -0
- package/dist/tests/many-valued/many-valued.test.js.map +1 -0
- package/dist/tests/modal-frame-axioms/frame-axioms.test.d.ts +2 -0
- package/dist/tests/modal-frame-axioms/frame-axioms.test.d.ts.map +1 -0
- package/dist/tests/modal-frame-axioms/frame-axioms.test.js +236 -0
- package/dist/tests/modal-frame-axioms/frame-axioms.test.js.map +1 -0
- package/dist/tests/proof-minify/minify.test.d.ts +2 -0
- package/dist/tests/proof-minify/minify.test.d.ts.map +1 -0
- package/dist/tests/proof-minify/minify.test.js +281 -0
- package/dist/tests/proof-minify/minify.test.js.map +1 -0
- package/dist/tests/substructural/prover.test.d.ts +2 -0
- package/dist/tests/substructural/prover.test.d.ts.map +1 -0
- package/dist/tests/substructural/prover.test.js +271 -0
- package/dist/tests/substructural/prover.test.js.map +1 -0
- package/dist/tests/symbolic-diff/symbolic-diff.test.d.ts +2 -0
- package/dist/tests/symbolic-diff/symbolic-diff.test.d.ts.map +1 -0
- package/dist/tests/symbolic-diff/symbolic-diff.test.js +278 -0
- package/dist/tests/symbolic-diff/symbolic-diff.test.js.map +1 -0
- package/dist/tests/term-rewriting/critical-pairs.test.d.ts +2 -0
- package/dist/tests/term-rewriting/critical-pairs.test.d.ts.map +1 -0
- package/dist/tests/term-rewriting/critical-pairs.test.js +34 -0
- package/dist/tests/term-rewriting/critical-pairs.test.js.map +1 -0
- package/dist/tests/term-rewriting/knuth-bendix.test.d.ts +2 -0
- package/dist/tests/term-rewriting/knuth-bendix.test.d.ts.map +1 -0
- package/dist/tests/term-rewriting/knuth-bendix.test.js +94 -0
- package/dist/tests/term-rewriting/knuth-bendix.test.js.map +1 -0
- package/dist/tests/term-rewriting/lpo.test.d.ts +2 -0
- package/dist/tests/term-rewriting/lpo.test.d.ts.map +1 -0
- package/dist/tests/term-rewriting/lpo.test.js +57 -0
- package/dist/tests/term-rewriting/lpo.test.js.map +1 -0
- package/dist/tests/term-rewriting/rewrite.test.d.ts +2 -0
- package/dist/tests/term-rewriting/rewrite.test.d.ts.map +1 -0
- package/dist/tests/term-rewriting/rewrite.test.js +56 -0
- package/dist/tests/term-rewriting/rewrite.test.js.map +1 -0
- package/dist/tests/term-rewriting/term-utils.test.d.ts +2 -0
- package/dist/tests/term-rewriting/term-utils.test.d.ts.map +1 -0
- package/dist/tests/term-rewriting/term-utils.test.js +58 -0
- package/dist/tests/term-rewriting/term-utils.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Many-valued logics — Łukasiewicz, Gödel, Product
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Tres lógicas borrosas / multivaluadas con valores en [0, 1].
|
|
6
|
+
// Cada sistema define sus propias conectivas, con un núcleo
|
|
7
|
+
// común: T-norm + T-conorm + implicación residuada + negación.
|
|
8
|
+
//
|
|
9
|
+
// Sistemas:
|
|
10
|
+
// * lukasiewicz: t-norm = max(0, p+q-1), s-norm = min(1, p+q),
|
|
11
|
+
// imp = min(1, 1-p+q), neg = 1-p (involutiva).
|
|
12
|
+
// * godel: t-norm = min(p, q), s-norm = max(p, q),
|
|
13
|
+
// imp = 1 si p<=q, q en otro caso;
|
|
14
|
+
// neg(p) = 1 si p=0, 0 en otro caso.
|
|
15
|
+
// * product: t-norm = p*q, s-norm = p + q - p*q,
|
|
16
|
+
// imp = 1 si p<=q, q/p en otro caso;
|
|
17
|
+
// neg(p) = 1 si p=0, 0 en otro caso.
|
|
18
|
+
//
|
|
19
|
+
// Una tautología es una fórmula cuyo valor es 1 para toda
|
|
20
|
+
// asignación; aquí "toda asignación" se aproxima por sampling
|
|
21
|
+
// en una rejilla finita (resolution puntos por átomo).
|
|
22
|
+
// ============================================================
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.atom = atom;
|
|
25
|
+
exports.not = not;
|
|
26
|
+
exports.and = and;
|
|
27
|
+
exports.or = or;
|
|
28
|
+
exports.implies = implies;
|
|
29
|
+
exports.collectFuzzyAtoms = collectFuzzyAtoms;
|
|
30
|
+
exports.evaluate = evaluate;
|
|
31
|
+
exports.isTautology = isTautology;
|
|
32
|
+
exports.isContradiction = isContradiction;
|
|
33
|
+
exports.findValuation = findValuation;
|
|
34
|
+
// ── Helpers numéricos ───────────────────────────────────────
|
|
35
|
+
/** Recorta x al intervalo [0,1] absorbiendo error de coma flotante. */
|
|
36
|
+
function clamp01(x) {
|
|
37
|
+
if (Number.isNaN(x))
|
|
38
|
+
return 0;
|
|
39
|
+
if (x < 0)
|
|
40
|
+
return 0;
|
|
41
|
+
if (x > 1)
|
|
42
|
+
return 1;
|
|
43
|
+
return x;
|
|
44
|
+
}
|
|
45
|
+
// ── Conectivas por sistema ──────────────────────────────────
|
|
46
|
+
function tnorm(system, p, q) {
|
|
47
|
+
switch (system) {
|
|
48
|
+
case 'lukasiewicz':
|
|
49
|
+
return clamp01(Math.max(0, p + q - 1));
|
|
50
|
+
case 'godel':
|
|
51
|
+
return Math.min(p, q);
|
|
52
|
+
case 'product':
|
|
53
|
+
return clamp01(p * q);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function snorm(system, p, q) {
|
|
57
|
+
switch (system) {
|
|
58
|
+
case 'lukasiewicz':
|
|
59
|
+
return clamp01(Math.min(1, p + q));
|
|
60
|
+
case 'godel':
|
|
61
|
+
return Math.max(p, q);
|
|
62
|
+
case 'product':
|
|
63
|
+
return clamp01(p + q - p * q);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function implication(system, p, q) {
|
|
67
|
+
switch (system) {
|
|
68
|
+
case 'lukasiewicz':
|
|
69
|
+
return clamp01(Math.min(1, 1 - p + q));
|
|
70
|
+
case 'godel':
|
|
71
|
+
return p <= q ? 1 : q;
|
|
72
|
+
case 'product':
|
|
73
|
+
if (p <= q)
|
|
74
|
+
return 1;
|
|
75
|
+
if (p === 0)
|
|
76
|
+
return 1;
|
|
77
|
+
return clamp01(q / p);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function negation(system, p) {
|
|
81
|
+
switch (system) {
|
|
82
|
+
case 'lukasiewicz':
|
|
83
|
+
return clamp01(1 - p);
|
|
84
|
+
case 'godel':
|
|
85
|
+
case 'product':
|
|
86
|
+
return p === 0 ? 1 : 0;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// ── Constructores de fórmulas ───────────────────────────────
|
|
90
|
+
function atom(name) {
|
|
91
|
+
return { kind: 'atom', name };
|
|
92
|
+
}
|
|
93
|
+
function not(arg) {
|
|
94
|
+
return { kind: 'not', arg };
|
|
95
|
+
}
|
|
96
|
+
function and(left, right) {
|
|
97
|
+
return { kind: 'and', left, right };
|
|
98
|
+
}
|
|
99
|
+
function or(left, right) {
|
|
100
|
+
return { kind: 'or', left, right };
|
|
101
|
+
}
|
|
102
|
+
function implies(left, right) {
|
|
103
|
+
return { kind: 'implies', left, right };
|
|
104
|
+
}
|
|
105
|
+
// ── Atoms collection ────────────────────────────────────────
|
|
106
|
+
function collectFuzzyAtoms(formula) {
|
|
107
|
+
const set = new Set();
|
|
108
|
+
const visit = (f) => {
|
|
109
|
+
switch (f.kind) {
|
|
110
|
+
case 'atom':
|
|
111
|
+
if (f.name)
|
|
112
|
+
set.add(f.name);
|
|
113
|
+
return;
|
|
114
|
+
case 'not':
|
|
115
|
+
if (f.arg)
|
|
116
|
+
visit(f.arg);
|
|
117
|
+
return;
|
|
118
|
+
case 'and':
|
|
119
|
+
case 'or':
|
|
120
|
+
case 'implies':
|
|
121
|
+
if (f.left)
|
|
122
|
+
visit(f.left);
|
|
123
|
+
if (f.right)
|
|
124
|
+
visit(f.right);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
visit(formula);
|
|
129
|
+
return Array.from(set).sort();
|
|
130
|
+
}
|
|
131
|
+
// ── Evaluación ──────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Evalúa una fórmula borrosa bajo un environment que asigna
|
|
134
|
+
* un valor en [0,1] a cada átomo (átomos sin asignar valen 0).
|
|
135
|
+
*/
|
|
136
|
+
function evaluate(formula, env, system) {
|
|
137
|
+
switch (formula.kind) {
|
|
138
|
+
case 'atom': {
|
|
139
|
+
const v = formula.name ? env[formula.name] : undefined;
|
|
140
|
+
return clamp01(v ?? 0);
|
|
141
|
+
}
|
|
142
|
+
case 'not':
|
|
143
|
+
return negation(system, formula.arg ? evaluate(formula.arg, env, system) : 0);
|
|
144
|
+
case 'and':
|
|
145
|
+
return tnorm(system, formula.left ? evaluate(formula.left, env, system) : 0, formula.right ? evaluate(formula.right, env, system) : 0);
|
|
146
|
+
case 'or':
|
|
147
|
+
return snorm(system, formula.left ? evaluate(formula.left, env, system) : 0, formula.right ? evaluate(formula.right, env, system) : 0);
|
|
148
|
+
case 'implies':
|
|
149
|
+
return implication(system, formula.left ? evaluate(formula.left, env, system) : 0, formula.right ? evaluate(formula.right, env, system) : 0);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// ── Sampling sobre la rejilla [0,1]^n ───────────────────────
|
|
153
|
+
/** Genera la rejilla {0, 1/(r-1), ..., 1} de `resolution` puntos. */
|
|
154
|
+
function gridPoints(resolution) {
|
|
155
|
+
if (resolution < 2)
|
|
156
|
+
return [0, 1];
|
|
157
|
+
const out = [];
|
|
158
|
+
for (let i = 0; i < resolution; i++) {
|
|
159
|
+
out.push(i / (resolution - 1));
|
|
160
|
+
}
|
|
161
|
+
return out;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Itera todas las combinaciones de la rejilla sobre los átomos,
|
|
165
|
+
* llamando a `visit(env, value)` con cada valuación y el valor
|
|
166
|
+
* de la fórmula. Si `visit` devuelve `false`, aborta.
|
|
167
|
+
*/
|
|
168
|
+
function forEachValuation(formula, system, resolution, visit) {
|
|
169
|
+
const atoms = collectFuzzyAtoms(formula);
|
|
170
|
+
if (atoms.length === 0) {
|
|
171
|
+
visit({}, evaluate(formula, {}, system));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const grid = gridPoints(resolution);
|
|
175
|
+
const env = {};
|
|
176
|
+
const total = Math.pow(grid.length, atoms.length);
|
|
177
|
+
const indices = new Array(atoms.length).fill(0);
|
|
178
|
+
for (let n = 0; n < total; n++) {
|
|
179
|
+
for (let i = 0; i < atoms.length; i++) {
|
|
180
|
+
const key = atoms[i];
|
|
181
|
+
const gi = indices[i];
|
|
182
|
+
env[key] = grid[gi];
|
|
183
|
+
}
|
|
184
|
+
const value = evaluate(formula, env, system);
|
|
185
|
+
const res = visit({ ...env }, value);
|
|
186
|
+
if (res === false)
|
|
187
|
+
return;
|
|
188
|
+
// increment indices (base = grid.length)
|
|
189
|
+
for (let i = atoms.length - 1; i >= 0; i--) {
|
|
190
|
+
const idx = indices[i] + 1;
|
|
191
|
+
if (idx < grid.length) {
|
|
192
|
+
indices[i] = idx;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
indices[i] = 0;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ── Tautología / Contradicción ─────────────────────────────
|
|
200
|
+
const EPSILON = 1e-9;
|
|
201
|
+
/**
|
|
202
|
+
* Devuelve true si la fórmula evalúa a 1 (módulo EPSILON) en
|
|
203
|
+
* todos los puntos de la rejilla [0,1]^n con `resolution` puntos
|
|
204
|
+
* por átomo. Default: 11 puntos (0, 0.1, ..., 1).
|
|
205
|
+
*
|
|
206
|
+
* Aviso: es una aproximación por sampling. Algunas tautologías
|
|
207
|
+
* "casi" (verdaderas excepto en un conjunto de medida cero)
|
|
208
|
+
* pueden seguir clasificándose correctamente, pero contraejemplos
|
|
209
|
+
* sutiles requieren resolución mayor.
|
|
210
|
+
*/
|
|
211
|
+
function isTautology(formula, system, resolution = 11) {
|
|
212
|
+
let ok = true;
|
|
213
|
+
forEachValuation(formula, system, resolution, (_env, value) => {
|
|
214
|
+
if (value < 1 - EPSILON) {
|
|
215
|
+
ok = false;
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
});
|
|
220
|
+
return ok;
|
|
221
|
+
}
|
|
222
|
+
/** Verdadera si la fórmula evalúa a 0 en toda la rejilla. */
|
|
223
|
+
function isContradiction(formula, system, resolution = 11) {
|
|
224
|
+
let ok = true;
|
|
225
|
+
forEachValuation(formula, system, resolution, (_env, value) => {
|
|
226
|
+
if (value > EPSILON) {
|
|
227
|
+
ok = false;
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
return undefined;
|
|
231
|
+
});
|
|
232
|
+
return ok;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Busca una valuación (en la rejilla con `resolution` puntos por
|
|
236
|
+
* átomo) tal que `|evaluate(formula) - target| <= tolerance`.
|
|
237
|
+
* Devuelve null si no encuentra ninguna.
|
|
238
|
+
*/
|
|
239
|
+
function findValuation(formula, system, target, tolerance = 1e-6, resolution = 11) {
|
|
240
|
+
let hit = null;
|
|
241
|
+
forEachValuation(formula, system, resolution, (env, value) => {
|
|
242
|
+
if (Math.abs(value - target) <= tolerance) {
|
|
243
|
+
hit = env;
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
return undefined;
|
|
247
|
+
});
|
|
248
|
+
return hit;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/profiles/many-valued/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ModalFormula } from './types';
|
|
2
|
+
declare function unary(f: ModalFormula): ModalFormula;
|
|
3
|
+
declare function binLeft(f: ModalFormula): ModalFormula;
|
|
4
|
+
declare function binRight(f: ModalFormula): ModalFormula;
|
|
5
|
+
export declare const atom: (name: string) => ModalFormula;
|
|
6
|
+
export declare const not: (arg: ModalFormula) => ModalFormula;
|
|
7
|
+
export declare const and: (left: ModalFormula, right: ModalFormula) => ModalFormula;
|
|
8
|
+
export declare const or: (left: ModalFormula, right: ModalFormula) => ModalFormula;
|
|
9
|
+
export declare const implies: (left: ModalFormula, right: ModalFormula) => ModalFormula;
|
|
10
|
+
export declare const box: (arg: ModalFormula) => ModalFormula;
|
|
11
|
+
export declare const diamond: (arg: ModalFormula) => ModalFormula;
|
|
12
|
+
/**
|
|
13
|
+
* Clave sintáctica determinista para deduplicación.
|
|
14
|
+
*/
|
|
15
|
+
export declare function formulaKey(f: ModalFormula): string;
|
|
16
|
+
export declare function formulaEquals(a: ModalFormula, b: ModalFormula): boolean;
|
|
17
|
+
export declare function formulaToString(f: ModalFormula): string;
|
|
18
|
+
export declare function collectAtoms(f: ModalFormula, out?: Set<string>): Set<string>;
|
|
19
|
+
export declare const subUnary: typeof unary;
|
|
20
|
+
export declare const subLeft: typeof binLeft;
|
|
21
|
+
export declare const subRight: typeof binRight;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=formula.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../src/profiles/modal-frame-axioms/formula.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMvC,iBAAS,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAI5C;AAED,iBAAS,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAI9C;AAED,iBAAS,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAI/C;AAMD,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,YAAwC,CAAC;AAE7E,eAAO,MAAM,GAAG,GAAI,KAAK,YAAY,KAAG,YAAmD,CAAC;AAE5F,eAAO,MAAM,GAAG,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,YAK5D,CAAC;AAEH,eAAO,MAAM,EAAE,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,YAK3D,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,YAKhE,CAAC;AAEH,eAAO,MAAM,GAAG,GAAI,KAAK,YAAY,KAAG,YAAmD,CAAC;AAE5F,eAAO,MAAM,OAAO,GAAI,KAAK,YAAY,KAAG,YAI1C,CAAC;AAMH;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAiBlD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAEvE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAoBvD;AAYD,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAevF;AAID,eAAO,MAAM,QAAQ,cAAQ,CAAC;AAC9B,eAAO,MAAM,OAAO,gBAAU,CAAC;AAC/B,eAAO,MAAM,QAAQ,iBAAW,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Helpers de fórmulas modales
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// La estructura {@link ModalFormula} admite tanto campos
|
|
7
|
+
// específicos (`arg`, `left`, `right`) como un `args` n-ario para
|
|
8
|
+
// flexibilidad. Aquí se normaliza el acceso: las funciones de
|
|
9
|
+
// extracción aceptan ambos formatos y los constructores producen
|
|
10
|
+
// la forma canónica con campos específicos (+ `args` espejo).
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.subRight = exports.subLeft = exports.subUnary = exports.diamond = exports.box = exports.implies = exports.or = exports.and = exports.not = exports.atom = void 0;
|
|
13
|
+
exports.formulaKey = formulaKey;
|
|
14
|
+
exports.formulaEquals = formulaEquals;
|
|
15
|
+
exports.formulaToString = formulaToString;
|
|
16
|
+
exports.collectAtoms = collectAtoms;
|
|
17
|
+
// ------------------------------------------------------------
|
|
18
|
+
// Acceso normalizado a subfórmulas
|
|
19
|
+
// ------------------------------------------------------------
|
|
20
|
+
function unary(f) {
|
|
21
|
+
if (f.arg)
|
|
22
|
+
return f.arg;
|
|
23
|
+
if (f.args && f.args[0])
|
|
24
|
+
return f.args[0];
|
|
25
|
+
throw new Error(`ModalFormula ${f.kind} sin subfórmula`);
|
|
26
|
+
}
|
|
27
|
+
function binLeft(f) {
|
|
28
|
+
if (f.left)
|
|
29
|
+
return f.left;
|
|
30
|
+
if (f.args && f.args[0])
|
|
31
|
+
return f.args[0];
|
|
32
|
+
throw new Error(`ModalFormula ${f.kind} sin lado izquierdo`);
|
|
33
|
+
}
|
|
34
|
+
function binRight(f) {
|
|
35
|
+
if (f.right)
|
|
36
|
+
return f.right;
|
|
37
|
+
if (f.args && f.args[1])
|
|
38
|
+
return f.args[1];
|
|
39
|
+
throw new Error(`ModalFormula ${f.kind} sin lado derecho`);
|
|
40
|
+
}
|
|
41
|
+
// ------------------------------------------------------------
|
|
42
|
+
// Constructores ergonómicos
|
|
43
|
+
// ------------------------------------------------------------
|
|
44
|
+
const atom = (name) => ({ kind: 'atom', name });
|
|
45
|
+
exports.atom = atom;
|
|
46
|
+
const not = (arg) => ({ kind: 'not', arg, args: [arg] });
|
|
47
|
+
exports.not = not;
|
|
48
|
+
const and = (left, right) => ({
|
|
49
|
+
kind: 'and',
|
|
50
|
+
left,
|
|
51
|
+
right,
|
|
52
|
+
args: [left, right],
|
|
53
|
+
});
|
|
54
|
+
exports.and = and;
|
|
55
|
+
const or = (left, right) => ({
|
|
56
|
+
kind: 'or',
|
|
57
|
+
left,
|
|
58
|
+
right,
|
|
59
|
+
args: [left, right],
|
|
60
|
+
});
|
|
61
|
+
exports.or = or;
|
|
62
|
+
const implies = (left, right) => ({
|
|
63
|
+
kind: 'implies',
|
|
64
|
+
left,
|
|
65
|
+
right,
|
|
66
|
+
args: [left, right],
|
|
67
|
+
});
|
|
68
|
+
exports.implies = implies;
|
|
69
|
+
const box = (arg) => ({ kind: 'box', arg, args: [arg] });
|
|
70
|
+
exports.box = box;
|
|
71
|
+
const diamond = (arg) => ({
|
|
72
|
+
kind: 'diamond',
|
|
73
|
+
arg,
|
|
74
|
+
args: [arg],
|
|
75
|
+
});
|
|
76
|
+
exports.diamond = diamond;
|
|
77
|
+
// ------------------------------------------------------------
|
|
78
|
+
// Clave / igualdad / representación
|
|
79
|
+
// ------------------------------------------------------------
|
|
80
|
+
/**
|
|
81
|
+
* Clave sintáctica determinista para deduplicación.
|
|
82
|
+
*/
|
|
83
|
+
function formulaKey(f) {
|
|
84
|
+
switch (f.kind) {
|
|
85
|
+
case 'atom':
|
|
86
|
+
return `A(${f.name ?? '?'})`;
|
|
87
|
+
case 'not':
|
|
88
|
+
return `N(${formulaKey(unary(f))})`;
|
|
89
|
+
case 'box':
|
|
90
|
+
return `B(${formulaKey(unary(f))})`;
|
|
91
|
+
case 'diamond':
|
|
92
|
+
return `D(${formulaKey(unary(f))})`;
|
|
93
|
+
case 'and':
|
|
94
|
+
return `&(${formulaKey(binLeft(f))},${formulaKey(binRight(f))})`;
|
|
95
|
+
case 'or':
|
|
96
|
+
return `|(${formulaKey(binLeft(f))},${formulaKey(binRight(f))})`;
|
|
97
|
+
case 'implies':
|
|
98
|
+
return `>(${formulaKey(binLeft(f))},${formulaKey(binRight(f))})`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function formulaEquals(a, b) {
|
|
102
|
+
return formulaKey(a) === formulaKey(b);
|
|
103
|
+
}
|
|
104
|
+
function formulaToString(f) {
|
|
105
|
+
switch (f.kind) {
|
|
106
|
+
case 'atom':
|
|
107
|
+
return f.name ?? '?';
|
|
108
|
+
case 'not': {
|
|
109
|
+
const inner = unary(f);
|
|
110
|
+
if (inner.kind === 'atom')
|
|
111
|
+
return `¬${formulaToString(inner)}`;
|
|
112
|
+
return `¬(${formulaToString(inner)})`;
|
|
113
|
+
}
|
|
114
|
+
case 'box':
|
|
115
|
+
return `□${parens(unary(f))}`;
|
|
116
|
+
case 'diamond':
|
|
117
|
+
return `◇${parens(unary(f))}`;
|
|
118
|
+
case 'and':
|
|
119
|
+
return `(${formulaToString(binLeft(f))} ∧ ${formulaToString(binRight(f))})`;
|
|
120
|
+
case 'or':
|
|
121
|
+
return `(${formulaToString(binLeft(f))} ∨ ${formulaToString(binRight(f))})`;
|
|
122
|
+
case 'implies':
|
|
123
|
+
return `(${formulaToString(binLeft(f))} → ${formulaToString(binRight(f))})`;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function parens(f) {
|
|
127
|
+
if (f.kind === 'atom')
|
|
128
|
+
return formulaToString(f);
|
|
129
|
+
if (f.kind === 'box' || f.kind === 'diamond')
|
|
130
|
+
return formulaToString(f);
|
|
131
|
+
return `(${formulaToString(f)})`;
|
|
132
|
+
}
|
|
133
|
+
// ------------------------------------------------------------
|
|
134
|
+
// Átomos
|
|
135
|
+
// ------------------------------------------------------------
|
|
136
|
+
function collectAtoms(f, out = new Set()) {
|
|
137
|
+
switch (f.kind) {
|
|
138
|
+
case 'atom':
|
|
139
|
+
if (f.name)
|
|
140
|
+
out.add(f.name);
|
|
141
|
+
return out;
|
|
142
|
+
case 'not':
|
|
143
|
+
case 'box':
|
|
144
|
+
case 'diamond':
|
|
145
|
+
return collectAtoms(unary(f), out);
|
|
146
|
+
case 'and':
|
|
147
|
+
case 'or':
|
|
148
|
+
case 'implies':
|
|
149
|
+
collectAtoms(binLeft(f), out);
|
|
150
|
+
return collectAtoms(binRight(f), out);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Acceso público a las extracciones normalizadas (útil para
|
|
154
|
+
// el motor de tableau y tests).
|
|
155
|
+
exports.subUnary = unary;
|
|
156
|
+
exports.subLeft = binLeft;
|
|
157
|
+
exports.subRight = binRight;
|
|
158
|
+
//# sourceMappingURL=formula.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula.js","sourceRoot":"","sources":["../../../src/profiles/modal-frame-axioms/formula.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { FrameAxiom, ModalSystem, ModalFormula, KripkeModel, TableauResult } from './types';
|
|
2
|
+
export { atom, not, and, or, implies, box, diamond, formulaKey, formulaEquals, formulaToString, collectAtoms, } from './formula';
|
|
3
|
+
export { tableauWithAxioms } from './tableau';
|
|
4
|
+
export type { TableauOptions } from './tableau';
|
|
5
|
+
export { systemAxioms, isSatisfiable, isValid, axiomFormula } from './systems';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiles/modal-frame-axioms/index.ts"],"names":[],"mappings":"AAmBA,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjG,OAAO,EACL,IAAI,EACJ,GAAG,EACH,GAAG,EACH,EAAE,EACF,OAAO,EACP,GAAG,EACH,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Modal Frame Axioms — Entrada pública
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Tableau modal extendido con axiomas de frame (T, B, 4, 5, D)
|
|
7
|
+
// y composición de sistemas estándar (K, T, D, B, S4, S5, KD45...).
|
|
8
|
+
//
|
|
9
|
+
// Uso típico:
|
|
10
|
+
//
|
|
11
|
+
// import {
|
|
12
|
+
// atom, box, diamond, implies,
|
|
13
|
+
// isValid, isSatisfiable, tableauWithAxioms,
|
|
14
|
+
// } from '@stevenvo780/st-lang/profiles/modal-frame-axioms';
|
|
15
|
+
//
|
|
16
|
+
// const p = atom('p');
|
|
17
|
+
// isValid(implies(box(p), p), 'T'); // true
|
|
18
|
+
// isValid(implies(box(p), p), 'K'); // false
|
|
19
|
+
// isValid(implies(box(p), box(box(p))), 'S4'); // true
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.axiomFormula = exports.isValid = exports.isSatisfiable = exports.systemAxioms = exports.tableauWithAxioms = exports.collectAtoms = exports.formulaToString = exports.formulaEquals = exports.formulaKey = exports.diamond = exports.box = exports.implies = exports.or = exports.and = exports.not = exports.atom = void 0;
|
|
22
|
+
var formula_1 = require("./formula");
|
|
23
|
+
Object.defineProperty(exports, "atom", { enumerable: true, get: function () { return formula_1.atom; } });
|
|
24
|
+
Object.defineProperty(exports, "not", { enumerable: true, get: function () { return formula_1.not; } });
|
|
25
|
+
Object.defineProperty(exports, "and", { enumerable: true, get: function () { return formula_1.and; } });
|
|
26
|
+
Object.defineProperty(exports, "or", { enumerable: true, get: function () { return formula_1.or; } });
|
|
27
|
+
Object.defineProperty(exports, "implies", { enumerable: true, get: function () { return formula_1.implies; } });
|
|
28
|
+
Object.defineProperty(exports, "box", { enumerable: true, get: function () { return formula_1.box; } });
|
|
29
|
+
Object.defineProperty(exports, "diamond", { enumerable: true, get: function () { return formula_1.diamond; } });
|
|
30
|
+
Object.defineProperty(exports, "formulaKey", { enumerable: true, get: function () { return formula_1.formulaKey; } });
|
|
31
|
+
Object.defineProperty(exports, "formulaEquals", { enumerable: true, get: function () { return formula_1.formulaEquals; } });
|
|
32
|
+
Object.defineProperty(exports, "formulaToString", { enumerable: true, get: function () { return formula_1.formulaToString; } });
|
|
33
|
+
Object.defineProperty(exports, "collectAtoms", { enumerable: true, get: function () { return formula_1.collectAtoms; } });
|
|
34
|
+
var tableau_1 = require("./tableau");
|
|
35
|
+
Object.defineProperty(exports, "tableauWithAxioms", { enumerable: true, get: function () { return tableau_1.tableauWithAxioms; } });
|
|
36
|
+
var systems_1 = require("./systems");
|
|
37
|
+
Object.defineProperty(exports, "systemAxioms", { enumerable: true, get: function () { return systems_1.systemAxioms; } });
|
|
38
|
+
Object.defineProperty(exports, "isSatisfiable", { enumerable: true, get: function () { return systems_1.isSatisfiable; } });
|
|
39
|
+
Object.defineProperty(exports, "isValid", { enumerable: true, get: function () { return systems_1.isValid; } });
|
|
40
|
+
Object.defineProperty(exports, "axiomFormula", { enumerable: true, get: function () { return systems_1.axiomFormula; } });
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/profiles/modal-frame-axioms/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,uCAAuC;AACvC,+DAA+D;AAC/D,EAAE;AACF,+DAA+D;AAC/D,oEAAoE;AACpE,EAAE;AACF,cAAc;AACd,EAAE;AACF,aAAa;AACb,mCAAmC;AACnC,iDAAiD;AACjD,+DAA+D;AAC/D,EAAE;AACF,yBAAyB;AACzB,mDAAmD;AACnD,oDAAoD;AACpD,yDAAyD;;;AAIzD,qCAYmB;AAXjB,+FAAA,IAAI,OAAA;AACJ,8FAAA,GAAG,OAAA;AACH,8FAAA,GAAG,OAAA;AACH,6FAAA,EAAE,OAAA;AACF,kGAAA,OAAO,OAAA;AACP,8FAAA,GAAG,OAAA;AACH,kGAAA,OAAO,OAAA;AACP,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,0GAAA,eAAe,OAAA;AACf,uGAAA,YAAY,OAAA;AAGd,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA;AAG1B,qCAA+E;AAAtE,uGAAA,YAAY,OAAA;AAAE,wGAAA,aAAa,OAAA;AAAE,kGAAA,OAAO,OAAA;AAAE,uGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FrameAxiom, ModalFormula, ModalSystem } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Devuelve los axiomas que caracterizan al sistema nombrado.
|
|
4
|
+
*
|
|
5
|
+
* Para sistemas no listados (e.g. "K45", "KTB5") usar directamente
|
|
6
|
+
* {@link tableauWithAxioms} con la combinación deseada.
|
|
7
|
+
*/
|
|
8
|
+
export declare function systemAxioms(system: ModalSystem): FrameAxiom[];
|
|
9
|
+
/**
|
|
10
|
+
* ¿`phi` es satisfacible en el sistema `system`?
|
|
11
|
+
*
|
|
12
|
+
* Equivale a: ¿existe un modelo Kripke cuyo frame cumple los
|
|
13
|
+
* axiomas y cuya raíz fuerza `phi`?
|
|
14
|
+
*/
|
|
15
|
+
export declare function isSatisfiable(phi: ModalFormula, system: ModalSystem): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* ¿`phi` es válida en el sistema `system`?
|
|
18
|
+
*
|
|
19
|
+
* Equivale a: ¬(¬phi satisfacible) — si el tableau de ¬φ cierra
|
|
20
|
+
* en todas las ramas, φ es teorema del sistema.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isValid(phi: ModalFormula, system: ModalSystem): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Esquema del axioma como fórmula concreta sobre un átomo dado.
|
|
25
|
+
* Útil para verificar que cada axioma es válido en su sistema
|
|
26
|
+
* mínimo.
|
|
27
|
+
*/
|
|
28
|
+
export declare function axiomFormula(axiom: FrameAxiom, p: ModalFormula): ModalFormula;
|
|
29
|
+
//# sourceMappingURL=systems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systems.d.ts","sourceRoot":"","sources":["../../../src/profiles/modal-frame-axioms/systems.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,CAuB9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAEvE;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,GAAG,YAAY,CAa7E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Sistemas modales nombrados — composición de axiomas
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Mapa de etiquetas estándar a sus axiomas. Los sistemas se
|
|
7
|
+
// caracterizan por la relación de accesibilidad del frame:
|
|
8
|
+
//
|
|
9
|
+
// K ∅ — sin restricción
|
|
10
|
+
// T reflexiva — {T}
|
|
11
|
+
// D serial — {D}
|
|
12
|
+
// KB simétrica — {B}
|
|
13
|
+
// K4 transitiva — {4}
|
|
14
|
+
// K5 euclidiana — {5}
|
|
15
|
+
// B refl + sim — {T, B} (a veces "KTB")
|
|
16
|
+
// S4 refl + trans — {T, 4}
|
|
17
|
+
// S5 equivalencia — {T, 4, 5} (≡ {T, B, 4})
|
|
18
|
+
// KD45 ser + trans + eucl — {D, 4, 5} (lógica doxástica)
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.systemAxioms = systemAxioms;
|
|
21
|
+
exports.isSatisfiable = isSatisfiable;
|
|
22
|
+
exports.isValid = isValid;
|
|
23
|
+
exports.axiomFormula = axiomFormula;
|
|
24
|
+
const formula_1 = require("./formula");
|
|
25
|
+
const tableau_1 = require("./tableau");
|
|
26
|
+
/**
|
|
27
|
+
* Devuelve los axiomas que caracterizan al sistema nombrado.
|
|
28
|
+
*
|
|
29
|
+
* Para sistemas no listados (e.g. "K45", "KTB5") usar directamente
|
|
30
|
+
* {@link tableauWithAxioms} con la combinación deseada.
|
|
31
|
+
*/
|
|
32
|
+
function systemAxioms(system) {
|
|
33
|
+
switch (system) {
|
|
34
|
+
case 'K':
|
|
35
|
+
return [];
|
|
36
|
+
case 'T':
|
|
37
|
+
return ['T'];
|
|
38
|
+
case 'D':
|
|
39
|
+
return ['D'];
|
|
40
|
+
case 'KB':
|
|
41
|
+
return ['B'];
|
|
42
|
+
case 'K4':
|
|
43
|
+
return ['4'];
|
|
44
|
+
case 'K5':
|
|
45
|
+
return ['5'];
|
|
46
|
+
case 'B':
|
|
47
|
+
return ['T', 'B'];
|
|
48
|
+
case 'S4':
|
|
49
|
+
return ['T', '4'];
|
|
50
|
+
case 'S5':
|
|
51
|
+
return ['T', '4', '5'];
|
|
52
|
+
case 'KD45':
|
|
53
|
+
return ['D', '4', '5'];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* ¿`phi` es satisfacible en el sistema `system`?
|
|
58
|
+
*
|
|
59
|
+
* Equivale a: ¿existe un modelo Kripke cuyo frame cumple los
|
|
60
|
+
* axiomas y cuya raíz fuerza `phi`?
|
|
61
|
+
*/
|
|
62
|
+
function isSatisfiable(phi, system) {
|
|
63
|
+
return (0, tableau_1.tableauWithAxioms)(phi, systemAxioms(system)).sat;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* ¿`phi` es válida en el sistema `system`?
|
|
67
|
+
*
|
|
68
|
+
* Equivale a: ¬(¬phi satisfacible) — si el tableau de ¬φ cierra
|
|
69
|
+
* en todas las ramas, φ es teorema del sistema.
|
|
70
|
+
*/
|
|
71
|
+
function isValid(phi, system) {
|
|
72
|
+
return !isSatisfiable((0, formula_1.not)(phi), system);
|
|
73
|
+
}
|
|
74
|
+
// ------------------------------------------------------------
|
|
75
|
+
// Helpers: axiomas como fórmulas (útil para tests)
|
|
76
|
+
// ------------------------------------------------------------
|
|
77
|
+
/**
|
|
78
|
+
* Esquema del axioma como fórmula concreta sobre un átomo dado.
|
|
79
|
+
* Útil para verificar que cada axioma es válido en su sistema
|
|
80
|
+
* mínimo.
|
|
81
|
+
*/
|
|
82
|
+
function axiomFormula(axiom, p) {
|
|
83
|
+
switch (axiom) {
|
|
84
|
+
case 'T':
|
|
85
|
+
return (0, formula_1.implies)((0, formula_1.box)(p), p);
|
|
86
|
+
case 'B':
|
|
87
|
+
return (0, formula_1.implies)(p, (0, formula_1.box)((0, formula_1.diamond)(p)));
|
|
88
|
+
case '4':
|
|
89
|
+
return (0, formula_1.implies)((0, formula_1.box)(p), (0, formula_1.box)((0, formula_1.box)(p)));
|
|
90
|
+
case '5':
|
|
91
|
+
return (0, formula_1.implies)((0, formula_1.diamond)(p), (0, formula_1.box)((0, formula_1.diamond)(p)));
|
|
92
|
+
case 'D':
|
|
93
|
+
return (0, formula_1.implies)((0, formula_1.box)(p), (0, formula_1.diamond)(p));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=systems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systems.js","sourceRoot":"","sources":["../../../src/profiles/modal-frame-axioms/systems.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAC/D,EAAE;AACF,4DAA4D;AAC5D,2DAA2D;AAC3D,EAAE;AACF,+CAA+C;AAC/C,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC,yDAAyD;AACzD,sCAAsC;AACtC,uDAAuD;AACvD,4DAA4D;;AAY5D,oCAuBC;AAQD,sCAEC;AAQD,0BAEC;AAWD,oCAaC;AA7ED,uCAAuD;AACvD,uCAA8C;AAG9C;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,MAAmB;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,EAAE,CAAC;QACZ,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,GAAiB,EAAE,MAAmB;IAClE,OAAO,IAAA,2BAAiB,EAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAAiB,EAAE,MAAmB;IAC5D,OAAO,CAAC,aAAa,CAAC,IAAA,aAAG,EAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,+DAA+D;AAC/D,mDAAmD;AACnD,+DAA+D;AAE/D;;;;GAIG;AACH,SAAgB,YAAY,CAAC,KAAiB,EAAE,CAAe;IAC7D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,GAAG;YACN,OAAO,IAAA,iBAAO,EAAC,IAAA,aAAG,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,GAAG;YACN,OAAO,IAAA,iBAAO,EAAC,CAAC,EAAE,IAAA,aAAG,EAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,GAAG;YACN,OAAO,IAAA,iBAAO,EAAC,IAAA,aAAG,EAAC,CAAC,CAAC,EAAE,IAAA,aAAG,EAAC,IAAA,aAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,GAAG;YACN,OAAO,IAAA,iBAAO,EAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,IAAA,aAAG,EAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,GAAG;YACN,OAAO,IAAA,iBAAO,EAAC,IAAA,aAAG,EAAC,CAAC,CAAC,EAAE,IAAA,iBAAO,EAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
|