@stevenvo780/st-lang 4.4.0 → 4.5.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.
Files changed (153) hide show
  1. package/dist/coinduction/index.d.ts +136 -0
  2. package/dist/coinduction/index.d.ts.map +1 -0
  3. package/dist/coinduction/index.js +318 -0
  4. package/dist/coinduction/index.js.map +1 -0
  5. package/dist/combinators-ski/abstract.d.ts +5 -0
  6. package/dist/combinators-ski/abstract.d.ts.map +1 -0
  7. package/dist/combinators-ski/abstract.js +88 -0
  8. package/dist/combinators-ski/abstract.js.map +1 -0
  9. package/dist/combinators-ski/index.d.ts +6 -0
  10. package/dist/combinators-ski/index.d.ts.map +1 -0
  11. package/dist/combinators-ski/index.js +30 -0
  12. package/dist/combinators-ski/index.js.map +1 -0
  13. package/dist/combinators-ski/reduce.d.ts +10 -0
  14. package/dist/combinators-ski/reduce.d.ts.map +1 -0
  15. package/dist/combinators-ski/reduce.js +118 -0
  16. package/dist/combinators-ski/reduce.js.map +1 -0
  17. package/dist/combinators-ski/types.d.ts +23 -0
  18. package/dist/combinators-ski/types.d.ts.map +1 -0
  19. package/dist/combinators-ski/types.js +102 -0
  20. package/dist/combinators-ski/types.js.map +1 -0
  21. package/dist/constructive-reals/index.d.ts +132 -0
  22. package/dist/constructive-reals/index.d.ts.map +1 -0
  23. package/dist/constructive-reals/index.js +723 -0
  24. package/dist/constructive-reals/index.js.map +1 -0
  25. package/dist/game-semantics/convert.d.ts +4 -0
  26. package/dist/game-semantics/convert.d.ts.map +1 -0
  27. package/dist/game-semantics/convert.js +28 -0
  28. package/dist/game-semantics/convert.js.map +1 -0
  29. package/dist/game-semantics/index.d.ts +6 -0
  30. package/dist/game-semantics/index.d.ts.map +1 -0
  31. package/dist/game-semantics/index.js +28 -0
  32. package/dist/game-semantics/index.js.map +1 -0
  33. package/dist/game-semantics/strategy.d.ts +34 -0
  34. package/dist/game-semantics/strategy.d.ts.map +1 -0
  35. package/dist/game-semantics/strategy.js +336 -0
  36. package/dist/game-semantics/strategy.js.map +1 -0
  37. package/dist/game-semantics/types.d.ts +64 -0
  38. package/dist/game-semantics/types.d.ts.map +1 -0
  39. package/dist/game-semantics/types.js +78 -0
  40. package/dist/game-semantics/types.js.map +1 -0
  41. package/dist/higher-order-unify/index.d.ts +5 -0
  42. package/dist/higher-order-unify/index.d.ts.map +1 -0
  43. package/dist/higher-order-unify/index.js +27 -0
  44. package/dist/higher-order-unify/index.js.map +1 -0
  45. package/dist/higher-order-unify/normalize.d.ts +14 -0
  46. package/dist/higher-order-unify/normalize.d.ts.map +1 -0
  47. package/dist/higher-order-unify/normalize.js +191 -0
  48. package/dist/higher-order-unify/normalize.js.map +1 -0
  49. package/dist/higher-order-unify/pattern.d.ts +4 -0
  50. package/dist/higher-order-unify/pattern.d.ts.map +1 -0
  51. package/dist/higher-order-unify/pattern.js +70 -0
  52. package/dist/higher-order-unify/pattern.js.map +1 -0
  53. package/dist/higher-order-unify/types.d.ts +19 -0
  54. package/dist/higher-order-unify/types.d.ts.map +1 -0
  55. package/dist/higher-order-unify/types.js +14 -0
  56. package/dist/higher-order-unify/types.js.map +1 -0
  57. package/dist/higher-order-unify/unify.d.ts +5 -0
  58. package/dist/higher-order-unify/unify.d.ts.map +1 -0
  59. package/dist/higher-order-unify/unify.js +306 -0
  60. package/dist/higher-order-unify/unify.js.map +1 -0
  61. package/dist/nbe/index.d.ts +3 -0
  62. package/dist/nbe/index.d.ts.map +1 -0
  63. package/dist/nbe/index.js +25 -0
  64. package/dist/nbe/index.js.map +1 -0
  65. package/dist/nbe/nbe.d.ts +7 -0
  66. package/dist/nbe/nbe.d.ts.map +1 -0
  67. package/dist/nbe/nbe.js +118 -0
  68. package/dist/nbe/nbe.js.map +1 -0
  69. package/dist/nbe/types.d.ts +54 -0
  70. package/dist/nbe/types.d.ts.map +1 -0
  71. package/dist/nbe/types.js +117 -0
  72. package/dist/nbe/types.js.map +1 -0
  73. package/dist/profile-bridge/index.d.ts +64 -0
  74. package/dist/profile-bridge/index.d.ts.map +1 -0
  75. package/dist/profile-bridge/index.js +328 -0
  76. package/dist/profile-bridge/index.js.map +1 -0
  77. package/dist/proof-nets/construct.d.ts +3 -0
  78. package/dist/proof-nets/construct.d.ts.map +1 -0
  79. package/dist/proof-nets/construct.js +85 -0
  80. package/dist/proof-nets/construct.js.map +1 -0
  81. package/dist/proof-nets/correctness.d.ts +3 -0
  82. package/dist/proof-nets/correctness.d.ts.map +1 -0
  83. package/dist/proof-nets/correctness.js +213 -0
  84. package/dist/proof-nets/correctness.js.map +1 -0
  85. package/dist/proof-nets/cut-elim.d.ts +9 -0
  86. package/dist/proof-nets/cut-elim.d.ts.map +1 -0
  87. package/dist/proof-nets/cut-elim.js +149 -0
  88. package/dist/proof-nets/cut-elim.js.map +1 -0
  89. package/dist/proof-nets/index.d.ts +6 -0
  90. package/dist/proof-nets/index.d.ts.map +1 -0
  91. package/dist/proof-nets/index.js +33 -0
  92. package/dist/proof-nets/index.js.map +1 -0
  93. package/dist/proof-nets/types.d.ts +36 -0
  94. package/dist/proof-nets/types.d.ts.map +1 -0
  95. package/dist/proof-nets/types.js +89 -0
  96. package/dist/proof-nets/types.js.map +1 -0
  97. package/dist/tableau-framework/TableauProver.d.ts +10 -0
  98. package/dist/tableau-framework/TableauProver.d.ts.map +1 -0
  99. package/dist/tableau-framework/TableauProver.js +118 -0
  100. package/dist/tableau-framework/TableauProver.js.map +1 -0
  101. package/dist/tableau-framework/index.d.ts +5 -0
  102. package/dist/tableau-framework/index.d.ts.map +1 -0
  103. package/dist/tableau-framework/index.js +11 -0
  104. package/dist/tableau-framework/index.js.map +1 -0
  105. package/dist/tableau-framework/propositional.d.ts +11 -0
  106. package/dist/tableau-framework/propositional.d.ts.map +1 -0
  107. package/dist/tableau-framework/propositional.js +143 -0
  108. package/dist/tableau-framework/propositional.js.map +1 -0
  109. package/dist/tableau-framework/types.d.ts +32 -0
  110. package/dist/tableau-framework/types.d.ts.map +1 -0
  111. package/dist/tableau-framework/types.js +6 -0
  112. package/dist/tableau-framework/types.js.map +1 -0
  113. package/dist/tests/coinduction/coinduction.test.d.ts +2 -0
  114. package/dist/tests/coinduction/coinduction.test.d.ts.map +1 -0
  115. package/dist/tests/coinduction/coinduction.test.js +217 -0
  116. package/dist/tests/coinduction/coinduction.test.js.map +1 -0
  117. package/dist/tests/combinators-ski/combinators-ski.test.d.ts +2 -0
  118. package/dist/tests/combinators-ski/combinators-ski.test.d.ts.map +1 -0
  119. package/dist/tests/combinators-ski/combinators-ski.test.js +211 -0
  120. package/dist/tests/combinators-ski/combinators-ski.test.js.map +1 -0
  121. package/dist/tests/constructive-reals/constructive-reals.test.d.ts +2 -0
  122. package/dist/tests/constructive-reals/constructive-reals.test.d.ts.map +1 -0
  123. package/dist/tests/constructive-reals/constructive-reals.test.js +357 -0
  124. package/dist/tests/constructive-reals/constructive-reals.test.js.map +1 -0
  125. package/dist/tests/game-semantics/game-semantics.test.d.ts +2 -0
  126. package/dist/tests/game-semantics/game-semantics.test.d.ts.map +1 -0
  127. package/dist/tests/game-semantics/game-semantics.test.js +143 -0
  128. package/dist/tests/game-semantics/game-semantics.test.js.map +1 -0
  129. package/dist/tests/higher-order-unify/ho-unify.test.d.ts +2 -0
  130. package/dist/tests/higher-order-unify/ho-unify.test.d.ts.map +1 -0
  131. package/dist/tests/higher-order-unify/ho-unify.test.js +264 -0
  132. package/dist/tests/higher-order-unify/ho-unify.test.js.map +1 -0
  133. package/dist/tests/integration/cross-modules.test.d.ts +8 -0
  134. package/dist/tests/integration/cross-modules.test.d.ts.map +1 -0
  135. package/dist/tests/integration/cross-modules.test.js +668 -0
  136. package/dist/tests/integration/cross-modules.test.js.map +1 -0
  137. package/dist/tests/nbe/nbe.test.d.ts +2 -0
  138. package/dist/tests/nbe/nbe.test.d.ts.map +1 -0
  139. package/dist/tests/nbe/nbe.test.js +121 -0
  140. package/dist/tests/nbe/nbe.test.js.map +1 -0
  141. package/dist/tests/profile-bridge/translations.test.d.ts +2 -0
  142. package/dist/tests/profile-bridge/translations.test.d.ts.map +1 -0
  143. package/dist/tests/profile-bridge/translations.test.js +266 -0
  144. package/dist/tests/profile-bridge/translations.test.js.map +1 -0
  145. package/dist/tests/proof-nets/proof-nets.test.d.ts +2 -0
  146. package/dist/tests/proof-nets/proof-nets.test.d.ts.map +1 -0
  147. package/dist/tests/proof-nets/proof-nets.test.js +263 -0
  148. package/dist/tests/proof-nets/proof-nets.test.js.map +1 -0
  149. package/dist/tests/tableau-framework/tableau.test.d.ts +2 -0
  150. package/dist/tests/tableau-framework/tableau.test.d.ts.map +1 -0
  151. package/dist/tests/tableau-framework/tableau.test.js +196 -0
  152. package/dist/tests/tableau-framework/tableau.test.js.map +1 -0
  153. package/package.json +1 -1
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Proof Nets — Criterio de corrección de Danos-Regnier
4
+ // ============================================================
5
+ //
6
+ // Un net MLL es correcto sii para toda elección de "switch" sobre
7
+ // los par-links (cada ⅋ elige una de sus dos premisas para
8
+ // conservar la arista hacia la conclusión, descartando la otra),
9
+ // el grafo resultante es:
10
+ //
11
+ // - acíclico, y
12
+ // - conexo.
13
+ //
14
+ // Los demás links contribuyen aristas de forma fija:
15
+ // axiom : una arista entre sus dos nodos.
16
+ // cut : una arista entre sus dos nodos.
17
+ // tensor : dos aristas (premisa-izq — conclusión, premisa-der — conclusión).
18
+ // par : sólo UNA arista por switch (conclusión — premisa elegida).
19
+ //
20
+ // La validación enumera los 2^(#par) switches. Para MLL el número
21
+ // de par-links en una prueba típica es bajo; si fuera grande, el
22
+ // criterio se puede reformular en tiempo lineal (algoritmo de
23
+ // Guerrini), pero queda fuera del alcance educativo aquí.
24
+ //
25
+ // Además validamos consistencia local del net antes del criterio:
26
+ // - ports de cada link existen.
27
+ // - axiom/cut conectan fórmulas duales.
28
+ // - tensor/par conectan {A, B, A⊗B} resp. {A, B, A⅋B}.
29
+ // - cada nodo tiene la "valencia" correcta (los átomos terminan
30
+ // en exactamente un axiom o cut; los compuestos son
31
+ // premisa/conclusión de su link).
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.isCorrect = isCorrect;
34
+ const types_1 = require("./types");
35
+ function indexNodes(net) {
36
+ const idx = new Map();
37
+ for (const n of net.nodes) {
38
+ if (idx.has(n.id))
39
+ return null; // ids duplicados
40
+ idx.set(n.id, { formula: n.formula });
41
+ }
42
+ return idx;
43
+ }
44
+ function structurallyValid(net) {
45
+ const idx = indexNodes(net);
46
+ if (!idx)
47
+ return false;
48
+ for (const link of net.links) {
49
+ for (const p of link.ports) {
50
+ if (!idx.has(p))
51
+ return false;
52
+ }
53
+ if (link.kind === 'axiom' || link.kind === 'cut') {
54
+ if (link.ports.length !== 2)
55
+ return false;
56
+ const [a, b] = link.ports;
57
+ const fa = idx.get(a).formula;
58
+ const fb = idx.get(b).formula;
59
+ if (!(0, types_1.formulaEquals)(fa, (0, types_1.dual)(fb)))
60
+ return false;
61
+ }
62
+ else {
63
+ if (link.ports.length !== 3)
64
+ return false;
65
+ const [l, r, c] = link.ports;
66
+ const fc = idx.get(c).formula;
67
+ const fl = idx.get(l).formula;
68
+ const fr = idx.get(r).formula;
69
+ if (fc.kind !== link.kind)
70
+ return false;
71
+ if (!(0, types_1.formulaEquals)(fc.left, fl) || !(0, types_1.formulaEquals)(fc.right, fr))
72
+ return false;
73
+ }
74
+ }
75
+ // Valencia mínima: cada átomo debe ser hoja de un axiom o de un
76
+ // cut. Sin esa condición un átomo "huérfano" pasaría el criterio
77
+ // DR trivialmente (1 componente, sin ciclos) pero no representa
78
+ // una prueba: lo rechazamos a nivel estructural.
79
+ const conclusionsSet = new Set(net.conclusions);
80
+ for (const node of net.nodes) {
81
+ if (node.formula.kind !== 'atom')
82
+ continue;
83
+ let touches = 0;
84
+ for (const link of net.links) {
85
+ if ((link.kind === 'axiom' || link.kind === 'cut') && link.ports.includes(node.id)) {
86
+ touches++;
87
+ }
88
+ }
89
+ if (touches !== 1) {
90
+ // Excepción didáctica: si el único uso restante es como
91
+ // premisa de un tensor/par del cual es hoja, tampoco es
92
+ // válido — debe terminar en axiom/cut.
93
+ return false;
94
+ }
95
+ }
96
+ // Suprimimos `conclusionsSet` (declarado por simetría con
97
+ // futuras extensiones para validar conclusiones explícitas).
98
+ void conclusionsSet;
99
+ return true;
100
+ }
101
+ function edgesForSwitching(net, switching) {
102
+ // `switching[i]` = elección del i-ésimo par-link (true = izquierda).
103
+ const edges = [];
104
+ let parIndex = 0;
105
+ for (const link of net.links) {
106
+ switch (link.kind) {
107
+ case 'axiom':
108
+ case 'cut': {
109
+ const [a, b] = link.ports;
110
+ edges.push([a, b]);
111
+ break;
112
+ }
113
+ case 'tensor': {
114
+ const [l, r, c] = link.ports;
115
+ edges.push([l, c]);
116
+ edges.push([r, c]);
117
+ break;
118
+ }
119
+ case 'par': {
120
+ const [l, r, c] = link.ports;
121
+ const chooseLeft = switching[parIndex++];
122
+ edges.push([chooseLeft ? l : r, c]);
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ return edges;
128
+ }
129
+ // ---------- Acíclico + conexo por Union-Find ----------
130
+ class UnionFind {
131
+ parent = new Map();
132
+ rank = new Map();
133
+ add(x) {
134
+ if (!this.parent.has(x)) {
135
+ this.parent.set(x, x);
136
+ this.rank.set(x, 0);
137
+ }
138
+ }
139
+ find(x) {
140
+ let p = this.parent.get(x);
141
+ if (p !== x) {
142
+ p = this.find(p);
143
+ this.parent.set(x, p);
144
+ }
145
+ return p;
146
+ }
147
+ // Devuelve `false` si los nodos ya estaban en la misma componente
148
+ // (=> añadir la arista crearía un ciclo).
149
+ union(x, y) {
150
+ const rx = this.find(x);
151
+ const ry = this.find(y);
152
+ if (rx === ry)
153
+ return false;
154
+ const rkx = this.rank.get(rx);
155
+ const rky = this.rank.get(ry);
156
+ if (rkx < rky)
157
+ this.parent.set(rx, ry);
158
+ else if (rkx > rky)
159
+ this.parent.set(ry, rx);
160
+ else {
161
+ this.parent.set(ry, rx);
162
+ this.rank.set(rx, rkx + 1);
163
+ }
164
+ return true;
165
+ }
166
+ components() {
167
+ const roots = new Set();
168
+ for (const x of this.parent.keys())
169
+ roots.add(this.find(x));
170
+ return roots.size;
171
+ }
172
+ }
173
+ function switchingIsTree(net, edges) {
174
+ const uf = new UnionFind();
175
+ for (const n of net.nodes)
176
+ uf.add(n.id);
177
+ for (const [a, b] of edges) {
178
+ if (!uf.union(a, b))
179
+ return false; // ciclo
180
+ }
181
+ return uf.components() === 1;
182
+ }
183
+ // ---------- Enumeración de switchings ----------
184
+ function countParLinks(net) {
185
+ let n = 0;
186
+ for (const l of net.links)
187
+ if (l.kind === 'par')
188
+ n++;
189
+ return n;
190
+ }
191
+ function isCorrect(net) {
192
+ if (!structurallyValid(net))
193
+ return false;
194
+ // Net vacío: trivialmente correcto sólo si no tiene nodos.
195
+ if (net.nodes.length === 0)
196
+ return net.links.length === 0;
197
+ const k = countParLinks(net);
198
+ // 2^k switchings; protección anti-explosión para tests didácticos.
199
+ // Con k>20 cualquier net razonable ya excede el alcance educativo.
200
+ if (k > 20)
201
+ return false;
202
+ const total = 1 << k;
203
+ for (let mask = 0; mask < total; mask++) {
204
+ const switching = [];
205
+ for (let i = 0; i < k; i++)
206
+ switching.push(((mask >> i) & 1) === 1);
207
+ const edges = edgesForSwitching(net, switching);
208
+ if (!switchingIsTree(net, edges))
209
+ return false;
210
+ }
211
+ return true;
212
+ }
213
+ //# sourceMappingURL=correctness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correctness.js","sourceRoot":"","sources":["../../src/proof-nets/correctness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ProofNet } from './types';
2
+ export declare function reduceCutStep(net: ProofNet): {
3
+ net: ProofNet;
4
+ reduced: boolean;
5
+ };
6
+ export declare function reduceCut(net: ProofNet): ProofNet;
7
+ export declare function isCutFree(net: ProofNet): boolean;
8
+ export declare function normalizeCuts(net: ProofNet, maxSteps?: number): ProofNet;
9
+ //# sourceMappingURL=cut-elim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cut-elim.d.ts","sourceRoot":"","sources":["../../src/proof-nets/cut-elim.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,QAAQ,EAA6D,MAAM,SAAS,CAAC;AAuCnG,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG;IAAE,GAAG,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAWhF;AAwED,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAEjD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAEhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,SAAO,GAAG,QAAQ,CAQtE"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Proof Nets — Eliminación de cortes
4
+ // ============================================================
5
+ //
6
+ // Para MLL la cut-elimination es local y confluente. Dos pasos
7
+ // fundamentales:
8
+ //
9
+ // (axiom-cut) axiom(a, a') + cut(a', b)
10
+ // ─────────────────────────
11
+ // las apariciones de a' se "atajan" hacia b:
12
+ // los links que tocaban a' tocan ahora a, y
13
+ // axiom + cut desaparecen.
14
+ //
15
+ // (mult-cut) tensor(l₁,r₁,c₁=A⊗B) + par(l₂,r₂,c₂=A⊥⅋B⊥) + cut(c₁,c₂)
16
+ // ──────────────────────────────────────────────────────
17
+ // dos cortes más pequeños: cut(l₁,l₂) y cut(r₁,r₂),
18
+ // desaparecen los links ⊗, ⅋ y el cut original.
19
+ // Los nodos c₁ y c₂ desaparecen.
20
+ //
21
+ // `reduceCut` aplica un paso (si existe alguno). `normalizeCuts`
22
+ // itera hasta normal form (sin cortes). Para MLL la terminación
23
+ // es trivial: cada paso reduce el número de conectivos en el
24
+ // borde del cut.
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.reduceCutStep = reduceCutStep;
27
+ exports.reduceCut = reduceCut;
28
+ exports.isCutFree = isCutFree;
29
+ exports.normalizeCuts = normalizeCuts;
30
+ const types_1 = require("./types");
31
+ // ---------- Helpers ----------
32
+ function cloneNet(net) {
33
+ return {
34
+ nodes: net.nodes.map((n) => ({ id: n.id, formula: n.formula })),
35
+ links: net.links.map((l) => ({ kind: l.kind, ports: [...l.ports] })),
36
+ conclusions: [...net.conclusions],
37
+ };
38
+ }
39
+ function findLinkByPort(links, port, exceptIndex) {
40
+ for (let i = 0; i < links.length; i++) {
41
+ if (i === exceptIndex)
42
+ continue;
43
+ if (links[i].ports.includes(port))
44
+ return { index: i, link: links[i] };
45
+ }
46
+ return null;
47
+ }
48
+ function removeIndices(arr, indices) {
49
+ const drop = new Set(indices);
50
+ return arr.filter((_, i) => !drop.has(i));
51
+ }
52
+ function removeNodesById(nodes, ids) {
53
+ const drop = new Set(ids);
54
+ return nodes.filter((n) => !drop.has(n.id));
55
+ }
56
+ // ---------- Pasos de reducción ----------
57
+ // Intenta aplicar UN paso de cut-elimination. Devuelve el nuevo
58
+ // net (mismo objeto si no había nada que reducir) y un boolean
59
+ // `reduced` indicando si efectivamente se redujo.
60
+ function reduceCutStep(net) {
61
+ for (let i = 0; i < net.links.length; i++) {
62
+ const cut = net.links[i];
63
+ if (cut.kind !== 'cut')
64
+ continue;
65
+ const [a, b] = cut.ports;
66
+ const stepAB = tryReduceAt(net, i, a, b);
67
+ if (stepAB)
68
+ return { net: stepAB, reduced: true };
69
+ const stepBA = tryReduceAt(net, i, b, a);
70
+ if (stepBA)
71
+ return { net: stepBA, reduced: true };
72
+ }
73
+ return { net, reduced: false };
74
+ }
75
+ function tryReduceAt(net, cutIndex, portOnAxiomSide, otherPort) {
76
+ // Caso 1: axiom-cut. El nodo `portOnAxiomSide` participa en un
77
+ // axiom link.
78
+ const ax = findLinkByPort(net.links, portOnAxiomSide, cutIndex);
79
+ if (ax && ax.link.kind === 'axiom') {
80
+ const [p, q] = ax.link.ports;
81
+ const other = p === portOnAxiomSide ? q : p;
82
+ // Eliminamos axiom + cut. Cualquier link futuro que apuntara
83
+ // a `portOnAxiomSide` ya no existe (era hoja del axiom). El
84
+ // axiom ahora pasa a conectar `other` con `otherPort`: lo
85
+ // representamos como un nuevo axiom link entre ambos (es
86
+ // congruente con la semántica de "los duales quedan ligados").
87
+ //
88
+ // Sin embargo: si `otherPort` también es hoja de otro axiom,
89
+ // entonces toda esta cadena se colapsa eventualmente. Aquí
90
+ // hacemos sólo un paso: removemos cut, removemos axiom viejo,
91
+ // creamos axiom nuevo (other, otherPort) si los formulas son
92
+ // duales (deberían serlo por estructura del cut).
93
+ const next = cloneNet(net);
94
+ next.links = removeIndices(next.links, [cutIndex, ax.index]);
95
+ next.links.push({ kind: 'axiom', ports: [other, otherPort] });
96
+ // El nodo `portOnAxiomSide` queda huérfano; se elimina.
97
+ // Si era una conclusión (no debería: era hoja axiom) la
98
+ // quitamos también para mantener consistencia.
99
+ next.nodes = removeNodesById(next.nodes, [portOnAxiomSide]);
100
+ next.conclusions = next.conclusions.filter((c) => c !== portOnAxiomSide);
101
+ return next;
102
+ }
103
+ // Caso 2: mult-cut. `portOnAxiomSide` es la conclusión de un
104
+ // tensor link y `otherPort` la conclusión de un par link con
105
+ // fórmula dual.
106
+ const tensorLink = findLinkByPort(net.links, portOnAxiomSide, cutIndex);
107
+ if (tensorLink &&
108
+ tensorLink.link.kind === 'tensor' &&
109
+ tensorLink.link.ports[2] === portOnAxiomSide) {
110
+ const parLink = findLinkByPort(net.links, otherPort, cutIndex);
111
+ if (parLink && parLink.link.kind === 'par' && parLink.link.ports[2] === otherPort) {
112
+ const tensorNode = net.nodes.find((n) => n.id === portOnAxiomSide);
113
+ const parNode = net.nodes.find((n) => n.id === otherPort);
114
+ if (tensorNode &&
115
+ parNode &&
116
+ tensorNode.formula.kind === 'tensor' &&
117
+ parNode.formula.kind === 'par' &&
118
+ (0, types_1.formulaEquals)(tensorNode.formula, (0, types_1.dual)(parNode.formula))) {
119
+ const [tL, tR] = tensorLink.link.ports;
120
+ const [pL, pR] = parLink.link.ports;
121
+ const next = cloneNet(net);
122
+ next.links = removeIndices(next.links, [cutIndex, tensorLink.index, parLink.index]);
123
+ next.links.push({ kind: 'cut', ports: [tL, pL] });
124
+ next.links.push({ kind: 'cut', ports: [tR, pR] });
125
+ next.nodes = removeNodesById(next.nodes, [portOnAxiomSide, otherPort]);
126
+ next.conclusions = next.conclusions.filter((c) => c !== portOnAxiomSide && c !== otherPort);
127
+ return next;
128
+ }
129
+ }
130
+ }
131
+ return null;
132
+ }
133
+ function reduceCut(net) {
134
+ return reduceCutStep(net).net;
135
+ }
136
+ function isCutFree(net) {
137
+ return !net.links.some((l) => l.kind === 'cut');
138
+ }
139
+ function normalizeCuts(net, maxSteps = 1000) {
140
+ let current = net;
141
+ for (let i = 0; i < maxSteps; i++) {
142
+ const step = reduceCutStep(current);
143
+ if (!step.reduced)
144
+ return step.net;
145
+ current = step.net;
146
+ }
147
+ return current;
148
+ }
149
+ //# sourceMappingURL=cut-elim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cut-elim.js","sourceRoot":"","sources":["../../src/proof-nets/cut-elim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { Polarity, MLLFormula, LinkKind, ProofNetLink, ProofNetNode, ProofNet } from './types';
2
+ export { atomPos, atomNeg, tensor, par, dual, formulaEquals, formulaToString } from './types';
3
+ export { constructFromSequent } from './construct';
4
+ export { isCorrect } from './correctness';
5
+ export { reduceCut, reduceCutStep, normalizeCuts, isCutFree } from './cut-elim';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proof-nets/index.ts"],"names":[],"mappings":"AAaA,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEpG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Proof Nets — Punto de entrada público
4
+ // ============================================================
5
+ //
6
+ // Proof nets de Girard para MLL (Multiplicative Linear Logic):
7
+ // - construcción a partir de un secuente,
8
+ // - verificación de corrección (criterio Danos-Regnier),
9
+ // - eliminación de cortes (axiom-cut y mult-cut).
10
+ //
11
+ // Diseño "didáctico" cercano al estándar de la literatura:
12
+ // nodos numerados, links {axiom, cut, tensor, par} con ports en
13
+ // orden canónico, conclusiones explícitas.
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.isCutFree = exports.normalizeCuts = exports.reduceCutStep = exports.reduceCut = exports.isCorrect = exports.constructFromSequent = exports.formulaToString = exports.formulaEquals = exports.dual = exports.par = exports.tensor = exports.atomNeg = exports.atomPos = void 0;
16
+ var types_1 = require("./types");
17
+ Object.defineProperty(exports, "atomPos", { enumerable: true, get: function () { return types_1.atomPos; } });
18
+ Object.defineProperty(exports, "atomNeg", { enumerable: true, get: function () { return types_1.atomNeg; } });
19
+ Object.defineProperty(exports, "tensor", { enumerable: true, get: function () { return types_1.tensor; } });
20
+ Object.defineProperty(exports, "par", { enumerable: true, get: function () { return types_1.par; } });
21
+ Object.defineProperty(exports, "dual", { enumerable: true, get: function () { return types_1.dual; } });
22
+ Object.defineProperty(exports, "formulaEquals", { enumerable: true, get: function () { return types_1.formulaEquals; } });
23
+ Object.defineProperty(exports, "formulaToString", { enumerable: true, get: function () { return types_1.formulaToString; } });
24
+ var construct_1 = require("./construct");
25
+ Object.defineProperty(exports, "constructFromSequent", { enumerable: true, get: function () { return construct_1.constructFromSequent; } });
26
+ var correctness_1 = require("./correctness");
27
+ Object.defineProperty(exports, "isCorrect", { enumerable: true, get: function () { return correctness_1.isCorrect; } });
28
+ var cut_elim_1 = require("./cut-elim");
29
+ Object.defineProperty(exports, "reduceCut", { enumerable: true, get: function () { return cut_elim_1.reduceCut; } });
30
+ Object.defineProperty(exports, "reduceCutStep", { enumerable: true, get: function () { return cut_elim_1.reduceCutStep; } });
31
+ Object.defineProperty(exports, "normalizeCuts", { enumerable: true, get: function () { return cut_elim_1.normalizeCuts; } });
32
+ Object.defineProperty(exports, "isCutFree", { enumerable: true, get: function () { return cut_elim_1.isCutFree; } });
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proof-nets/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,wCAAwC;AACxC,+DAA+D;AAC/D,EAAE;AACF,+DAA+D;AAC/D,4CAA4C;AAC5C,2DAA2D;AAC3D,oDAAoD;AACpD,EAAE;AACF,2DAA2D;AAC3D,gEAAgE;AAChE,2CAA2C;;;AAI3C,iCAA8F;AAArF,gGAAA,OAAO,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,4FAAA,GAAG,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,wGAAA,eAAe,OAAA;AAE5E,yCAAmD;AAA1C,iHAAA,oBAAoB,OAAA;AAC7B,6CAA0C;AAAjC,wGAAA,SAAS,OAAA;AAClB,uCAAgF;AAAvE,qGAAA,SAAS,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,qGAAA,SAAS,OAAA"}
@@ -0,0 +1,36 @@
1
+ export type Polarity = 'pos' | 'neg';
2
+ export type MLLFormula = {
3
+ kind: 'atom';
4
+ name: string;
5
+ polarity: Polarity;
6
+ } | {
7
+ kind: 'tensor';
8
+ left: MLLFormula;
9
+ right: MLLFormula;
10
+ } | {
11
+ kind: 'par';
12
+ left: MLLFormula;
13
+ right: MLLFormula;
14
+ };
15
+ export type LinkKind = 'axiom' | 'cut' | 'tensor' | 'par';
16
+ export interface ProofNetLink {
17
+ kind: LinkKind;
18
+ ports: number[];
19
+ }
20
+ export interface ProofNetNode {
21
+ id: number;
22
+ formula: MLLFormula;
23
+ }
24
+ export interface ProofNet {
25
+ nodes: ProofNetNode[];
26
+ links: ProofNetLink[];
27
+ conclusions: number[];
28
+ }
29
+ export declare const atomPos: (name: string) => MLLFormula;
30
+ export declare const atomNeg: (name: string) => MLLFormula;
31
+ export declare const tensor: (left: MLLFormula, right: MLLFormula) => MLLFormula;
32
+ export declare const par: (left: MLLFormula, right: MLLFormula) => MLLFormula;
33
+ export declare function dual(f: MLLFormula): MLLFormula;
34
+ export declare function formulaEquals(a: MLLFormula, b: MLLFormula): boolean;
35
+ export declare function formulaToString(f: MLLFormula): string;
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proof-nets/types.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;AAErC,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC;AAO1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAID,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,UAIrC,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,UAIrC,CAAC;AAEH,eAAO,MAAM,MAAM,GAAI,MAAM,UAAU,EAAE,OAAO,UAAU,KAAG,UAI3D,CAAC;AAEH,eAAO,MAAM,GAAG,GAAI,MAAM,UAAU,EAAE,OAAO,UAAU,KAAG,UAIxD,CAAC;AAGH,wBAAgB,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAS9C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAWnE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CASrD"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Proof Nets — Tipos para MLL (Multiplicative Linear Logic)
4
+ // ============================================================
5
+ //
6
+ // Proof nets de Girard: representación gráfica de pruebas en
7
+ // linear logic sin "bureaucracy" de orden estructural.
8
+ //
9
+ // Para MLL puro sólo aparecen dos conectivos:
10
+ // ⊗ (tensor) — multiplicativo positivo
11
+ // ⅋ (par) — multiplicativo negativo
12
+ //
13
+ // Los átomos llevan polaridad explícita (A vs A⊥); la dualidad
14
+ // satisface (A⊥)⊥ = A, (A⊗B)⊥ = A⊥ ⅋ B⊥, (A⅋B)⊥ = A⊥ ⊗ B⊥.
15
+ //
16
+ // Un nodo del net es la ocurrencia de una fórmula en algún punto
17
+ // del grafo. Un link une nodos con la semántica habitual:
18
+ // axiom : dos nodos duales, frescos como hojas del net.
19
+ // cut : dos nodos duales, no aportan a la conclusión.
20
+ // tensor : tres nodos {premisa-izq, premisa-der, conclusión}.
21
+ // par : tres nodos {premisa-izq, premisa-der, conclusión}.
22
+ //
23
+ // Las conclusiones del net son los ids de los nodos que viven en
24
+ // el "borde": ni premisa de tensor/par, ni participan en un cut.
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.par = exports.tensor = exports.atomNeg = exports.atomPos = void 0;
27
+ exports.dual = dual;
28
+ exports.formulaEquals = formulaEquals;
29
+ exports.formulaToString = formulaToString;
30
+ // ---------- Constructores convenientes para fórmulas ----------
31
+ const atomPos = (name) => ({
32
+ kind: 'atom',
33
+ name,
34
+ polarity: 'pos',
35
+ });
36
+ exports.atomPos = atomPos;
37
+ const atomNeg = (name) => ({
38
+ kind: 'atom',
39
+ name,
40
+ polarity: 'neg',
41
+ });
42
+ exports.atomNeg = atomNeg;
43
+ const tensor = (left, right) => ({
44
+ kind: 'tensor',
45
+ left,
46
+ right,
47
+ });
48
+ exports.tensor = tensor;
49
+ const par = (left, right) => ({
50
+ kind: 'par',
51
+ left,
52
+ right,
53
+ });
54
+ exports.par = par;
55
+ // Dualidad lineal: involutiva, distribuye De Morgan sobre ⊗ / ⅋.
56
+ function dual(f) {
57
+ switch (f.kind) {
58
+ case 'atom':
59
+ return { kind: 'atom', name: f.name, polarity: f.polarity === 'pos' ? 'neg' : 'pos' };
60
+ case 'tensor':
61
+ return { kind: 'par', left: dual(f.left), right: dual(f.right) };
62
+ case 'par':
63
+ return { kind: 'tensor', left: dual(f.left), right: dual(f.right) };
64
+ }
65
+ }
66
+ function formulaEquals(a, b) {
67
+ if (a.kind !== b.kind)
68
+ return false;
69
+ switch (a.kind) {
70
+ case 'atom':
71
+ return a.name === b.name && a.polarity === b.polarity;
72
+ case 'tensor':
73
+ case 'par': {
74
+ const bb = b;
75
+ return formulaEquals(a.left, bb.left) && formulaEquals(a.right, bb.right);
76
+ }
77
+ }
78
+ }
79
+ function formulaToString(f) {
80
+ switch (f.kind) {
81
+ case 'atom':
82
+ return f.polarity === 'pos' ? f.name : `${f.name}⊥`;
83
+ case 'tensor':
84
+ return `(${formulaToString(f.left)} ⊗ ${formulaToString(f.right)})`;
85
+ case 'par':
86
+ return `(${formulaToString(f.left)} ⅋ ${formulaToString(f.right)})`;
87
+ }
88
+ }
89
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/proof-nets/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Tableau, TableauBranch, Rule, ClosureCondition } from './types';
2
+ export declare class TableauProver<F> {
3
+ private rules;
4
+ private closureConditions;
5
+ registerRule(rule: Rule<F>): void;
6
+ registerClosureCondition(check: ClosureCondition<F>): void;
7
+ prove(root: TableauBranch<F>, maxDepth?: number): Tableau<F>;
8
+ private checkClosure;
9
+ }
10
+ //# sourceMappingURL=TableauProver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableauProver.d.ts","sourceRoot":"","sources":["../../src/tableau-framework/TableauProver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EAEb,IAAI,EACJ,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAYjB,qBAAa,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IAIjC,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI1D,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,CAAC,CAAC;IAwFxD,OAAO,CAAC,YAAY;CAWrB"}