@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,13 @@
|
|
|
1
|
+
import { IntuitFormula, NJProof } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* API pública.
|
|
4
|
+
*
|
|
5
|
+
* Devuelve un árbol NJ que demuestra `goal` a partir de las
|
|
6
|
+
* `premises` dadas, o `null` si no encontró prueba dentro del
|
|
7
|
+
* budget configurado.
|
|
8
|
+
*/
|
|
9
|
+
export declare function proveIntuitionistically(premises: IntuitFormula[], goal: IntuitFormula, options?: {
|
|
10
|
+
budget?: number;
|
|
11
|
+
}): NJProof | null;
|
|
12
|
+
export declare function verifyProof(proof: NJProof, initialContext?: IntuitFormula[]): boolean;
|
|
13
|
+
//# sourceMappingURL=prover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prover.d.ts","sourceRoot":"","sources":["../../../src/profiles/intuitionistic-nj/prover.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAyRjD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,GAAG,IAAI,CAGhB;AAQD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,GAAE,aAAa,EAAO,GAAG,OAAO,CAEzF"}
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Intuitionistic Natural Deduction — Backward proof search
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Estrategia: búsqueda hacia atrás en un cálculo de secuentes
|
|
7
|
+
// intuicionista (G3i-style, single-succedent) que se traduce a
|
|
8
|
+
// NJ "on the fly". El árbol NJ producido se valida luego con
|
|
9
|
+
// `verifyProof` (ver al final).
|
|
10
|
+
//
|
|
11
|
+
// Notas:
|
|
12
|
+
// - Sólo hay UN consecuente (eso es lo que vuelve NJ
|
|
13
|
+
// intuicionista; la lógica clásica usa multi-succedent).
|
|
14
|
+
// - La regla `impL` (modus ponens hacia atrás) y `orL`
|
|
15
|
+
// (eliminación de disyunción) no son invertibles, lo que
|
|
16
|
+
// obliga a buscar con memoización para evitar bucles.
|
|
17
|
+
// - Para `notI` aplicamos el patrón: si la meta es `¬φ`,
|
|
18
|
+
// entonces es lo mismo que probar `φ ⊢ ⊥`.
|
|
19
|
+
//
|
|
20
|
+
// Completitud: G3i es completo para IPC (Dyckhoff, "Contraction-
|
|
21
|
+
// free sequent calculi for intuitionistic logic", 1992). Esta
|
|
22
|
+
// implementación es una variante pragmática con loop-checking;
|
|
23
|
+
// es completa para el fragmento proposicional dentro del budget.
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.proveIntuitionistically = proveIntuitionistically;
|
|
26
|
+
exports.verifyProof = verifyProof;
|
|
27
|
+
const formula_1 = require("./formula");
|
|
28
|
+
function freshCtx(budget) {
|
|
29
|
+
return { budget, used: 0, failed: new Set(), active: new Set() };
|
|
30
|
+
}
|
|
31
|
+
function exhausted(ctx) {
|
|
32
|
+
return ctx.used >= ctx.budget;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clave de un sub-problema (contexto + meta), normalizada y
|
|
36
|
+
* ordenada para que `{A, B} ⊢ C` y `{B, A} ⊢ C` coincidan.
|
|
37
|
+
*/
|
|
38
|
+
function goalKey(context, goal) {
|
|
39
|
+
const sorted = context.map(formula_1.formulaKey).sort();
|
|
40
|
+
return `[${sorted.join('|')}]⊢${(0, formula_1.formulaKey)(goal)}`;
|
|
41
|
+
}
|
|
42
|
+
function contextHas(context, f) {
|
|
43
|
+
for (const g of context)
|
|
44
|
+
if ((0, formula_1.formulaEquals)(g, f))
|
|
45
|
+
return true;
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
function withContext(context, f) {
|
|
49
|
+
if (contextHas(context, f))
|
|
50
|
+
return context;
|
|
51
|
+
return [...context, f];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Núcleo recursivo de la búsqueda. Devuelve un árbol NJ válido
|
|
55
|
+
* para `context ⊢ goal` o `null` si no se encontró prueba dentro
|
|
56
|
+
* del budget.
|
|
57
|
+
*/
|
|
58
|
+
function search(context, goal, ctx) {
|
|
59
|
+
ctx.used++;
|
|
60
|
+
if (exhausted(ctx))
|
|
61
|
+
return null;
|
|
62
|
+
const key = goalKey(context, goal);
|
|
63
|
+
if (ctx.failed.has(key))
|
|
64
|
+
return null;
|
|
65
|
+
if (ctx.active.has(key))
|
|
66
|
+
return null; // ciclo: no hay progreso por este camino
|
|
67
|
+
ctx.active.add(key);
|
|
68
|
+
const tryProve = () => {
|
|
69
|
+
// 1. Axioma / asunción: la meta está en el contexto.
|
|
70
|
+
for (const h of context) {
|
|
71
|
+
if ((0, formula_1.formulaEquals)(h, goal)) {
|
|
72
|
+
return { conclusion: goal, rule: 'assumption', premises: [] };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// 2. Reglas de introducción dirigidas por la forma de la meta
|
|
76
|
+
// (invertibles → se aplican sin retroceder).
|
|
77
|
+
// ∧I
|
|
78
|
+
if (goal.kind === 'and') {
|
|
79
|
+
const left = search(context, goal.left, ctx);
|
|
80
|
+
if (!left)
|
|
81
|
+
return null;
|
|
82
|
+
const right = search(context, goal.right, ctx);
|
|
83
|
+
if (!right)
|
|
84
|
+
return null;
|
|
85
|
+
return { conclusion: goal, rule: 'andI', premises: [left, right] };
|
|
86
|
+
}
|
|
87
|
+
// →I (descarga el antecedente)
|
|
88
|
+
if (goal.kind === 'implies') {
|
|
89
|
+
const newCtx = withContext(context, goal.left);
|
|
90
|
+
const body = search(newCtx, goal.right, ctx);
|
|
91
|
+
if (!body)
|
|
92
|
+
return null;
|
|
93
|
+
return {
|
|
94
|
+
conclusion: goal,
|
|
95
|
+
rule: 'impI',
|
|
96
|
+
premises: [body],
|
|
97
|
+
discharged: [goal.left],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// ¬I (descarga la fórmula, deriva ⊥)
|
|
101
|
+
if (goal.kind === 'not') {
|
|
102
|
+
const newCtx = withContext(context, goal.arg);
|
|
103
|
+
const body = search(newCtx, (0, formula_1.bottom)(), ctx);
|
|
104
|
+
if (!body)
|
|
105
|
+
return null;
|
|
106
|
+
return {
|
|
107
|
+
conclusion: goal,
|
|
108
|
+
rule: 'notI',
|
|
109
|
+
premises: [body],
|
|
110
|
+
discharged: [goal.arg],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// 3. Reglas de eliminación a izquierda (sobre el contexto):
|
|
114
|
+
// son invertibles para ∧, no para ∨/→.
|
|
115
|
+
// Aplicamos primero las invertibles para reducir el contexto.
|
|
116
|
+
// ∧EL/∧ER: descomponer cualquier conjunción del contexto.
|
|
117
|
+
for (let i = 0; i < context.length; i++) {
|
|
118
|
+
const h = context[i];
|
|
119
|
+
if (h && h.kind === 'and') {
|
|
120
|
+
const rest = [...context.slice(0, i), ...context.slice(i + 1)];
|
|
121
|
+
const extended = withContext(withContext(rest, h.left), h.right);
|
|
122
|
+
const sub = search(extended, goal, ctx);
|
|
123
|
+
if (!sub)
|
|
124
|
+
return null;
|
|
125
|
+
// El subárbol asumió h.left y h.right como hipótesis libres.
|
|
126
|
+
// Las "convertimos" en derivaciones explícitas desde h vía
|
|
127
|
+
// ∧EL/∧ER usando substituteAssumption.
|
|
128
|
+
const elimL = {
|
|
129
|
+
conclusion: h.left,
|
|
130
|
+
rule: 'andEL',
|
|
131
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }],
|
|
132
|
+
};
|
|
133
|
+
const elimR = {
|
|
134
|
+
conclusion: h.right,
|
|
135
|
+
rule: 'andER',
|
|
136
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }],
|
|
137
|
+
};
|
|
138
|
+
const withL = substituteAssumption(sub, h.left, elimL);
|
|
139
|
+
const withBoth = substituteAssumption(withL, h.right, elimR);
|
|
140
|
+
return withBoth;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// ⊥E: si ⊥ está en el contexto, podemos derivar cualquier meta.
|
|
144
|
+
for (const h of context) {
|
|
145
|
+
if (h.kind === 'bottom') {
|
|
146
|
+
return {
|
|
147
|
+
conclusion: goal,
|
|
148
|
+
rule: 'bottomE',
|
|
149
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ∨E (no invertible pero útil): si una disyunción A∨B está
|
|
154
|
+
// en el contexto y podemos probar la meta tanto bajo A como
|
|
155
|
+
// bajo B, aplicamos ∨E descargándolas en cada rama.
|
|
156
|
+
for (let i = 0; i < context.length; i++) {
|
|
157
|
+
const h = context[i];
|
|
158
|
+
if (h && h.kind === 'or') {
|
|
159
|
+
const rest = [...context.slice(0, i), ...context.slice(i + 1)];
|
|
160
|
+
const leftCtx = withContext(rest, h.left);
|
|
161
|
+
const rightCtx = withContext(rest, h.right);
|
|
162
|
+
const leftSub = search(leftCtx, goal, ctx);
|
|
163
|
+
if (!leftSub)
|
|
164
|
+
continue;
|
|
165
|
+
const rightSub = search(rightCtx, goal, ctx);
|
|
166
|
+
if (!rightSub)
|
|
167
|
+
continue;
|
|
168
|
+
return {
|
|
169
|
+
conclusion: goal,
|
|
170
|
+
rule: 'orE',
|
|
171
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }, leftSub, rightSub],
|
|
172
|
+
discharged: [h.left, h.right],
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// 4. Reglas no-invertibles sobre la meta (∨I) y sobre el
|
|
177
|
+
// contexto (→E).
|
|
178
|
+
// ∨IL / ∨IR: si la meta es disyunción, intentar cada disyunto.
|
|
179
|
+
if (goal.kind === 'or') {
|
|
180
|
+
const leftAttempt = search(context, goal.left, ctx);
|
|
181
|
+
if (leftAttempt) {
|
|
182
|
+
return { conclusion: goal, rule: 'orIL', premises: [leftAttempt] };
|
|
183
|
+
}
|
|
184
|
+
const rightAttempt = search(context, goal.right, ctx);
|
|
185
|
+
if (rightAttempt) {
|
|
186
|
+
return { conclusion: goal, rule: 'orIR', premises: [rightAttempt] };
|
|
187
|
+
}
|
|
188
|
+
// No volvemos: si ninguna funcionó, ∨I no es la respuesta.
|
|
189
|
+
}
|
|
190
|
+
// →E (modus ponens hacia atrás): para cada implicación A→B
|
|
191
|
+
// en el contexto, intenta probar A; si lo logra, B queda como
|
|
192
|
+
// nueva hipótesis y reintentamos la meta.
|
|
193
|
+
for (let i = 0; i < context.length; i++) {
|
|
194
|
+
const h = context[i];
|
|
195
|
+
if (h && h.kind === 'implies') {
|
|
196
|
+
// Caso especial: A→B donde B = goal — entonces sólo hace
|
|
197
|
+
// falta probar A.
|
|
198
|
+
const aProof = search(context, h.left, ctx);
|
|
199
|
+
if (!aProof)
|
|
200
|
+
continue;
|
|
201
|
+
if ((0, formula_1.formulaEquals)(h.right, goal)) {
|
|
202
|
+
return {
|
|
203
|
+
conclusion: goal,
|
|
204
|
+
rule: 'impE',
|
|
205
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }, aProof],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// Caso general: B se añade al contexto y la meta sigue siendo `goal`.
|
|
209
|
+
const rest = [...context.slice(0, i), ...context.slice(i + 1)];
|
|
210
|
+
const extended = withContext(rest, h.right);
|
|
211
|
+
const sub = search(extended, goal, ctx);
|
|
212
|
+
if (!sub)
|
|
213
|
+
continue;
|
|
214
|
+
const elimB = {
|
|
215
|
+
conclusion: h.right,
|
|
216
|
+
rule: 'impE',
|
|
217
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }, aProof],
|
|
218
|
+
};
|
|
219
|
+
return substituteAssumption(sub, h.right, elimB);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// ¬E (modus ponens negativa): si tenemos ¬A en contexto y la
|
|
223
|
+
// meta es ⊥, intentar probar A; el resultado deriva ⊥.
|
|
224
|
+
if (goal.kind === 'bottom') {
|
|
225
|
+
for (const h of context) {
|
|
226
|
+
if (h.kind === 'not') {
|
|
227
|
+
const aProof = search(context, h.arg, ctx);
|
|
228
|
+
if (aProof) {
|
|
229
|
+
return {
|
|
230
|
+
conclusion: (0, formula_1.bottom)(),
|
|
231
|
+
rule: 'notE',
|
|
232
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }, aProof],
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Implicación a ⊥: igual que ¬ pero como φ → ⊥.
|
|
237
|
+
if (h.kind === 'implies' && h.right.kind === 'bottom') {
|
|
238
|
+
const aProof = search(context, h.left, ctx);
|
|
239
|
+
if (aProof) {
|
|
240
|
+
return {
|
|
241
|
+
conclusion: (0, formula_1.bottom)(),
|
|
242
|
+
rule: 'impE',
|
|
243
|
+
premises: [{ conclusion: h, rule: 'assumption', premises: [] }, aProof],
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// 5. Último recurso: si la meta NO es ⊥, intentar probar
|
|
250
|
+
// ⊥ desde el contexto (vía ¬E o impE-to-⊥) y aplicar
|
|
251
|
+
// ⊥E para concluir cualquier cosa.
|
|
252
|
+
if (goal.kind !== 'bottom') {
|
|
253
|
+
const bottomProof = search(context, (0, formula_1.bottom)(), ctx);
|
|
254
|
+
if (bottomProof) {
|
|
255
|
+
return { conclusion: goal, rule: 'bottomE', premises: [bottomProof] };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return null;
|
|
259
|
+
};
|
|
260
|
+
const result = tryProve();
|
|
261
|
+
ctx.active.delete(key);
|
|
262
|
+
if (!result)
|
|
263
|
+
ctx.failed.add(key);
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Reescribe un subárbol que asume `assumption` como hipótesis libre,
|
|
268
|
+
* sustituyendo cada `assumption`-node por la derivación `derivation`.
|
|
269
|
+
* Esto permite que una eliminación de regla en el contexto (∧EL,
|
|
270
|
+
* impE, etc.) "rellene" lo que el subgoal trató como hipótesis.
|
|
271
|
+
*/
|
|
272
|
+
function substituteAssumption(proof, assumption, derivation) {
|
|
273
|
+
if (proof.rule === 'assumption' && (0, formula_1.formulaEquals)(proof.conclusion, assumption)) {
|
|
274
|
+
return derivation;
|
|
275
|
+
}
|
|
276
|
+
// Si la regla aplicada descargó la asunción en cuestión, no la
|
|
277
|
+
// sustituimos dentro de las premisas (alcance local).
|
|
278
|
+
const dischargedHere = proof.discharged?.some((d) => (0, formula_1.formulaEquals)(d, assumption));
|
|
279
|
+
if (dischargedHere)
|
|
280
|
+
return proof;
|
|
281
|
+
const newPremises = proof.premises.map((p) => substituteAssumption(p, assumption, derivation));
|
|
282
|
+
return { ...proof, premises: newPremises };
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* API pública.
|
|
286
|
+
*
|
|
287
|
+
* Devuelve un árbol NJ que demuestra `goal` a partir de las
|
|
288
|
+
* `premises` dadas, o `null` si no encontró prueba dentro del
|
|
289
|
+
* budget configurado.
|
|
290
|
+
*/
|
|
291
|
+
function proveIntuitionistically(premises, goal, options = {}) {
|
|
292
|
+
const ctx = freshCtx(options.budget ?? 10_000);
|
|
293
|
+
return search(premises.slice(), goal, ctx);
|
|
294
|
+
}
|
|
295
|
+
// ── Verificación de proofs ──────────────────────────────────
|
|
296
|
+
//
|
|
297
|
+
// `verifyProof` recorre el árbol y comprueba localmente cada
|
|
298
|
+
// regla. Útil para tests y para garantizar que el prover no
|
|
299
|
+
// produce derivaciones inconsistentes.
|
|
300
|
+
function verifyProof(proof, initialContext = []) {
|
|
301
|
+
return verifyAt(proof, initialContext);
|
|
302
|
+
}
|
|
303
|
+
function verifyAt(proof, ctx) {
|
|
304
|
+
const c = proof.conclusion;
|
|
305
|
+
switch (proof.rule) {
|
|
306
|
+
case 'assumption':
|
|
307
|
+
return ctx.some((h) => (0, formula_1.formulaEquals)(h, c));
|
|
308
|
+
case 'andI': {
|
|
309
|
+
if (c.kind !== 'and' || proof.premises.length !== 2)
|
|
310
|
+
return false;
|
|
311
|
+
const [pa, pb] = proof.premises;
|
|
312
|
+
if (!pa || !pb)
|
|
313
|
+
return false;
|
|
314
|
+
return ((0, formula_1.formulaEquals)(pa.conclusion, c.left) &&
|
|
315
|
+
(0, formula_1.formulaEquals)(pb.conclusion, c.right) &&
|
|
316
|
+
verifyAt(pa, ctx) &&
|
|
317
|
+
verifyAt(pb, ctx));
|
|
318
|
+
}
|
|
319
|
+
case 'andEL': {
|
|
320
|
+
if (proof.premises.length !== 1)
|
|
321
|
+
return false;
|
|
322
|
+
const p = proof.premises[0];
|
|
323
|
+
if (!p || p.conclusion.kind !== 'and')
|
|
324
|
+
return false;
|
|
325
|
+
return (0, formula_1.formulaEquals)(p.conclusion.left, c) && verifyAt(p, ctx);
|
|
326
|
+
}
|
|
327
|
+
case 'andER': {
|
|
328
|
+
if (proof.premises.length !== 1)
|
|
329
|
+
return false;
|
|
330
|
+
const p = proof.premises[0];
|
|
331
|
+
if (!p || p.conclusion.kind !== 'and')
|
|
332
|
+
return false;
|
|
333
|
+
return (0, formula_1.formulaEquals)(p.conclusion.right, c) && verifyAt(p, ctx);
|
|
334
|
+
}
|
|
335
|
+
case 'orIL': {
|
|
336
|
+
if (c.kind !== 'or' || proof.premises.length !== 1)
|
|
337
|
+
return false;
|
|
338
|
+
const p = proof.premises[0];
|
|
339
|
+
if (!p)
|
|
340
|
+
return false;
|
|
341
|
+
return (0, formula_1.formulaEquals)(p.conclusion, c.left) && verifyAt(p, ctx);
|
|
342
|
+
}
|
|
343
|
+
case 'orIR': {
|
|
344
|
+
if (c.kind !== 'or' || proof.premises.length !== 1)
|
|
345
|
+
return false;
|
|
346
|
+
const p = proof.premises[0];
|
|
347
|
+
if (!p)
|
|
348
|
+
return false;
|
|
349
|
+
return (0, formula_1.formulaEquals)(p.conclusion, c.right) && verifyAt(p, ctx);
|
|
350
|
+
}
|
|
351
|
+
case 'orE': {
|
|
352
|
+
if (proof.premises.length !== 3)
|
|
353
|
+
return false;
|
|
354
|
+
const [maj, l, r] = proof.premises;
|
|
355
|
+
if (!maj || !l || !r)
|
|
356
|
+
return false;
|
|
357
|
+
if (maj.conclusion.kind !== 'or')
|
|
358
|
+
return false;
|
|
359
|
+
const A = maj.conclusion.left;
|
|
360
|
+
const B = maj.conclusion.right;
|
|
361
|
+
if (!(0, formula_1.formulaEquals)(l.conclusion, c))
|
|
362
|
+
return false;
|
|
363
|
+
if (!(0, formula_1.formulaEquals)(r.conclusion, c))
|
|
364
|
+
return false;
|
|
365
|
+
return (verifyAt(maj, ctx) && verifyAt(l, withContext(ctx, A)) && verifyAt(r, withContext(ctx, B)));
|
|
366
|
+
}
|
|
367
|
+
case 'impI': {
|
|
368
|
+
if (c.kind !== 'implies' || proof.premises.length !== 1)
|
|
369
|
+
return false;
|
|
370
|
+
const p = proof.premises[0];
|
|
371
|
+
if (!p)
|
|
372
|
+
return false;
|
|
373
|
+
return (0, formula_1.formulaEquals)(p.conclusion, c.right) && verifyAt(p, withContext(ctx, c.left));
|
|
374
|
+
}
|
|
375
|
+
case 'impE': {
|
|
376
|
+
if (proof.premises.length !== 2)
|
|
377
|
+
return false;
|
|
378
|
+
const [maj, min] = proof.premises;
|
|
379
|
+
if (!maj || !min)
|
|
380
|
+
return false;
|
|
381
|
+
if (maj.conclusion.kind !== 'implies')
|
|
382
|
+
return false;
|
|
383
|
+
return ((0, formula_1.formulaEquals)(maj.conclusion.left, min.conclusion) &&
|
|
384
|
+
(0, formula_1.formulaEquals)(maj.conclusion.right, c) &&
|
|
385
|
+
verifyAt(maj, ctx) &&
|
|
386
|
+
verifyAt(min, ctx));
|
|
387
|
+
}
|
|
388
|
+
case 'notI': {
|
|
389
|
+
if (c.kind !== 'not' || proof.premises.length !== 1)
|
|
390
|
+
return false;
|
|
391
|
+
const p = proof.premises[0];
|
|
392
|
+
if (!p)
|
|
393
|
+
return false;
|
|
394
|
+
return p.conclusion.kind === 'bottom' && verifyAt(p, withContext(ctx, c.arg));
|
|
395
|
+
}
|
|
396
|
+
case 'notE': {
|
|
397
|
+
if (c.kind !== 'bottom' || proof.premises.length !== 2)
|
|
398
|
+
return false;
|
|
399
|
+
const [neg, pos] = proof.premises;
|
|
400
|
+
if (!neg || !pos)
|
|
401
|
+
return false;
|
|
402
|
+
if (neg.conclusion.kind !== 'not')
|
|
403
|
+
return false;
|
|
404
|
+
return ((0, formula_1.formulaEquals)(neg.conclusion.arg, pos.conclusion) &&
|
|
405
|
+
verifyAt(neg, ctx) &&
|
|
406
|
+
verifyAt(pos, ctx));
|
|
407
|
+
}
|
|
408
|
+
case 'bottomE': {
|
|
409
|
+
if (proof.premises.length !== 1)
|
|
410
|
+
return false;
|
|
411
|
+
const p = proof.premises[0];
|
|
412
|
+
if (!p)
|
|
413
|
+
return false;
|
|
414
|
+
return p.conclusion.kind === 'bottom' && verifyAt(p, ctx);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=prover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prover.js","sourceRoot":"","sources":["../../../src/profiles/intuitionistic-nj/prover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fórmula proposicional intuicionista. No incluye `true` explícito
|
|
3
|
+
* (irrelevante; usar `bottom → bottom` si hace falta).
|
|
4
|
+
*/
|
|
5
|
+
export type IntuitFormula = {
|
|
6
|
+
kind: 'atom';
|
|
7
|
+
name: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'and';
|
|
10
|
+
left: IntuitFormula;
|
|
11
|
+
right: IntuitFormula;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'or';
|
|
14
|
+
left: IntuitFormula;
|
|
15
|
+
right: IntuitFormula;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'implies';
|
|
18
|
+
left: IntuitFormula;
|
|
19
|
+
right: IntuitFormula;
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'not';
|
|
22
|
+
arg: IntuitFormula;
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'bottom';
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Reglas de prueba NJ. Cada nodo del árbol marca la regla aplicada
|
|
28
|
+
* para llegar a su `conclusion` desde sus `premises`.
|
|
29
|
+
*/
|
|
30
|
+
export type ProofRule = 'assumption' | 'andI' | 'andEL' | 'andER' | 'orIL' | 'orIR' | 'orE' | 'impI' | 'impE' | 'notI' | 'notE' | 'bottomE';
|
|
31
|
+
/**
|
|
32
|
+
* Árbol de prueba NJ. Las hipótesis abiertas viven implícitamente
|
|
33
|
+
* en el contexto del subárbol; `discharged` lista las hipótesis
|
|
34
|
+
* cerradas por la regla aplicada en este nodo (relevante para →I,
|
|
35
|
+
* ¬I y ∨E).
|
|
36
|
+
*/
|
|
37
|
+
export interface NJProof {
|
|
38
|
+
conclusion: IntuitFormula;
|
|
39
|
+
rule: ProofRule;
|
|
40
|
+
premises: NJProof[];
|
|
41
|
+
discharged?: IntuitFormula[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Modelo de Kripke para IPC: preorden de mundos con valuación
|
|
45
|
+
* persistente. La accesibilidad debe ser reflexiva y transitiva;
|
|
46
|
+
* `forcing` es monótona (si w ⊩ p y w ≤ v entonces v ⊩ p).
|
|
47
|
+
*/
|
|
48
|
+
export interface KripkeIntuitModel {
|
|
49
|
+
worlds: string[];
|
|
50
|
+
/** Aristas explícitas de la accesibilidad (clausura reflexiva-transitiva implícita). */
|
|
51
|
+
accessibility: Array<[string, string]>;
|
|
52
|
+
/** Por mundo, los átomos forzados. */
|
|
53
|
+
forcing: Map<string, Set<string>>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiles/intuitionistic-nj/types.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,aAAa,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,MAAM,GACN,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,CAAC;AAEd;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wFAAwF;IACxF,aAAa,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,sCAAsC;IACtC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Intuitionistic Natural Deduction (NJ) — Tipos
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Sistema NJ de Gentzen para lógica intuicionista proposicional.
|
|
7
|
+
// Sin tercero excluido, sin doble negación clásica.
|
|
8
|
+
//
|
|
9
|
+
// Reglas implementadas:
|
|
10
|
+
// - Conjunción: ∧I, ∧EL, ∧ER
|
|
11
|
+
// - Disyunción: ∨IL, ∨IR, ∨E (con descarga)
|
|
12
|
+
// - Implicación: →I (descarga), →E (modus ponens)
|
|
13
|
+
// - Negación: ¬I (descarga, deriva ⊥), ¬E (deriva ⊥)
|
|
14
|
+
// - Falsedad: ⊥E (ex falso quodlibet)
|
|
15
|
+
// - Asunción: hipótesis del contexto
|
|
16
|
+
//
|
|
17
|
+
// Convención: `¬φ` se entiende como `φ → ⊥`. La regla `notI` es
|
|
18
|
+
// `→I` cuando el consecuente es `⊥`; `notE` es `→E` produciendo
|
|
19
|
+
// `⊥` desde `φ` y `¬φ`.
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/intuitionistic-nj/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAC/D,EAAE;AACF,iEAAiE;AACjE,oDAAoD;AACpD,EAAE;AACF,wBAAwB;AACxB,iCAAiC;AACjC,gDAAgD;AAChD,qDAAqD;AACrD,2DAA2D;AAC3D,4CAA4C;AAC5C,2CAA2C;AAC3C,EAAE;AACF,gEAAgE;AAChE,gEAAgE;AAChE,wBAAwB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type FuzzyOperator = 'lukasiewicz' | 'godel' | 'product';
|
|
2
|
+
export interface FuzzyFormula {
|
|
3
|
+
kind: 'atom' | 'not' | 'and' | 'or' | 'implies';
|
|
4
|
+
name?: string;
|
|
5
|
+
arg?: FuzzyFormula;
|
|
6
|
+
left?: FuzzyFormula;
|
|
7
|
+
right?: FuzzyFormula;
|
|
8
|
+
}
|
|
9
|
+
export declare function atom(name: string): FuzzyFormula;
|
|
10
|
+
export declare function not(arg: FuzzyFormula): FuzzyFormula;
|
|
11
|
+
export declare function and(left: FuzzyFormula, right: FuzzyFormula): FuzzyFormula;
|
|
12
|
+
export declare function or(left: FuzzyFormula, right: FuzzyFormula): FuzzyFormula;
|
|
13
|
+
export declare function implies(left: FuzzyFormula, right: FuzzyFormula): FuzzyFormula;
|
|
14
|
+
export declare function collectFuzzyAtoms(formula: FuzzyFormula): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Evalúa una fórmula borrosa bajo un environment que asigna
|
|
17
|
+
* un valor en [0,1] a cada átomo (átomos sin asignar valen 0).
|
|
18
|
+
*/
|
|
19
|
+
export declare function evaluate(formula: FuzzyFormula, env: Record<string, number>, system: FuzzyOperator): number;
|
|
20
|
+
/**
|
|
21
|
+
* Devuelve true si la fórmula evalúa a 1 (módulo EPSILON) en
|
|
22
|
+
* todos los puntos de la rejilla [0,1]^n con `resolution` puntos
|
|
23
|
+
* por átomo. Default: 11 puntos (0, 0.1, ..., 1).
|
|
24
|
+
*
|
|
25
|
+
* Aviso: es una aproximación por sampling. Algunas tautologías
|
|
26
|
+
* "casi" (verdaderas excepto en un conjunto de medida cero)
|
|
27
|
+
* pueden seguir clasificándose correctamente, pero contraejemplos
|
|
28
|
+
* sutiles requieren resolución mayor.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isTautology(formula: FuzzyFormula, system: FuzzyOperator, resolution?: number): boolean;
|
|
31
|
+
/** Verdadera si la fórmula evalúa a 0 en toda la rejilla. */
|
|
32
|
+
export declare function isContradiction(formula: FuzzyFormula, system: FuzzyOperator, resolution?: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Busca una valuación (en la rejilla con `resolution` puntos por
|
|
35
|
+
* átomo) tal que `|evaluate(formula) - target| <= tolerance`.
|
|
36
|
+
* Devuelve null si no encuentra ninguna.
|
|
37
|
+
*/
|
|
38
|
+
export declare function findValuation(formula: FuzzyFormula, system: FuzzyOperator, target: number, tolerance?: number, resolution?: number): Record<string, number> | null;
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiles/many-valued/index.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA6DD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAE/C;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAEnD;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAEzE;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAExE;AAED,wBAAgB,OAAO,CACrB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,YAAY,GAClB,YAAY,CAEd;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAoBjE;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,MAAM,EAAE,aAAa,GACpB,MAAM,CA2BR;AA4DD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,GAAE,MAAW,GACtB,OAAO,CAUT;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,GAAE,MAAW,GACtB,OAAO,CAUT;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAa,EACxB,UAAU,GAAE,MAAW,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAU/B"}
|