@stevenvo780/st-lang 4.4.0 → 4.5.1

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 (158) hide show
  1. package/README.md +78 -37
  2. package/dist/coinduction/index.d.ts +136 -0
  3. package/dist/coinduction/index.d.ts.map +1 -0
  4. package/dist/coinduction/index.js +318 -0
  5. package/dist/coinduction/index.js.map +1 -0
  6. package/dist/combinators-ski/abstract.d.ts +5 -0
  7. package/dist/combinators-ski/abstract.d.ts.map +1 -0
  8. package/dist/combinators-ski/abstract.js +88 -0
  9. package/dist/combinators-ski/abstract.js.map +1 -0
  10. package/dist/combinators-ski/index.d.ts +6 -0
  11. package/dist/combinators-ski/index.d.ts.map +1 -0
  12. package/dist/combinators-ski/index.js +30 -0
  13. package/dist/combinators-ski/index.js.map +1 -0
  14. package/dist/combinators-ski/reduce.d.ts +10 -0
  15. package/dist/combinators-ski/reduce.d.ts.map +1 -0
  16. package/dist/combinators-ski/reduce.js +118 -0
  17. package/dist/combinators-ski/reduce.js.map +1 -0
  18. package/dist/combinators-ski/types.d.ts +23 -0
  19. package/dist/combinators-ski/types.d.ts.map +1 -0
  20. package/dist/combinators-ski/types.js +102 -0
  21. package/dist/combinators-ski/types.js.map +1 -0
  22. package/dist/constructive-reals/index.d.ts +132 -0
  23. package/dist/constructive-reals/index.d.ts.map +1 -0
  24. package/dist/constructive-reals/index.js +723 -0
  25. package/dist/constructive-reals/index.js.map +1 -0
  26. package/dist/game-semantics/convert.d.ts +4 -0
  27. package/dist/game-semantics/convert.d.ts.map +1 -0
  28. package/dist/game-semantics/convert.js +28 -0
  29. package/dist/game-semantics/convert.js.map +1 -0
  30. package/dist/game-semantics/index.d.ts +6 -0
  31. package/dist/game-semantics/index.d.ts.map +1 -0
  32. package/dist/game-semantics/index.js +28 -0
  33. package/dist/game-semantics/index.js.map +1 -0
  34. package/dist/game-semantics/strategy.d.ts +34 -0
  35. package/dist/game-semantics/strategy.d.ts.map +1 -0
  36. package/dist/game-semantics/strategy.js +336 -0
  37. package/dist/game-semantics/strategy.js.map +1 -0
  38. package/dist/game-semantics/types.d.ts +64 -0
  39. package/dist/game-semantics/types.d.ts.map +1 -0
  40. package/dist/game-semantics/types.js +78 -0
  41. package/dist/game-semantics/types.js.map +1 -0
  42. package/dist/higher-order-unify/index.d.ts +5 -0
  43. package/dist/higher-order-unify/index.d.ts.map +1 -0
  44. package/dist/higher-order-unify/index.js +27 -0
  45. package/dist/higher-order-unify/index.js.map +1 -0
  46. package/dist/higher-order-unify/normalize.d.ts +14 -0
  47. package/dist/higher-order-unify/normalize.d.ts.map +1 -0
  48. package/dist/higher-order-unify/normalize.js +191 -0
  49. package/dist/higher-order-unify/normalize.js.map +1 -0
  50. package/dist/higher-order-unify/pattern.d.ts +4 -0
  51. package/dist/higher-order-unify/pattern.d.ts.map +1 -0
  52. package/dist/higher-order-unify/pattern.js +70 -0
  53. package/dist/higher-order-unify/pattern.js.map +1 -0
  54. package/dist/higher-order-unify/types.d.ts +19 -0
  55. package/dist/higher-order-unify/types.d.ts.map +1 -0
  56. package/dist/higher-order-unify/types.js +14 -0
  57. package/dist/higher-order-unify/types.js.map +1 -0
  58. package/dist/higher-order-unify/unify.d.ts +5 -0
  59. package/dist/higher-order-unify/unify.d.ts.map +1 -0
  60. package/dist/higher-order-unify/unify.js +306 -0
  61. package/dist/higher-order-unify/unify.js.map +1 -0
  62. package/dist/index.d.ts +10 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +40 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/nbe/index.d.ts +3 -0
  67. package/dist/nbe/index.d.ts.map +1 -0
  68. package/dist/nbe/index.js +25 -0
  69. package/dist/nbe/index.js.map +1 -0
  70. package/dist/nbe/nbe.d.ts +7 -0
  71. package/dist/nbe/nbe.d.ts.map +1 -0
  72. package/dist/nbe/nbe.js +118 -0
  73. package/dist/nbe/nbe.js.map +1 -0
  74. package/dist/nbe/types.d.ts +54 -0
  75. package/dist/nbe/types.d.ts.map +1 -0
  76. package/dist/nbe/types.js +117 -0
  77. package/dist/nbe/types.js.map +1 -0
  78. package/dist/profile-bridge/index.d.ts +64 -0
  79. package/dist/profile-bridge/index.d.ts.map +1 -0
  80. package/dist/profile-bridge/index.js +328 -0
  81. package/dist/profile-bridge/index.js.map +1 -0
  82. package/dist/proof-nets/construct.d.ts +3 -0
  83. package/dist/proof-nets/construct.d.ts.map +1 -0
  84. package/dist/proof-nets/construct.js +85 -0
  85. package/dist/proof-nets/construct.js.map +1 -0
  86. package/dist/proof-nets/correctness.d.ts +3 -0
  87. package/dist/proof-nets/correctness.d.ts.map +1 -0
  88. package/dist/proof-nets/correctness.js +213 -0
  89. package/dist/proof-nets/correctness.js.map +1 -0
  90. package/dist/proof-nets/cut-elim.d.ts +9 -0
  91. package/dist/proof-nets/cut-elim.d.ts.map +1 -0
  92. package/dist/proof-nets/cut-elim.js +149 -0
  93. package/dist/proof-nets/cut-elim.js.map +1 -0
  94. package/dist/proof-nets/index.d.ts +6 -0
  95. package/dist/proof-nets/index.d.ts.map +1 -0
  96. package/dist/proof-nets/index.js +33 -0
  97. package/dist/proof-nets/index.js.map +1 -0
  98. package/dist/proof-nets/types.d.ts +36 -0
  99. package/dist/proof-nets/types.d.ts.map +1 -0
  100. package/dist/proof-nets/types.js +89 -0
  101. package/dist/proof-nets/types.js.map +1 -0
  102. package/dist/tableau-framework/TableauProver.d.ts +10 -0
  103. package/dist/tableau-framework/TableauProver.d.ts.map +1 -0
  104. package/dist/tableau-framework/TableauProver.js +118 -0
  105. package/dist/tableau-framework/TableauProver.js.map +1 -0
  106. package/dist/tableau-framework/index.d.ts +5 -0
  107. package/dist/tableau-framework/index.d.ts.map +1 -0
  108. package/dist/tableau-framework/index.js +11 -0
  109. package/dist/tableau-framework/index.js.map +1 -0
  110. package/dist/tableau-framework/propositional.d.ts +11 -0
  111. package/dist/tableau-framework/propositional.d.ts.map +1 -0
  112. package/dist/tableau-framework/propositional.js +143 -0
  113. package/dist/tableau-framework/propositional.js.map +1 -0
  114. package/dist/tableau-framework/types.d.ts +32 -0
  115. package/dist/tableau-framework/types.d.ts.map +1 -0
  116. package/dist/tableau-framework/types.js +6 -0
  117. package/dist/tableau-framework/types.js.map +1 -0
  118. package/dist/tests/coinduction/coinduction.test.d.ts +2 -0
  119. package/dist/tests/coinduction/coinduction.test.d.ts.map +1 -0
  120. package/dist/tests/coinduction/coinduction.test.js +217 -0
  121. package/dist/tests/coinduction/coinduction.test.js.map +1 -0
  122. package/dist/tests/combinators-ski/combinators-ski.test.d.ts +2 -0
  123. package/dist/tests/combinators-ski/combinators-ski.test.d.ts.map +1 -0
  124. package/dist/tests/combinators-ski/combinators-ski.test.js +211 -0
  125. package/dist/tests/combinators-ski/combinators-ski.test.js.map +1 -0
  126. package/dist/tests/constructive-reals/constructive-reals.test.d.ts +2 -0
  127. package/dist/tests/constructive-reals/constructive-reals.test.d.ts.map +1 -0
  128. package/dist/tests/constructive-reals/constructive-reals.test.js +357 -0
  129. package/dist/tests/constructive-reals/constructive-reals.test.js.map +1 -0
  130. package/dist/tests/game-semantics/game-semantics.test.d.ts +2 -0
  131. package/dist/tests/game-semantics/game-semantics.test.d.ts.map +1 -0
  132. package/dist/tests/game-semantics/game-semantics.test.js +143 -0
  133. package/dist/tests/game-semantics/game-semantics.test.js.map +1 -0
  134. package/dist/tests/higher-order-unify/ho-unify.test.d.ts +2 -0
  135. package/dist/tests/higher-order-unify/ho-unify.test.d.ts.map +1 -0
  136. package/dist/tests/higher-order-unify/ho-unify.test.js +264 -0
  137. package/dist/tests/higher-order-unify/ho-unify.test.js.map +1 -0
  138. package/dist/tests/integration/cross-modules.test.d.ts +8 -0
  139. package/dist/tests/integration/cross-modules.test.d.ts.map +1 -0
  140. package/dist/tests/integration/cross-modules.test.js +668 -0
  141. package/dist/tests/integration/cross-modules.test.js.map +1 -0
  142. package/dist/tests/nbe/nbe.test.d.ts +2 -0
  143. package/dist/tests/nbe/nbe.test.d.ts.map +1 -0
  144. package/dist/tests/nbe/nbe.test.js +121 -0
  145. package/dist/tests/nbe/nbe.test.js.map +1 -0
  146. package/dist/tests/profile-bridge/translations.test.d.ts +2 -0
  147. package/dist/tests/profile-bridge/translations.test.d.ts.map +1 -0
  148. package/dist/tests/profile-bridge/translations.test.js +266 -0
  149. package/dist/tests/profile-bridge/translations.test.js.map +1 -0
  150. package/dist/tests/proof-nets/proof-nets.test.d.ts +2 -0
  151. package/dist/tests/proof-nets/proof-nets.test.d.ts.map +1 -0
  152. package/dist/tests/proof-nets/proof-nets.test.js +263 -0
  153. package/dist/tests/proof-nets/proof-nets.test.js.map +1 -0
  154. package/dist/tests/tableau-framework/tableau.test.d.ts +2 -0
  155. package/dist/tests/tableau-framework/tableau.test.d.ts.map +1 -0
  156. package/dist/tests/tableau-framework/tableau.test.js +196 -0
  157. package/dist/tests/tableau-framework/tableau.test.js.map +1 -0
  158. package/package.json +2 -1
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Game semantics para IPC — Tipos
4
+ // ============================================================
5
+ //
6
+ // Juegos dialógicos al estilo Lorenzen (1958) / Felscher (1985):
7
+ // dos jugadores debaten una fórmula. El Proponente (P) la afirma;
8
+ // el Oponente (O) la ataca. Una fórmula es válida en IPC sii P
9
+ // tiene una estrategia ganadora bajo las reglas estructurales
10
+ // intuicionistas. (Lorenzen, Felscher: equivalencia con NJ.)
11
+ //
12
+ // ADT pública pedida por el spec (sin `not` explícito; `¬φ` se
13
+ // modela como `φ → ⊥`). La conversión a/desde otras
14
+ // representaciones de fórmulas vive en `convert.ts`.
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ipcNot = exports.ipcImplies = exports.ipcOr = exports.ipcAnd = exports.ipcBottom = exports.ipcAtom = void 0;
17
+ exports.ipcKey = ipcKey;
18
+ exports.ipcEquals = ipcEquals;
19
+ exports.ipcToString = ipcToString;
20
+ // ---------- constructores ergonómicos ----------
21
+ const ipcAtom = (name) => ({ kind: 'atom', name });
22
+ exports.ipcAtom = ipcAtom;
23
+ const ipcBottom = () => ({ kind: 'bottom' });
24
+ exports.ipcBottom = ipcBottom;
25
+ const ipcAnd = (left, right) => ({
26
+ kind: 'and',
27
+ left,
28
+ right,
29
+ });
30
+ exports.ipcAnd = ipcAnd;
31
+ const ipcOr = (left, right) => ({
32
+ kind: 'or',
33
+ left,
34
+ right,
35
+ });
36
+ exports.ipcOr = ipcOr;
37
+ const ipcImplies = (left, right) => ({
38
+ kind: 'implies',
39
+ left,
40
+ right,
41
+ });
42
+ exports.ipcImplies = ipcImplies;
43
+ /** Azúcar: `¬φ` = `φ → ⊥`. Útil para tests pedagógicos. */
44
+ const ipcNot = (arg) => (0, exports.ipcImplies)(arg, (0, exports.ipcBottom)());
45
+ exports.ipcNot = ipcNot;
46
+ // ---------- igualdad y clave ----------
47
+ function ipcKey(f) {
48
+ switch (f.kind) {
49
+ case 'atom':
50
+ return `A(${f.name})`;
51
+ case 'bottom':
52
+ return '⊥';
53
+ case 'and':
54
+ return `&(${ipcKey(f.left)},${ipcKey(f.right)})`;
55
+ case 'or':
56
+ return `|(${ipcKey(f.left)},${ipcKey(f.right)})`;
57
+ case 'implies':
58
+ return `>(${ipcKey(f.left)},${ipcKey(f.right)})`;
59
+ }
60
+ }
61
+ function ipcEquals(a, b) {
62
+ return ipcKey(a) === ipcKey(b);
63
+ }
64
+ function ipcToString(f) {
65
+ switch (f.kind) {
66
+ case 'atom':
67
+ return f.name;
68
+ case 'bottom':
69
+ return '⊥';
70
+ case 'and':
71
+ return `(${ipcToString(f.left)} ∧ ${ipcToString(f.right)})`;
72
+ case 'or':
73
+ return `(${ipcToString(f.left)} ∨ ${ipcToString(f.right)})`;
74
+ case 'implies':
75
+ return `(${ipcToString(f.left)} → ${ipcToString(f.right)})`;
76
+ }
77
+ }
78
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/game-semantics/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { HOTerm, HOSubst } from './types';
2
+ export { isPattern, isHigherOrderPattern } from './pattern';
3
+ export { unifyPattern, unifyMetaApp, buildLambdaBinding } from './unify';
4
+ export { applyHOSubst, normalize, freeVarsHO, freshName, resetFreshCounter } from './normalize';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/higher-order-unify/index.ts"],"names":[],"mappings":"AAWA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Higher-order unification (Miller 1991) — Punto de entrada público
4
+ // ============================================================
5
+ //
6
+ // API:
7
+ // - HOTerm, HOSubst (tipos)
8
+ // - isPattern / isHigherOrderPattern (detección de patrón)
9
+ // - unifyPattern (unificación MGU decidible)
10
+ // - applyHOSubst (aplicar sustitución con β-reducción)
11
+ // - normalize (β-normalización leftmost-outermost)
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.resetFreshCounter = exports.freshName = exports.freeVarsHO = exports.normalize = exports.applyHOSubst = exports.buildLambdaBinding = exports.unifyMetaApp = exports.unifyPattern = exports.isHigherOrderPattern = exports.isPattern = void 0;
14
+ var pattern_1 = require("./pattern");
15
+ Object.defineProperty(exports, "isPattern", { enumerable: true, get: function () { return pattern_1.isPattern; } });
16
+ Object.defineProperty(exports, "isHigherOrderPattern", { enumerable: true, get: function () { return pattern_1.isHigherOrderPattern; } });
17
+ var unify_1 = require("./unify");
18
+ Object.defineProperty(exports, "unifyPattern", { enumerable: true, get: function () { return unify_1.unifyPattern; } });
19
+ Object.defineProperty(exports, "unifyMetaApp", { enumerable: true, get: function () { return unify_1.unifyMetaApp; } });
20
+ Object.defineProperty(exports, "buildLambdaBinding", { enumerable: true, get: function () { return unify_1.buildLambdaBinding; } });
21
+ var normalize_1 = require("./normalize");
22
+ Object.defineProperty(exports, "applyHOSubst", { enumerable: true, get: function () { return normalize_1.applyHOSubst; } });
23
+ Object.defineProperty(exports, "normalize", { enumerable: true, get: function () { return normalize_1.normalize; } });
24
+ Object.defineProperty(exports, "freeVarsHO", { enumerable: true, get: function () { return normalize_1.freeVarsHO; } });
25
+ Object.defineProperty(exports, "freshName", { enumerable: true, get: function () { return normalize_1.freshName; } });
26
+ Object.defineProperty(exports, "resetFreshCounter", { enumerable: true, get: function () { return normalize_1.resetFreshCounter; } });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/higher-order-unify/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,oEAAoE;AACpE,+DAA+D;AAC/D,EAAE;AACF,OAAO;AACP,8BAA8B;AAC9B,6DAA6D;AAC7D,gDAAgD;AAChD,0DAA0D;AAC1D,yDAAyD;;;AAIzD,qCAA4D;AAAnD,oGAAA,SAAS,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAExC,iCAAyE;AAAhE,qGAAA,YAAY,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,2GAAA,kBAAkB,OAAA;AAEvD,yCAAgG;AAAvF,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,8GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,14 @@
1
+ import type { HOTerm, HOSubst } from './types';
2
+ export declare function freeVarsHO(t: HOTerm): Set<string>;
3
+ export declare function allNamesHO(t: HOTerm, acc?: Set<string>): Set<string>;
4
+ export declare function freshName(avoid: Set<string>, base?: string): string;
5
+ export declare function resetFreshCounter(): void;
6
+ export declare function substituteHO(t: HOTerm, varName: string, replacement: HOTerm): HOTerm;
7
+ export declare function applyHOSubst(t: HOTerm, subst: HOSubst): HOTerm;
8
+ export declare function normalize(t: HOTerm): HOTerm;
9
+ declare function flattenApp(t: HOTerm): {
10
+ fn: HOTerm;
11
+ args: HOTerm[];
12
+ };
13
+ export { flattenApp };
14
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/higher-order-unify/normalize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAI/C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAIjD;AAsBD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAgB/E;AAMD,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,SAAO,GAAG,MAAM,CAMjE;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAID,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAGpF;AA8BD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAiB9D;AAmBD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3C;AAyCD,iBAAS,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAQ7D;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Higher-order unification — β-normalización y sustitución
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.freeVarsHO = freeVarsHO;
7
+ exports.allNamesHO = allNamesHO;
8
+ exports.freshName = freshName;
9
+ exports.resetFreshCounter = resetFreshCounter;
10
+ exports.substituteHO = substituteHO;
11
+ exports.applyHOSubst = applyHOSubst;
12
+ exports.normalize = normalize;
13
+ exports.flattenApp = flattenApp;
14
+ // ---- Variables libres y ligadas ----
15
+ function freeVarsHO(t) {
16
+ const acc = new Set();
17
+ collectFreeHO(t, new Set(), acc);
18
+ return acc;
19
+ }
20
+ function collectFreeHO(t, bound, acc) {
21
+ switch (t.kind) {
22
+ case 'var':
23
+ if (!bound.has(t.name))
24
+ acc.add(t.name);
25
+ return;
26
+ case 'meta':
27
+ return;
28
+ case 'abs': {
29
+ const b2 = new Set(bound);
30
+ b2.add(t.param);
31
+ collectFreeHO(t.body, b2, acc);
32
+ return;
33
+ }
34
+ case 'app':
35
+ collectFreeHO(t.fn, bound, acc);
36
+ for (const a of t.args)
37
+ collectFreeHO(a, bound, acc);
38
+ return;
39
+ }
40
+ }
41
+ function allNamesHO(t, acc = new Set()) {
42
+ switch (t.kind) {
43
+ case 'var':
44
+ acc.add(t.name);
45
+ return acc;
46
+ case 'meta':
47
+ return acc;
48
+ case 'abs':
49
+ acc.add(t.param);
50
+ allNamesHO(t.body, acc);
51
+ return acc;
52
+ case 'app':
53
+ allNamesHO(t.fn, acc);
54
+ for (const a of t.args)
55
+ allNamesHO(a, acc);
56
+ return acc;
57
+ }
58
+ }
59
+ // ---- Generador de nombres frescos ----
60
+ let _freshCounter = 0;
61
+ function freshName(avoid, base = '_h') {
62
+ let name;
63
+ do {
64
+ name = `${base}${_freshCounter++}`;
65
+ } while (avoid.has(name));
66
+ return name;
67
+ }
68
+ function resetFreshCounter() {
69
+ _freshCounter = 0;
70
+ }
71
+ // ---- Sustitución capture-avoiding en HOTerm ----
72
+ function substituteHO(t, varName, replacement) {
73
+ const fvRep = freeVarsHO(replacement);
74
+ return substHO(t, varName, replacement, fvRep);
75
+ }
76
+ function substHO(t, name, value, fvVal) {
77
+ switch (t.kind) {
78
+ case 'var':
79
+ return t.name === name ? value : t;
80
+ case 'meta':
81
+ return t;
82
+ case 'abs': {
83
+ if (t.param === name)
84
+ return t;
85
+ if (!fvVal.has(t.param)) {
86
+ return { kind: 'abs', param: t.param, body: substHO(t.body, name, value, fvVal) };
87
+ }
88
+ const avoid = new Set([...fvVal, ...allNamesHO(t.body)]);
89
+ avoid.add(name);
90
+ const fresh = freshName(avoid, t.param);
91
+ const renamedBody = substHO(t.body, t.param, { kind: 'var', name: fresh }, new Set([fresh]));
92
+ return { kind: 'abs', param: fresh, body: substHO(renamedBody, name, value, fvVal) };
93
+ }
94
+ case 'app':
95
+ return {
96
+ kind: 'app',
97
+ fn: substHO(t.fn, name, value, fvVal),
98
+ args: t.args.map((a) => substHO(a, name, value, fvVal)),
99
+ };
100
+ }
101
+ }
102
+ // ---- Aplicación de sustitución de meta-variables ----
103
+ function applyHOSubst(t, subst) {
104
+ switch (t.kind) {
105
+ case 'var':
106
+ return t;
107
+ case 'meta': {
108
+ const binding = subst[t.name];
109
+ return binding !== undefined ? applyHOSubst(binding, subst) : t;
110
+ }
111
+ case 'abs':
112
+ return { kind: 'abs', param: t.param, body: applyHOSubst(t.body, subst) };
113
+ case 'app': {
114
+ const fn = applyHOSubst(t.fn, subst);
115
+ const args = t.args.map((a) => applyHOSubst(a, subst));
116
+ // β-reduce en cabeza si es posible tras expandir meta
117
+ return betaReduceHead({ kind: 'app', fn, args });
118
+ }
119
+ }
120
+ }
121
+ // β-reducción en la cabeza (un solo paso si corresponde).
122
+ function betaReduceHead(t) {
123
+ if (t.args.length === 0)
124
+ return t.fn;
125
+ let result = t.fn;
126
+ for (const arg of t.args) {
127
+ if (result.kind === 'abs') {
128
+ result = substituteHO(result.body, result.param, arg);
129
+ }
130
+ else {
131
+ // No podemos reducir más; reconstruir app parcial
132
+ return { kind: 'app', fn: result, args: t.args.slice(t.args.indexOf(arg)) };
133
+ }
134
+ }
135
+ return result;
136
+ }
137
+ // ---- Normalización β (leftmost-outermost, aplana apps) ----
138
+ function normalize(t) {
139
+ const t2 = normalizeStep(t);
140
+ return t2 === null ? t : normalize(t2);
141
+ }
142
+ function normalizeStep(t) {
143
+ switch (t.kind) {
144
+ case 'var':
145
+ case 'meta':
146
+ return null;
147
+ case 'abs': {
148
+ const b2 = normalizeStep(t.body);
149
+ return b2 === null ? null : { kind: 'abs', param: t.param, body: b2 };
150
+ }
151
+ case 'app': {
152
+ // Aplana args (app (app f [a,b]) [c]) → app f [a,b,c])
153
+ const flat = flattenApp(t);
154
+ const fn = flat.fn;
155
+ const args = flat.args;
156
+ // β-redex: cabeza es abs
157
+ if (fn.kind === 'abs' && args.length > 0) {
158
+ const [first, ...rest] = args;
159
+ const reduced = substituteHO(fn.body, fn.param, first);
160
+ const next = rest.length === 0 ? reduced : { kind: 'app', fn: reduced, args: rest };
161
+ return next;
162
+ }
163
+ // Reducir cabeza
164
+ const fn2 = normalizeStep(fn);
165
+ if (fn2 !== null)
166
+ return { kind: 'app', fn: fn2, args };
167
+ // Reducir args izquierda a derecha
168
+ for (let i = 0; i < args.length; i++) {
169
+ const a2 = normalizeStep(args[i]);
170
+ if (a2 !== null) {
171
+ const newArgs = [...args];
172
+ newArgs[i] = a2;
173
+ return { kind: 'app', fn, args: newArgs };
174
+ }
175
+ }
176
+ return null;
177
+ }
178
+ }
179
+ }
180
+ // Aplana (app (app f [a]) [b]) → (app f [a,b])
181
+ function flattenApp(t) {
182
+ if (t.kind !== 'app')
183
+ return { fn: t, args: [] };
184
+ const { fn, args } = t;
185
+ if (fn.kind === 'app') {
186
+ const inner = flattenApp(fn);
187
+ return { fn: inner.fn, args: [...inner.args, ...args] };
188
+ }
189
+ return { fn, args };
190
+ }
191
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/higher-order-unify/normalize.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;;AAM/D,gCAIC;AAsBD,gCAgBC;AAMD,8BAMC;AAED,8CAEC;AAID,oCAGC;AA8BD,oCAiBC;AAmBD,8BAGC;AAmDQ,gCAAU;AA3LnB,uCAAuC;AAEvC,SAAgB,UAAU,CAAC,CAAS;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,CAAS,EAAE,KAAkB,EAAE,GAAgB;IACpE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,KAAK;YACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO;QACT,KAAK,MAAM;YACT,OAAO;QACT,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAChB,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,KAAK,KAAK;YACR,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI;gBAAE,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,CAAS,EAAE,MAAmB,IAAI,GAAG,EAAE;IAChE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,KAAK;YACR,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO,GAAG,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,KAAK;YACR,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjB,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxB,OAAO,GAAG,CAAC;QACb,KAAK,KAAK;YACR,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI;gBAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,yCAAyC;AAEzC,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,SAAgB,SAAS,CAAC,KAAkB,EAAE,IAAI,GAAG,IAAI;IACvD,IAAI,IAAY,CAAC;IACjB,GAAG,CAAC;QACF,IAAI,GAAG,GAAG,IAAI,GAAG,aAAa,EAAE,EAAE,CAAC;IACrC,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,iBAAiB;IAC/B,aAAa,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,mDAAmD;AAEnD,SAAgB,YAAY,CAAC,CAAS,EAAE,OAAe,EAAE,WAAmB;IAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,IAAY,EAAE,KAAa,EAAE,KAAkB;IACzE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,CAAC,CAAC;QACX,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACpF,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACvF,CAAC;QACD,KAAK,KAAK;YACR,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;gBACrC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aACxD,CAAC;IACN,CAAC;AACH,CAAC;AAED,wDAAwD;AAExD,SAAgB,YAAY,CAAC,CAAS,EAAE,KAAc;IACpD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,CAAC,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,KAAK;YACR,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC5E,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACvD,sDAAsD;YACtD,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,cAAc,CAAC,CAA8C;IACpE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACrC,IAAI,MAAM,GAAW,CAAC,CAAC,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8DAA8D;AAE9D,SAAgB,SAAS,CAAC,CAAS;IACjC,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,uDAAuD;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,yBAAyB;YACzB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAW,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC5F,OAAO,IAAI,CAAC;YACd,CAAC;YACD,iBAAiB;YACjB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YACxD,mCAAmC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACjD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HOTerm } from './types';
2
+ export declare function isPattern(term: HOTerm, scope?: Set<string>): boolean;
3
+ export declare function isHigherOrderPattern(t: HOTerm): boolean;
4
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/higher-order-unify/pattern.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAItC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,OAAO,CA0B/E;AAcD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvD"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Higher-order unification — Verificación de patrón Miller
4
+ // ============================================================
5
+ //
6
+ // Condición de patrón (Miller 1991):
7
+ // Un término es un "pattern" si toda meta-variable M aparece aplicada
8
+ // exclusivamente a variables ligadas *distintas* en el scope actual.
9
+ //
10
+ // Formalmente: M y₁ … yₙ es patrón si:
11
+ // 1. Cada yᵢ es una variable (kind 'var').
12
+ // 2. Todas las yᵢ son distintas entre sí.
13
+ // 3. Todas las yᵢ son *ligadas* (aparecen en el scope de un λ
14
+ // que las introduce).
15
+ //
16
+ // isHigherOrderPattern es un alias semántico que hace explícito que
17
+ // el término es una HO pattern en el sentido de Miller.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.isPattern = isPattern;
20
+ exports.isHigherOrderPattern = isHigherOrderPattern;
21
+ // Comprueba si `term` es un pattern Miller.
22
+ // `scope` es el conjunto de variables ligadas en el contexto actual.
23
+ function isPattern(term, scope = new Set()) {
24
+ switch (term.kind) {
25
+ case 'var':
26
+ return true;
27
+ case 'meta':
28
+ return true;
29
+ case 'abs': {
30
+ const newScope = new Set(scope);
31
+ newScope.add(term.param);
32
+ return isPattern(term.body, newScope);
33
+ }
34
+ case 'app': {
35
+ const { fn, args } = term;
36
+ if (fn.kind === 'meta') {
37
+ // Verificar que cada arg es una variable ligada distinta
38
+ if (!allDistinctBoundVars(args, scope))
39
+ return false;
40
+ return true;
41
+ }
42
+ // Para aplicaciones no-meta: el fn y cada arg deben ser pattern
43
+ if (!isPattern(fn, scope))
44
+ return false;
45
+ for (const a of args) {
46
+ if (!isPattern(a, scope))
47
+ return false;
48
+ }
49
+ return true;
50
+ }
51
+ }
52
+ }
53
+ function allDistinctBoundVars(args, scope) {
54
+ const seen = new Set();
55
+ for (const a of args) {
56
+ if (a.kind !== 'var')
57
+ return false;
58
+ if (!scope.has(a.name))
59
+ return false; // debe ser ligada
60
+ if (seen.has(a.name))
61
+ return false; // no repetidas
62
+ seen.add(a.name);
63
+ }
64
+ return true;
65
+ }
66
+ // Alias semántico: ¿es el término un higher-order pattern en sentido Miller?
67
+ function isHigherOrderPattern(t) {
68
+ return isPattern(t, new Set());
69
+ }
70
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/higher-order-unify/pattern.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;AAC/D,EAAE;AACF,qCAAqC;AACrC,wEAAwE;AACxE,uEAAuE;AACvE,EAAE;AACF,uCAAuC;AACvC,6CAA6C;AAC7C,4CAA4C;AAC5C,gEAAgE;AAChE,2BAA2B;AAC3B,EAAE;AACF,oEAAoE;AACpE,wDAAwD;;AAMxD,8BA0BC;AAcD,oDAEC;AA5CD,4CAA4C;AAC5C,qEAAqE;AACrE,SAAgB,SAAS,CAAC,IAAY,EAAE,QAAqB,IAAI,GAAG,EAAE;IACpE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YAC1B,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvB,yDAAyD;gBACzD,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,gEAAgE;YAChE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;YACzC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAc,EAAE,KAAkB;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QACxD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,eAAe;QACnD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,SAAgB,oBAAoB,CAAC,CAAS;IAC5C,OAAO,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type HOTerm = {
2
+ kind: 'var';
3
+ name: string;
4
+ } | {
5
+ kind: 'meta';
6
+ name: string;
7
+ } | {
8
+ kind: 'abs';
9
+ param: string;
10
+ body: HOTerm;
11
+ } | {
12
+ kind: 'app';
13
+ fn: HOTerm;
14
+ args: HOTerm[];
15
+ };
16
+ export interface HOSubst {
17
+ [meta: string]: HOTerm;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/higher-order-unify/types.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Higher-order unification (Miller 1991) — Tipos base
4
+ // ============================================================
5
+ //
6
+ // HOTerm extiende λ-cálculo con meta-variables. Las meta-variables son
7
+ // "incógnitas" del proceso de unificación; las variables ordinarias son
8
+ // variables ligadas o libres del objeto-lenguaje.
9
+ //
10
+ // Miller pattern: una meta-variable aplicada a una lista de variables
11
+ // *distintas* y *ligadas* — garantiza unicidad y decidibilidad del
12
+ // unificador más general.
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/higher-order-unify/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAC/D,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,kDAAkD;AAClD,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,0BAA0B"}
@@ -0,0 +1,5 @@
1
+ import type { HOTerm, HOSubst } from './types';
2
+ export declare function unifyPattern(t1: HOTerm, t2: HOTerm): HOSubst | null;
3
+ export declare function buildLambdaBinding(params: string[], body: HOTerm, avoidNames: Set<string>): HOTerm;
4
+ export declare function unifyMetaApp(metaName: string, boundVars: string[], body: HOTerm): HOSubst | null;
5
+ //# sourceMappingURL=unify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unify.d.ts","sourceRoot":"","sources":["../../src/higher-order-unify/unify.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAM/C,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAInE;AAqRD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,MAAM,CAUR;AAMD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAShG"}