@stevenvo780/st-lang 4.5.2 → 4.6.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 (185) hide show
  1. package/dist/categorical/fin-set.d.ts +39 -0
  2. package/dist/categorical/fin-set.d.ts.map +1 -0
  3. package/dist/categorical/fin-set.js +217 -0
  4. package/dist/categorical/fin-set.js.map +1 -0
  5. package/dist/categorical/free.d.ts +23 -0
  6. package/dist/categorical/free.d.ts.map +1 -0
  7. package/dist/categorical/free.js +168 -0
  8. package/dist/categorical/free.js.map +1 -0
  9. package/dist/categorical/functor.d.ts +40 -0
  10. package/dist/categorical/functor.d.ts.map +1 -0
  11. package/dist/categorical/functor.js +139 -0
  12. package/dist/categorical/functor.js.map +1 -0
  13. package/dist/categorical/index.d.ts +11 -0
  14. package/dist/categorical/index.d.ts.map +1 -0
  15. package/dist/categorical/index.js +33 -0
  16. package/dist/categorical/index.js.map +1 -0
  17. package/dist/categorical/limits.d.ts +64 -0
  18. package/dist/categorical/limits.d.ts.map +1 -0
  19. package/dist/categorical/limits.js +248 -0
  20. package/dist/categorical/limits.js.map +1 -0
  21. package/dist/categorical/monoidal.d.ts +14 -0
  22. package/dist/categorical/monoidal.d.ts.map +1 -0
  23. package/dist/categorical/monoidal.js +148 -0
  24. package/dist/categorical/monoidal.js.map +1 -0
  25. package/dist/categorical/poset.d.ts +14 -0
  26. package/dist/categorical/poset.d.ts.map +1 -0
  27. package/dist/categorical/poset.js +115 -0
  28. package/dist/categorical/poset.js.map +1 -0
  29. package/dist/categorical/types.d.ts +111 -0
  30. package/dist/categorical/types.d.ts.map +1 -0
  31. package/dist/categorical/types.js +15 -0
  32. package/dist/categorical/types.js.map +1 -0
  33. package/dist/csp-hoare/analysis.d.ts +51 -0
  34. package/dist/csp-hoare/analysis.d.ts.map +1 -0
  35. package/dist/csp-hoare/analysis.js +317 -0
  36. package/dist/csp-hoare/analysis.js.map +1 -0
  37. package/dist/csp-hoare/examples.d.ts +33 -0
  38. package/dist/csp-hoare/examples.d.ts.map +1 -0
  39. package/dist/csp-hoare/examples.js +108 -0
  40. package/dist/csp-hoare/examples.js.map +1 -0
  41. package/dist/csp-hoare/index.d.ts +6 -0
  42. package/dist/csp-hoare/index.d.ts.map +1 -0
  43. package/dist/csp-hoare/index.js +50 -0
  44. package/dist/csp-hoare/index.js.map +1 -0
  45. package/dist/csp-hoare/semantics.d.ts +49 -0
  46. package/dist/csp-hoare/semantics.d.ts.map +1 -0
  47. package/dist/csp-hoare/semantics.js +494 -0
  48. package/dist/csp-hoare/semantics.js.map +1 -0
  49. package/dist/csp-hoare/types.d.ts +60 -0
  50. package/dist/csp-hoare/types.d.ts.map +1 -0
  51. package/dist/csp-hoare/types.js +31 -0
  52. package/dist/csp-hoare/types.js.map +1 -0
  53. package/dist/hindley-milner/index.d.ts +7 -0
  54. package/dist/hindley-milner/index.d.ts.map +1 -0
  55. package/dist/hindley-milner/index.js +60 -0
  56. package/dist/hindley-milner/index.js.map +1 -0
  57. package/dist/hindley-milner/infer.d.ts +26 -0
  58. package/dist/hindley-milner/infer.d.ts.map +1 -0
  59. package/dist/hindley-milner/infer.js +278 -0
  60. package/dist/hindley-milner/infer.js.map +1 -0
  61. package/dist/hindley-milner/substitution.d.ts +21 -0
  62. package/dist/hindley-milner/substitution.d.ts.map +1 -0
  63. package/dist/hindley-milner/substitution.js +215 -0
  64. package/dist/hindley-milner/substitution.js.map +1 -0
  65. package/dist/hindley-milner/types.d.ts +84 -0
  66. package/dist/hindley-milner/types.d.ts.map +1 -0
  67. package/dist/hindley-milner/types.js +166 -0
  68. package/dist/hindley-milner/types.js.map +1 -0
  69. package/dist/hott/equality.d.ts +4 -0
  70. package/dist/hott/equality.d.ts.map +1 -0
  71. package/dist/hott/equality.js +108 -0
  72. package/dist/hott/equality.js.map +1 -0
  73. package/dist/hott/index.d.ts +13 -0
  74. package/dist/hott/index.d.ts.map +1 -0
  75. package/dist/hott/index.js +77 -0
  76. package/dist/hott/index.js.map +1 -0
  77. package/dist/hott/infer.d.ts +11 -0
  78. package/dist/hott/infer.d.ts.map +1 -0
  79. package/dist/hott/infer.js +465 -0
  80. package/dist/hott/infer.js.map +1 -0
  81. package/dist/hott/normalize.d.ts +5 -0
  82. package/dist/hott/normalize.d.ts.map +1 -0
  83. package/dist/hott/normalize.js +240 -0
  84. package/dist/hott/normalize.js.map +1 -0
  85. package/dist/hott/path-algebra.d.ts +25 -0
  86. package/dist/hott/path-algebra.d.ts.map +1 -0
  87. package/dist/hott/path-algebra.js +67 -0
  88. package/dist/hott/path-algebra.js.map +1 -0
  89. package/dist/hott/substitute.d.ts +3 -0
  90. package/dist/hott/substitute.d.ts.map +1 -0
  91. package/dist/hott/substitute.js +131 -0
  92. package/dist/hott/substitute.js.map +1 -0
  93. package/dist/hott/types.d.ts +126 -0
  94. package/dist/hott/types.d.ts.map +1 -0
  95. package/dist/hott/types.js +346 -0
  96. package/dist/hott/types.js.map +1 -0
  97. package/dist/index.d.ts +7 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +48 -3
  100. package/dist/index.js.map +1 -1
  101. package/dist/lemma-synthesis/index.d.ts +124 -0
  102. package/dist/lemma-synthesis/index.d.ts.map +1 -0
  103. package/dist/lemma-synthesis/index.js +640 -0
  104. package/dist/lemma-synthesis/index.js.map +1 -0
  105. package/dist/tactic-dsl/combinators.d.ts +6 -0
  106. package/dist/tactic-dsl/combinators.d.ts.map +1 -0
  107. package/dist/tactic-dsl/combinators.js +98 -0
  108. package/dist/tactic-dsl/combinators.js.map +1 -0
  109. package/dist/tactic-dsl/index.d.ts +39 -0
  110. package/dist/tactic-dsl/index.d.ts.map +1 -0
  111. package/dist/tactic-dsl/index.js +162 -0
  112. package/dist/tactic-dsl/index.js.map +1 -0
  113. package/dist/tactic-dsl/tactics.d.ts +21 -0
  114. package/dist/tactic-dsl/tactics.d.ts.map +1 -0
  115. package/dist/tactic-dsl/tactics.js +536 -0
  116. package/dist/tactic-dsl/tactics.js.map +1 -0
  117. package/dist/tactic-dsl/types.d.ts +54 -0
  118. package/dist/tactic-dsl/types.d.ts.map +1 -0
  119. package/dist/tactic-dsl/types.js +226 -0
  120. package/dist/tactic-dsl/types.js.map +1 -0
  121. package/dist/tests/categorical/categorical.test.d.ts +2 -0
  122. package/dist/tests/categorical/categorical.test.d.ts.map +1 -0
  123. package/dist/tests/categorical/categorical.test.js +300 -0
  124. package/dist/tests/categorical/categorical.test.js.map +1 -0
  125. package/dist/tests/csp-hoare/csp-hoare.test.d.ts +2 -0
  126. package/dist/tests/csp-hoare/csp-hoare.test.d.ts.map +1 -0
  127. package/dist/tests/csp-hoare/csp-hoare.test.js +313 -0
  128. package/dist/tests/csp-hoare/csp-hoare.test.js.map +1 -0
  129. package/dist/tests/hindley-milner/hindley-milner.test.d.ts +2 -0
  130. package/dist/tests/hindley-milner/hindley-milner.test.d.ts.map +1 -0
  131. package/dist/tests/hindley-milner/hindley-milner.test.js +327 -0
  132. package/dist/tests/hindley-milner/hindley-milner.test.js.map +1 -0
  133. package/dist/tests/hott/hott.test.d.ts +2 -0
  134. package/dist/tests/hott/hott.test.d.ts.map +1 -0
  135. package/dist/tests/hott/hott.test.js +271 -0
  136. package/dist/tests/hott/hott.test.js.map +1 -0
  137. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts +2 -0
  138. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts.map +1 -0
  139. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js +460 -0
  140. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js.map +1 -0
  141. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts +2 -0
  142. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts.map +1 -0
  143. package/dist/tests/tactic-dsl/tactic-dsl.test.js +259 -0
  144. package/dist/tests/tactic-dsl/tactic-dsl.test.js.map +1 -0
  145. package/dist/tests/tptp/bridge.test.d.ts +2 -0
  146. package/dist/tests/tptp/bridge.test.d.ts.map +1 -0
  147. package/dist/tests/tptp/bridge.test.js +154 -0
  148. package/dist/tests/tptp/bridge.test.js.map +1 -0
  149. package/dist/tests/tptp/emitter.test.d.ts +2 -0
  150. package/dist/tests/tptp/emitter.test.d.ts.map +1 -0
  151. package/dist/tests/tptp/emitter.test.js +128 -0
  152. package/dist/tests/tptp/emitter.test.js.map +1 -0
  153. package/dist/tests/tptp/parser.test.d.ts +2 -0
  154. package/dist/tests/tptp/parser.test.d.ts.map +1 -0
  155. package/dist/tests/tptp/parser.test.js +192 -0
  156. package/dist/tests/tptp/parser.test.js.map +1 -0
  157. package/dist/tests/tptp/tokenizer.test.d.ts +2 -0
  158. package/dist/tests/tptp/tokenizer.test.d.ts.map +1 -0
  159. package/dist/tests/tptp/tokenizer.test.js +60 -0
  160. package/dist/tests/tptp/tokenizer.test.js.map +1 -0
  161. package/dist/tptp/ast.d.ts +73 -0
  162. package/dist/tptp/ast.d.ts.map +1 -0
  163. package/dist/tptp/ast.js +35 -0
  164. package/dist/tptp/ast.js.map +1 -0
  165. package/dist/tptp/bridge.d.ts +14 -0
  166. package/dist/tptp/bridge.d.ts.map +1 -0
  167. package/dist/tptp/bridge.js +146 -0
  168. package/dist/tptp/bridge.js.map +1 -0
  169. package/dist/tptp/emitter.d.ts +5 -0
  170. package/dist/tptp/emitter.d.ts.map +1 -0
  171. package/dist/tptp/emitter.js +103 -0
  172. package/dist/tptp/emitter.js.map +1 -0
  173. package/dist/tptp/index.d.ts +7 -0
  174. package/dist/tptp/index.d.ts.map +1 -0
  175. package/dist/tptp/index.js +31 -0
  176. package/dist/tptp/index.js.map +1 -0
  177. package/dist/tptp/parser.d.ts +23 -0
  178. package/dist/tptp/parser.d.ts.map +1 -0
  179. package/dist/tptp/parser.js +440 -0
  180. package/dist/tptp/parser.js.map +1 -0
  181. package/dist/tptp/tokenizer.d.ts +14 -0
  182. package/dist/tptp/tokenizer.d.ts.map +1 -0
  183. package/dist/tptp/tokenizer.js +264 -0
  184. package/dist/tptp/tokenizer.js.map +1 -0
  185. package/package.json +4 -1
@@ -0,0 +1,536 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Tactic DSL — tactics built-in
4
+ // ============================================================
5
+ //
6
+ // Cada tactic recibe un ProofState y devuelve un ProofState nuevo
7
+ // (inmutable). Si la tactic no aplica al goal actual, lanza
8
+ // TacticError. Eso permite que `orElse` capture la falla y pruebe
9
+ // otra alternativa.
10
+ //
11
+ // Convención: el goal "activo" es siempre `state.goals[0]`. Las
12
+ // reglas que generan sub-goals (split, induction, destruct, …) los
13
+ // insertan al frente para que se trabajen en orden.
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports._resetGoalCounter = _resetGoalCounter;
16
+ exports.intro = intro;
17
+ exports.exact = exact;
18
+ exports.assumption = assumption;
19
+ exports.apply = apply;
20
+ exports.rewrite = rewrite;
21
+ exports.rfl = rfl;
22
+ exports.trivial = trivial;
23
+ exports.split = split;
24
+ exports.left = left;
25
+ exports.right = right;
26
+ exports.destruct = destruct;
27
+ exports.induction = induction;
28
+ exports.caseAnalysis = caseAnalysis;
29
+ exports.unfold = unfold;
30
+ exports.simp = simp;
31
+ const types_1 = require("./types");
32
+ let goalCounter = 0;
33
+ function freshGoalId(prefix = 'g') {
34
+ goalCounter++;
35
+ return `${prefix}${goalCounter}`;
36
+ }
37
+ // Reset para tests deterministas (no exportado en el API público).
38
+ function _resetGoalCounter() {
39
+ goalCounter = 0;
40
+ }
41
+ function activeGoal(state, tactic) {
42
+ if (state.done || state.goals.length === 0) {
43
+ throw new types_1.TacticError(tactic, 'no hay goals activos');
44
+ }
45
+ const g = state.goals[0];
46
+ if (!g) {
47
+ throw new types_1.TacticError(tactic, 'goal frontal indefinido');
48
+ }
49
+ return g;
50
+ }
51
+ function withNewGoals(state, replace) {
52
+ const rest = state.goals.slice(1);
53
+ const next = [...replace, ...rest];
54
+ return {
55
+ goals: next,
56
+ history: state.history,
57
+ done: next.length === 0,
58
+ };
59
+ }
60
+ function recordHistory(before, after, tactic, args) {
61
+ const invocation = { tactic, args, before, after };
62
+ return {
63
+ ...after,
64
+ history: [...before.history, invocation],
65
+ };
66
+ }
67
+ // ---------- intro ----------
68
+ // `intro(name?)` — para goal `P -> Q`, descarga `P` con nombre `name`
69
+ // (o auto) y deja goal `Q`. Soporta también `~P` (≡ `P -> False`).
70
+ function intro(name) {
71
+ return (state) => {
72
+ const goal = activeGoal(state, 'intro');
73
+ const f = (0, types_1.parseFormula)(goal.concl);
74
+ let hypType;
75
+ let newConcl;
76
+ if (f.kind === 'imp') {
77
+ hypType = f.left;
78
+ newConcl = f.right;
79
+ }
80
+ else if (f.kind === 'not') {
81
+ hypType = f.body;
82
+ newConcl = { kind: 'false' };
83
+ }
84
+ else {
85
+ throw new types_1.TacticError('intro', `goal no es una implicación: ${goal.concl}`);
86
+ }
87
+ const hypName = name ?? autoFreshHypName(goal.hyps);
88
+ if (goal.hyps[hypName] !== undefined) {
89
+ throw new types_1.TacticError('intro', `nombre de hipótesis '${hypName}' ya existe`);
90
+ }
91
+ const newGoal = {
92
+ id: goal.id,
93
+ hyps: { ...goal.hyps, [hypName]: (0, types_1.formulaToString)(hypType) },
94
+ concl: (0, types_1.formulaToString)(newConcl),
95
+ };
96
+ const after = withNewGoals(state, [newGoal]);
97
+ return recordHistory(state, after, 'intro', [name ?? null]);
98
+ };
99
+ }
100
+ function autoFreshHypName(hyps) {
101
+ let i = 1;
102
+ while (hyps[`H${i}`] !== undefined)
103
+ i++;
104
+ return `H${i}`;
105
+ }
106
+ // ---------- exact ----------
107
+ // `exact(term)` — cierra el goal si `term` (interpretado como nombre
108
+ // de una hipótesis O como string igual al goal) coincide con la
109
+ // conclusión.
110
+ function exact(term) {
111
+ return (state) => {
112
+ const goal = activeGoal(state, 'exact');
113
+ const hypType = goal.hyps[term];
114
+ if (hypType !== undefined && (0, types_1.formulaEq)(hypType, goal.concl)) {
115
+ const after = withNewGoals(state, []);
116
+ return recordHistory(state, after, 'exact', [term]);
117
+ }
118
+ if ((0, types_1.formulaEq)(term, goal.concl)) {
119
+ const after = withNewGoals(state, []);
120
+ return recordHistory(state, after, 'exact', [term]);
121
+ }
122
+ throw new types_1.TacticError('exact', `'${term}' no coincide con goal '${goal.concl}' (hyps: ${Object.keys(goal.hyps).join(', ')})`);
123
+ };
124
+ }
125
+ // ---------- assumption ----------
126
+ // Cierra el goal si alguna hipótesis tiene el mismo tipo que la conclusión.
127
+ function assumption() {
128
+ return (state) => {
129
+ const goal = activeGoal(state, 'assumption');
130
+ for (const [name, ty] of Object.entries(goal.hyps)) {
131
+ if ((0, types_1.formulaEq)(ty, goal.concl)) {
132
+ const after = withNewGoals(state, []);
133
+ return recordHistory(state, after, 'assumption', [name]);
134
+ }
135
+ }
136
+ throw new types_1.TacticError('assumption', `ninguna hipótesis prueba '${goal.concl}' (tenía: ${formatHypList(goal.hyps)})`);
137
+ };
138
+ }
139
+ function formatHypList(hyps) {
140
+ const entries = Object.entries(hyps);
141
+ if (entries.length === 0)
142
+ return '∅';
143
+ return entries.map(([n, t]) => `${n}:${t}`).join(', ');
144
+ }
145
+ // ---------- apply ----------
146
+ // `apply(thm)` — backward chaining sobre una hipótesis `thm`.
147
+ // Si `thm : A -> B` y goal es `B`, deja goal `A`.
148
+ // Si `thm : A -> B -> C` y goal es `C`, deja goals `A`, `B`.
149
+ // args opcional: lista de hipótesis/strings que satisfacen las premisas
150
+ // inmediatamente.
151
+ function apply(thm, args) {
152
+ return (state) => {
153
+ const goal = activeGoal(state, 'apply');
154
+ const thmType = goal.hyps[thm];
155
+ if (thmType === undefined) {
156
+ throw new types_1.TacticError('apply', `'${thm}' no está en hipótesis`);
157
+ }
158
+ // Aplanar la flecha en (premisas[], conclusión).
159
+ const f = (0, types_1.parseFormula)(thmType);
160
+ const premises = [];
161
+ let cur = f;
162
+ while (cur.kind === 'imp') {
163
+ premises.push(cur.left);
164
+ cur = cur.right;
165
+ }
166
+ if (!(0, types_1.formulaEq)((0, types_1.formulaToString)(cur), goal.concl)) {
167
+ throw new types_1.TacticError('apply', `conclusión de '${thm}' (${(0, types_1.formulaToString)(cur)}) no unifica con goal '${goal.concl}'`);
168
+ }
169
+ // Descontar argumentos ya provistos: cada arg debe ser una hipótesis
170
+ // cuyo tipo case con la siguiente premisa.
171
+ let remaining = premises;
172
+ if (args && args.length > 0) {
173
+ if (args.length > premises.length) {
174
+ throw new types_1.TacticError('apply', `demasiados args (${args.length} > ${premises.length})`);
175
+ }
176
+ for (let i = 0; i < args.length; i++) {
177
+ const argName = args[i];
178
+ const argType = goal.hyps[argName];
179
+ const expected = premises[i];
180
+ if (argType === undefined || expected === undefined) {
181
+ throw new types_1.TacticError('apply', `arg '${argName}' no es hipótesis válida`);
182
+ }
183
+ if (!(0, types_1.formulaEq)(argType, (0, types_1.formulaToString)(expected))) {
184
+ throw new types_1.TacticError('apply', `arg '${argName}:${argType}' no encaja con premisa ${i + 1} (${(0, types_1.formulaToString)(expected)})`);
185
+ }
186
+ }
187
+ remaining = premises.slice(args.length);
188
+ }
189
+ const subGoals = remaining.map((p) => ({
190
+ id: freshGoalId(goal.id + '_'),
191
+ hyps: { ...goal.hyps },
192
+ concl: (0, types_1.formulaToString)(p),
193
+ }));
194
+ const after = withNewGoals(state, subGoals);
195
+ return recordHistory(state, after, 'apply', [thm, args ?? []]);
196
+ };
197
+ }
198
+ // ---------- rewrite ----------
199
+ // `rewrite(eqName, dir?)` — usa la hipótesis `eqName: lhs = rhs` para
200
+ // reemplazar ocurrencias de lhs por rhs en la conclusión (o al revés).
201
+ function rewrite(eq, dir = 'left-to-right') {
202
+ return (state) => {
203
+ const goal = activeGoal(state, 'rewrite');
204
+ const eqType = goal.hyps[eq];
205
+ if (eqType === undefined) {
206
+ throw new types_1.TacticError('rewrite', `'${eq}' no está en hipótesis`);
207
+ }
208
+ const f = (0, types_1.parseFormula)(eqType);
209
+ if (f.kind !== 'eq') {
210
+ throw new types_1.TacticError('rewrite', `'${eq}:${eqType}' no es una igualdad`);
211
+ }
212
+ const lhsStr = (0, types_1.formulaToString)(f.left);
213
+ const rhsStr = (0, types_1.formulaToString)(f.right);
214
+ const from = dir === 'left-to-right' ? lhsStr : rhsStr;
215
+ const to = dir === 'left-to-right' ? rhsStr : lhsStr;
216
+ const newConcl = (0, types_1.substitute)(goal.concl, from, to);
217
+ if (newConcl === goal.concl) {
218
+ throw new types_1.TacticError('rewrite', `no se encontró '${from}' en la conclusión '${goal.concl}'`);
219
+ }
220
+ const newGoal = {
221
+ id: goal.id,
222
+ hyps: { ...goal.hyps },
223
+ concl: (0, types_1.normalizeFormula)(newConcl),
224
+ };
225
+ const after = withNewGoals(state, [newGoal]);
226
+ return recordHistory(state, after, 'rewrite', [eq, dir]);
227
+ };
228
+ }
229
+ // ---------- rfl ----------
230
+ // Cierra goals de la forma `a = a` (reflexividad sintáctica tras normalizar).
231
+ function rfl() {
232
+ return (state) => {
233
+ const goal = activeGoal(state, 'rfl');
234
+ const f = (0, types_1.parseFormula)(goal.concl);
235
+ if (f.kind !== 'eq') {
236
+ throw new types_1.TacticError('rfl', `goal no es una igualdad: ${goal.concl}`);
237
+ }
238
+ if ((0, types_1.formulaToString)(f.left) !== (0, types_1.formulaToString)(f.right)) {
239
+ throw new types_1.TacticError('rfl', `no es reflexiva: ${goal.concl}`);
240
+ }
241
+ const after = withNewGoals(state, []);
242
+ return recordHistory(state, after, 'rfl', []);
243
+ };
244
+ }
245
+ // ---------- trivial ----------
246
+ // Cierra goals obvios: True, o conclusión equivalente a una hipótesis True.
247
+ function trivial() {
248
+ return (state) => {
249
+ const goal = activeGoal(state, 'trivial');
250
+ const f = (0, types_1.parseFormula)(goal.concl);
251
+ if (f.kind === 'true') {
252
+ const after = withNewGoals(state, []);
253
+ return recordHistory(state, after, 'trivial', []);
254
+ }
255
+ // True ∈ hyps no cierra ningún goal, pero si hay False en hyps, ex falso:
256
+ for (const ty of Object.values(goal.hyps)) {
257
+ const hf = (0, types_1.parseFormula)(ty);
258
+ if (hf.kind === 'false') {
259
+ const after = withNewGoals(state, []);
260
+ return recordHistory(state, after, 'trivial', ['ex_falso']);
261
+ }
262
+ }
263
+ throw new types_1.TacticError('trivial', `goal '${goal.concl}' no es trivialmente cierto`);
264
+ };
265
+ }
266
+ // ---------- split ----------
267
+ // ∧-intro: goal `P /\ Q` produce dos sub-goals `P` y `Q`.
268
+ function split() {
269
+ return (state) => {
270
+ const goal = activeGoal(state, 'split');
271
+ const f = (0, types_1.parseFormula)(goal.concl);
272
+ if (f.kind !== 'and') {
273
+ throw new types_1.TacticError('split', `goal no es conjunción: ${goal.concl}`);
274
+ }
275
+ const subs = [
276
+ { id: freshGoalId(goal.id + '_L'), hyps: { ...goal.hyps }, concl: (0, types_1.formulaToString)(f.left) },
277
+ { id: freshGoalId(goal.id + '_R'), hyps: { ...goal.hyps }, concl: (0, types_1.formulaToString)(f.right) },
278
+ ];
279
+ const after = withNewGoals(state, subs);
280
+ return recordHistory(state, after, 'split', []);
281
+ };
282
+ }
283
+ // ---------- left / right ----------
284
+ // ∨-intro: goal `P \/ Q` deja sub-goal `P` (left) o `Q` (right).
285
+ function left() {
286
+ return (state) => {
287
+ const goal = activeGoal(state, 'left');
288
+ const f = (0, types_1.parseFormula)(goal.concl);
289
+ if (f.kind !== 'or') {
290
+ throw new types_1.TacticError('left', `goal no es disyunción: ${goal.concl}`);
291
+ }
292
+ const sub = { id: goal.id, hyps: { ...goal.hyps }, concl: (0, types_1.formulaToString)(f.left) };
293
+ const after = withNewGoals(state, [sub]);
294
+ return recordHistory(state, after, 'left', []);
295
+ };
296
+ }
297
+ function right() {
298
+ return (state) => {
299
+ const goal = activeGoal(state, 'right');
300
+ const f = (0, types_1.parseFormula)(goal.concl);
301
+ if (f.kind !== 'or') {
302
+ throw new types_1.TacticError('right', `goal no es disyunción: ${goal.concl}`);
303
+ }
304
+ const sub = { id: goal.id, hyps: { ...goal.hyps }, concl: (0, types_1.formulaToString)(f.right) };
305
+ const after = withNewGoals(state, [sub]);
306
+ return recordHistory(state, after, 'right', []);
307
+ };
308
+ }
309
+ // ---------- destruct ----------
310
+ // Caso por hipótesis. Para `H: P /\ Q` desglosa en dos hipótesis `H_L:P`,
311
+ // `H_R:Q` en el mismo goal. Para `H: P \/ Q` produce dos sub-goals
312
+ // (cada uno con la hipótesis correspondiente). Para `H: P -> Q` no aplica.
313
+ function destruct(name) {
314
+ return (state) => {
315
+ const goal = activeGoal(state, 'destruct');
316
+ const hypType = goal.hyps[name];
317
+ if (hypType === undefined) {
318
+ throw new types_1.TacticError('destruct', `'${name}' no está en hipótesis`);
319
+ }
320
+ const f = (0, types_1.parseFormula)(hypType);
321
+ if (f.kind === 'and') {
322
+ const next = { ...goal.hyps };
323
+ delete next[name];
324
+ next[`${name}_L`] = (0, types_1.formulaToString)(f.left);
325
+ next[`${name}_R`] = (0, types_1.formulaToString)(f.right);
326
+ const newGoal = { id: goal.id, hyps: next, concl: goal.concl };
327
+ const after = withNewGoals(state, [newGoal]);
328
+ return recordHistory(state, after, 'destruct', [name]);
329
+ }
330
+ if (f.kind === 'or') {
331
+ const baseHyps = { ...goal.hyps };
332
+ delete baseHyps[name];
333
+ const left = {
334
+ id: freshGoalId(goal.id + '_L'),
335
+ hyps: { ...baseHyps, [`${name}_L`]: (0, types_1.formulaToString)(f.left) },
336
+ concl: goal.concl,
337
+ };
338
+ const right = {
339
+ id: freshGoalId(goal.id + '_R'),
340
+ hyps: { ...baseHyps, [`${name}_R`]: (0, types_1.formulaToString)(f.right) },
341
+ concl: goal.concl,
342
+ };
343
+ const after = withNewGoals(state, [left, right]);
344
+ return recordHistory(state, after, 'destruct', [name]);
345
+ }
346
+ if (f.kind === 'false') {
347
+ const after = withNewGoals(state, []);
348
+ return recordHistory(state, after, 'destruct', [name, 'ex_falso']);
349
+ }
350
+ throw new types_1.TacticError('destruct', `'${name}:${hypType}' no es ∧, ∨, ni ⊥ — no se puede destructurar`);
351
+ };
352
+ }
353
+ // ---------- induction ----------
354
+ // Esquema mínimo sobre Nat. Para una hipótesis `n: Nat`, produce dos goals:
355
+ // zero-case: concl[n := zero]
356
+ // succ-case: hyps ∪ { IH: concl[n := k] }, concl[n := succ(k)]
357
+ // El user puede declarar otros tipos de inducción registrándolos antes,
358
+ // pero la versión base sólo cubre Nat.
359
+ function induction(name) {
360
+ return (state) => {
361
+ const goal = activeGoal(state, 'induction');
362
+ const hypType = goal.hyps[name];
363
+ if (hypType === undefined) {
364
+ throw new types_1.TacticError('induction', `'${name}' no está en hipótesis`);
365
+ }
366
+ if (hypType !== 'Nat' && hypType !== 'nat' && hypType !== 'ℕ') {
367
+ throw new types_1.TacticError('induction', `inducción soportada solo sobre Nat (recibió '${name}:${hypType}')`);
368
+ }
369
+ // hipótesis sin el nombre del inductor.
370
+ const baseHyps = { ...goal.hyps };
371
+ delete baseHyps[name];
372
+ // Reusamos `name` como el binder del caso sucesor cuando es posible
373
+ // (queda libre tras retirar la hipótesis del inductor). Esto da goals
374
+ // legibles tipo `P(succ(n))` en vez de `P(succ(n1))`.
375
+ const zeroConcl = (0, types_1.substitute)(goal.concl, name, 'zero');
376
+ const succVar = pickFreshVar(baseHyps, name);
377
+ const succConcl = (0, types_1.substitute)(goal.concl, name, `succ(${succVar})`);
378
+ const ihConcl = (0, types_1.substitute)(goal.concl, name, succVar);
379
+ const zeroGoal = {
380
+ id: freshGoalId(goal.id + '_zero'),
381
+ hyps: { ...baseHyps },
382
+ concl: (0, types_1.normalizeFormula)(zeroConcl),
383
+ };
384
+ const succGoal = {
385
+ id: freshGoalId(goal.id + '_succ'),
386
+ hyps: { ...baseHyps, [succVar]: 'Nat', IH: (0, types_1.normalizeFormula)(ihConcl) },
387
+ concl: (0, types_1.normalizeFormula)(succConcl),
388
+ };
389
+ const after = withNewGoals(state, [zeroGoal, succGoal]);
390
+ return recordHistory(state, after, 'induction', [name]);
391
+ };
392
+ }
393
+ function pickFreshVar(hyps, hint) {
394
+ if (hyps[hint] === undefined)
395
+ return hint;
396
+ let i = 1;
397
+ while (hyps[`${hint}${i}`] !== undefined)
398
+ i++;
399
+ return `${hint}${i}`;
400
+ }
401
+ // ---------- case ----------
402
+ // Alias de `destruct` con semántica explícita de "análisis por casos".
403
+ // Mantenemos el nombre `case` por afinidad con Coq pero el constructor
404
+ // JS reservado nos obliga a usar `caseAnalysis`/`caseT`. Exportamos
405
+ // como `case` desde index via re-export con alias.
406
+ function caseAnalysis(name) {
407
+ return destruct(name);
408
+ }
409
+ function unfold(def, dict = {}) {
410
+ return (state) => {
411
+ const goal = activeGoal(state, 'unfold');
412
+ const body = dict[def];
413
+ if (body === undefined) {
414
+ throw new types_1.TacticError('unfold', `definición '${def}' no registrada`);
415
+ }
416
+ const newConcl = (0, types_1.substitute)(goal.concl, def, body);
417
+ if (newConcl === goal.concl) {
418
+ throw new types_1.TacticError('unfold', `'${def}' no aparece en goal`);
419
+ }
420
+ const newGoal = {
421
+ id: goal.id,
422
+ hyps: { ...goal.hyps },
423
+ concl: (0, types_1.normalizeFormula)(newConcl),
424
+ };
425
+ const after = withNewGoals(state, [newGoal]);
426
+ return recordHistory(state, after, 'unfold', [def]);
427
+ };
428
+ }
429
+ // ---------- simp ----------
430
+ // Simplificación rudimentaria:
431
+ // True /\ X → X
432
+ // X /\ True → X
433
+ // False \/ X → X
434
+ // X \/ False → X
435
+ // ~~X → X
436
+ // Se aplica recursivamente hasta punto fijo. Si no cambia nada, falla.
437
+ function simp() {
438
+ return (state) => {
439
+ const goal = activeGoal(state, 'simp');
440
+ const original = (0, types_1.normalizeFormula)(goal.concl);
441
+ let cur = (0, types_1.parseFormula)(goal.concl);
442
+ let changed = true;
443
+ let safety = 0;
444
+ while (changed) {
445
+ changed = false;
446
+ safety++;
447
+ if (safety > 100)
448
+ break;
449
+ const before = (0, types_1.formulaToString)(cur);
450
+ cur = simpStep(cur, () => {
451
+ changed = true;
452
+ });
453
+ if ((0, types_1.formulaToString)(cur) !== before)
454
+ changed = true;
455
+ }
456
+ const next = (0, types_1.formulaToString)(cur);
457
+ if (next === original) {
458
+ throw new types_1.TacticError('simp', `nada que simplificar en '${goal.concl}'`);
459
+ }
460
+ const newGoal = { id: goal.id, hyps: { ...goal.hyps }, concl: next };
461
+ const after = withNewGoals(state, [newGoal]);
462
+ return recordHistory(state, after, 'simp', []);
463
+ };
464
+ }
465
+ function simpStep(f, mark) {
466
+ switch (f.kind) {
467
+ case 'atom':
468
+ case 'true':
469
+ case 'false':
470
+ return f;
471
+ case 'not': {
472
+ const inner = simpStep(f.body, mark);
473
+ if (inner.kind === 'not') {
474
+ mark();
475
+ return inner.body;
476
+ }
477
+ return { kind: 'not', body: inner };
478
+ }
479
+ case 'and': {
480
+ const L = simpStep(f.left, mark);
481
+ const R = simpStep(f.right, mark);
482
+ if (L.kind === 'true') {
483
+ mark();
484
+ return R;
485
+ }
486
+ if (R.kind === 'true') {
487
+ mark();
488
+ return L;
489
+ }
490
+ if (L.kind === 'false' || R.kind === 'false') {
491
+ mark();
492
+ return { kind: 'false' };
493
+ }
494
+ return { kind: 'and', left: L, right: R };
495
+ }
496
+ case 'or': {
497
+ const L = simpStep(f.left, mark);
498
+ const R = simpStep(f.right, mark);
499
+ if (L.kind === 'false') {
500
+ mark();
501
+ return R;
502
+ }
503
+ if (R.kind === 'false') {
504
+ mark();
505
+ return L;
506
+ }
507
+ if (L.kind === 'true' || R.kind === 'true') {
508
+ mark();
509
+ return { kind: 'true' };
510
+ }
511
+ return { kind: 'or', left: L, right: R };
512
+ }
513
+ case 'imp': {
514
+ const L = simpStep(f.left, mark);
515
+ const R = simpStep(f.right, mark);
516
+ if (L.kind === 'true') {
517
+ mark();
518
+ return R;
519
+ }
520
+ if (R.kind === 'true') {
521
+ mark();
522
+ return { kind: 'true' };
523
+ }
524
+ if (L.kind === 'false') {
525
+ mark();
526
+ return { kind: 'true' };
527
+ }
528
+ return { kind: 'imp', left: L, right: R };
529
+ }
530
+ case 'eq': {
531
+ // intentionally leave equality untouched: it requires semantic info.
532
+ return f;
533
+ }
534
+ }
535
+ }
536
+ //# sourceMappingURL=tactics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tactics.js","sourceRoot":"","sources":["../../src/tactic-dsl/tactics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export type Formula = {
2
+ kind: 'atom';
3
+ name: string;
4
+ } | {
5
+ kind: 'true';
6
+ } | {
7
+ kind: 'false';
8
+ } | {
9
+ kind: 'not';
10
+ body: Formula;
11
+ } | {
12
+ kind: 'and';
13
+ left: Formula;
14
+ right: Formula;
15
+ } | {
16
+ kind: 'or';
17
+ left: Formula;
18
+ right: Formula;
19
+ } | {
20
+ kind: 'imp';
21
+ left: Formula;
22
+ right: Formula;
23
+ } | {
24
+ kind: 'eq';
25
+ left: Formula;
26
+ right: Formula;
27
+ };
28
+ export interface Goal {
29
+ id: string;
30
+ hyps: Record<string, string>;
31
+ concl: string;
32
+ }
33
+ export interface ProofState {
34
+ goals: Goal[];
35
+ history: TacticInvocation[];
36
+ done: boolean;
37
+ }
38
+ export interface TacticInvocation {
39
+ tactic: string;
40
+ args: unknown[];
41
+ before: ProofState;
42
+ after: ProofState;
43
+ }
44
+ export type Tactic = (state: ProofState) => ProofState;
45
+ export declare class TacticError extends Error {
46
+ tactic: string;
47
+ constructor(tactic: string, message: string);
48
+ }
49
+ export declare function parseFormula(src: string): Formula;
50
+ export declare function formulaToString(f: Formula): string;
51
+ export declare function normalizeFormula(src: string): string;
52
+ export declare function formulaEq(a: string, b: string): boolean;
53
+ export declare function substitute(target: string, lhs: string, rhs: string): string;
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tactic-dsl/types.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAElD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;AAEvD,qBAAa,WAAY,SAAQ,KAAK;IAE3B,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAyID,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQjD;AAOD,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAmBlD;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvD;AASD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAS3E"}