mcard-js 2.1.1 → 2.1.2

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 (45) hide show
  1. package/README.md +82 -2
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/ptr/lambda/AlphaConversion.d.ts +42 -0
  7. package/dist/ptr/lambda/AlphaConversion.d.ts.map +1 -0
  8. package/dist/ptr/lambda/AlphaConversion.js +244 -0
  9. package/dist/ptr/lambda/AlphaConversion.js.map +1 -0
  10. package/dist/ptr/lambda/BetaReduction.d.ts +73 -0
  11. package/dist/ptr/lambda/BetaReduction.d.ts.map +1 -0
  12. package/dist/ptr/lambda/BetaReduction.js +322 -0
  13. package/dist/ptr/lambda/BetaReduction.js.map +1 -0
  14. package/dist/ptr/lambda/EtaConversion.d.ts +65 -0
  15. package/dist/ptr/lambda/EtaConversion.d.ts.map +1 -0
  16. package/dist/ptr/lambda/EtaConversion.js +228 -0
  17. package/dist/ptr/lambda/EtaConversion.js.map +1 -0
  18. package/dist/ptr/lambda/FreeVariables.d.ts +44 -0
  19. package/dist/ptr/lambda/FreeVariables.d.ts.map +1 -0
  20. package/dist/ptr/lambda/FreeVariables.js +207 -0
  21. package/dist/ptr/lambda/FreeVariables.js.map +1 -0
  22. package/dist/ptr/lambda/LambdaRuntime.d.ts +80 -0
  23. package/dist/ptr/lambda/LambdaRuntime.d.ts.map +1 -0
  24. package/dist/ptr/lambda/LambdaRuntime.js +417 -0
  25. package/dist/ptr/lambda/LambdaRuntime.js.map +1 -0
  26. package/dist/ptr/lambda/LambdaTerm.d.ts +95 -0
  27. package/dist/ptr/lambda/LambdaTerm.d.ts.map +1 -0
  28. package/dist/ptr/lambda/LambdaTerm.js +159 -0
  29. package/dist/ptr/lambda/LambdaTerm.js.map +1 -0
  30. package/dist/ptr/lambda/index.d.ts +24 -0
  31. package/dist/ptr/lambda/index.d.ts.map +1 -0
  32. package/dist/ptr/lambda/index.js +34 -0
  33. package/dist/ptr/lambda/index.js.map +1 -0
  34. package/dist/ptr/node/CLMRunner.d.ts +30 -0
  35. package/dist/ptr/node/CLMRunner.d.ts.map +1 -1
  36. package/dist/ptr/node/CLMRunner.js +167 -0
  37. package/dist/ptr/node/CLMRunner.js.map +1 -1
  38. package/dist/ptr/node/Runtimes.d.ts +8 -1
  39. package/dist/ptr/node/Runtimes.d.ts.map +1 -1
  40. package/dist/ptr/node/Runtimes.js +8 -1
  41. package/dist/ptr/node/Runtimes.js.map +1 -1
  42. package/dist/storage/schema.d.ts.map +1 -1
  43. package/dist/storage/schema.js +5 -1
  44. package/dist/storage/schema.js.map +1 -1
  45. package/package.json +6 -2
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Free Variables Analysis
3
+ *
4
+ * Computes the set of free variables in a Lambda term.
5
+ * Free variables are those not bound by any enclosing λ.
6
+ *
7
+ * FV(x) = {x}
8
+ * FV(λx.M) = FV(M) \ {x}
9
+ * FV(M N) = FV(M) ∪ FV(N)
10
+ *
11
+ * @module mcard-js/ptr/lambda/FreeVariables
12
+ */
13
+ import { CardCollection } from '../../model/CardCollection';
14
+ import { IO } from '../../monads/IO';
15
+ import { Maybe } from '../../monads/Maybe';
16
+ /**
17
+ * Compute free variables of a term (by hash)
18
+ * Returns IO<Maybe<Set<string>>> - Nothing if term not found
19
+ */
20
+ export declare function freeVariables(collection: CardCollection, termHash: string): IO<Maybe<Set<string>>>;
21
+ /**
22
+ * Compute bound variables of a term (by hash)
23
+ * Bound variables are those occurring in binding positions (λx)
24
+ */
25
+ export declare function boundVariables(collection: CardCollection, termHash: string): IO<Maybe<Set<string>>>;
26
+ /**
27
+ * Check if a variable is free in a term
28
+ */
29
+ export declare function isFreeIn(collection: CardCollection, variable: string, termHash: string): IO<boolean>;
30
+ /**
31
+ * Check if a term is closed (has no free variables)
32
+ */
33
+ export declare function isClosed(collection: CardCollection, termHash: string): IO<boolean>;
34
+ /**
35
+ * Generate a fresh variable name that is not in the given set
36
+ */
37
+ export declare function generateFresh(base: string, avoid: Set<string>): string;
38
+ /**
39
+ * Generate a fresh variable avoiding all variables in a term
40
+ */
41
+ export declare function generateFreshFor(collection: CardCollection, base: string, termHash: string): Promise<string>;
42
+ export declare function difference<T>(a: Set<T>, b: Set<T>): Set<T>;
43
+ export declare function intersection<T>(a: Set<T>, b: Set<T>): Set<T>;
44
+ //# sourceMappingURL=FreeVariables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreeVariables.d.ts","sourceRoot":"","sources":["../../../src/ptr/lambda/FreeVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C;;;GAGG;AACH,wBAAgB,aAAa,CACzB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAKxB;AAqED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAIxB;AAkDD;;GAEG;AACH,wBAAgB,QAAQ,CACpB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,OAAO,CAAC,CAKb;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACpB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,OAAO,CAAC,CAKb;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CActE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAcD,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAQ1D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAQ5D"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Free Variables Analysis
3
+ *
4
+ * Computes the set of free variables in a Lambda term.
5
+ * Free variables are those not bound by any enclosing λ.
6
+ *
7
+ * FV(x) = {x}
8
+ * FV(λx.M) = FV(M) \ {x}
9
+ * FV(M N) = FV(M) ∪ FV(N)
10
+ *
11
+ * @module mcard-js/ptr/lambda/FreeVariables
12
+ */
13
+ import { loadTerm } from './LambdaTerm';
14
+ import { IO } from '../../monads/IO';
15
+ import { Maybe } from '../../monads/Maybe';
16
+ // ─────────────────────────────────────────────────────────────────────────────
17
+ // Free Variable Computation
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ /**
20
+ * Compute free variables of a term (by hash)
21
+ * Returns IO<Maybe<Set<string>>> - Nothing if term not found
22
+ */
23
+ export function freeVariables(collection, termHash) {
24
+ return IO.of(async () => {
25
+ const result = await computeFreeVars(collection, termHash, new Set());
26
+ return result;
27
+ });
28
+ }
29
+ /**
30
+ * Internal recursive implementation with memoization via visited set
31
+ */
32
+ async function computeFreeVars(collection, termHash, visited) {
33
+ // Cycle detection
34
+ if (visited.has(termHash)) {
35
+ return Maybe.just(new Set());
36
+ }
37
+ visited.add(termHash);
38
+ const term = await loadTerm(collection, termHash);
39
+ if (!term) {
40
+ return Maybe.nothing();
41
+ }
42
+ return Maybe.just(await freeVarsOfTerm(collection, term, visited));
43
+ }
44
+ /**
45
+ * Compute free variables of a term structure
46
+ */
47
+ async function freeVarsOfTerm(collection, term, visited) {
48
+ switch (term.tag) {
49
+ case 'Var':
50
+ // FV(x) = {x}
51
+ return new Set([term.name]);
52
+ case 'Abs': {
53
+ // FV(λx.M) = FV(M) \ {x}
54
+ const bodyFV = await computeFreeVars(collection, term.body, visited);
55
+ if (bodyFV.isNothing) {
56
+ throw new Error(`Body term not found: ${term.body}`);
57
+ }
58
+ const result = new Set(bodyFV.value);
59
+ result.delete(term.param);
60
+ return result;
61
+ }
62
+ case 'App': {
63
+ // FV(M N) = FV(M) ∪ FV(N)
64
+ const funcFV = await computeFreeVars(collection, term.func, visited);
65
+ const argFV = await computeFreeVars(collection, term.arg, visited);
66
+ if (funcFV.isNothing) {
67
+ throw new Error(`Function term not found: ${term.func}`);
68
+ }
69
+ if (argFV.isNothing) {
70
+ throw new Error(`Argument term not found: ${term.arg}`);
71
+ }
72
+ return union(funcFV.value, argFV.value);
73
+ }
74
+ }
75
+ }
76
+ // ─────────────────────────────────────────────────────────────────────────────
77
+ // Bound Variables
78
+ // ─────────────────────────────────────────────────────────────────────────────
79
+ /**
80
+ * Compute bound variables of a term (by hash)
81
+ * Bound variables are those occurring in binding positions (λx)
82
+ */
83
+ export function boundVariables(collection, termHash) {
84
+ return IO.of(async () => {
85
+ return computeBoundVars(collection, termHash, new Set());
86
+ });
87
+ }
88
+ async function computeBoundVars(collection, termHash, visited) {
89
+ if (visited.has(termHash)) {
90
+ return Maybe.just(new Set());
91
+ }
92
+ visited.add(termHash);
93
+ const term = await loadTerm(collection, termHash);
94
+ if (!term) {
95
+ return Maybe.nothing();
96
+ }
97
+ switch (term.tag) {
98
+ case 'Var':
99
+ // No bound variables in a variable
100
+ return Maybe.just(new Set());
101
+ case 'Abs': {
102
+ // BV(λx.M) = {x} ∪ BV(M)
103
+ const bodyBV = await computeBoundVars(collection, term.body, visited);
104
+ if (bodyBV.isNothing)
105
+ return bodyBV;
106
+ const result = new Set(bodyBV.value);
107
+ result.add(term.param);
108
+ return Maybe.just(result);
109
+ }
110
+ case 'App': {
111
+ // BV(M N) = BV(M) ∪ BV(N)
112
+ const funcBV = await computeBoundVars(collection, term.func, visited);
113
+ const argBV = await computeBoundVars(collection, term.arg, visited);
114
+ if (funcBV.isNothing || argBV.isNothing) {
115
+ return Maybe.nothing();
116
+ }
117
+ return Maybe.just(union(funcBV.value, argBV.value));
118
+ }
119
+ }
120
+ }
121
+ // ─────────────────────────────────────────────────────────────────────────────
122
+ // Utility: Check if variable is free in term
123
+ // ─────────────────────────────────────────────────────────────────────────────
124
+ /**
125
+ * Check if a variable is free in a term
126
+ */
127
+ export function isFreeIn(collection, variable, termHash) {
128
+ return freeVariables(collection, termHash).map(maybeFV => {
129
+ if (maybeFV.isNothing)
130
+ return false;
131
+ return maybeFV.value.has(variable);
132
+ });
133
+ }
134
+ /**
135
+ * Check if a term is closed (has no free variables)
136
+ */
137
+ export function isClosed(collection, termHash) {
138
+ return freeVariables(collection, termHash).map(maybeFV => {
139
+ if (maybeFV.isNothing)
140
+ return false;
141
+ return maybeFV.value.size === 0;
142
+ });
143
+ }
144
+ // ─────────────────────────────────────────────────────────────────────────────
145
+ // Fresh Variable Generation
146
+ // ─────────────────────────────────────────────────────────────────────────────
147
+ /**
148
+ * Generate a fresh variable name that is not in the given set
149
+ */
150
+ export function generateFresh(base, avoid) {
151
+ if (!avoid.has(base)) {
152
+ return base;
153
+ }
154
+ let counter = 1;
155
+ let candidate = `${base}${counter}`;
156
+ while (avoid.has(candidate)) {
157
+ counter++;
158
+ candidate = `${base}${counter}`;
159
+ }
160
+ return candidate;
161
+ }
162
+ /**
163
+ * Generate a fresh variable avoiding all variables in a term
164
+ */
165
+ export async function generateFreshFor(collection, base, termHash) {
166
+ const fvResult = await freeVariables(collection, termHash).run();
167
+ const bvResult = await boundVariables(collection, termHash).run();
168
+ const avoid = new Set();
169
+ if (fvResult.isJust) {
170
+ for (const v of fvResult.value)
171
+ avoid.add(v);
172
+ }
173
+ if (bvResult.isJust) {
174
+ for (const v of bvResult.value)
175
+ avoid.add(v);
176
+ }
177
+ return generateFresh(base, avoid);
178
+ }
179
+ // ─────────────────────────────────────────────────────────────────────────────
180
+ // Set Utilities
181
+ // ─────────────────────────────────────────────────────────────────────────────
182
+ function union(a, b) {
183
+ const result = new Set(a);
184
+ for (const item of b) {
185
+ result.add(item);
186
+ }
187
+ return result;
188
+ }
189
+ export function difference(a, b) {
190
+ const result = new Set();
191
+ for (const item of a) {
192
+ if (!b.has(item)) {
193
+ result.add(item);
194
+ }
195
+ }
196
+ return result;
197
+ }
198
+ export function intersection(a, b) {
199
+ const result = new Set();
200
+ for (const item of a) {
201
+ if (b.has(item)) {
202
+ result.add(item);
203
+ }
204
+ }
205
+ return result;
206
+ }
207
+ //# sourceMappingURL=FreeVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreeVariables.js","sourceRoot":"","sources":["../../../src/ptr/lambda/FreeVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAc,QAAQ,EAAuB,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,aAAa,CACzB,UAA0B,EAC1B,QAAgB;IAEhB,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC1B,UAA0B,EAC1B,QAAgB,EAChB,OAAoB;IAEpB,kBAAkB;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAC,OAAO,EAAe,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CACzB,UAA0B,EAC1B,IAAgB,EAChB,OAAoB;IAEpB,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,KAAK,KAAK;YACN,cAAc;YACd,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhC,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,yBAAyB;YACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,0BAA0B;YAC1B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEnE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC1B,UAA0B,EAC1B,QAAgB;IAEhB,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC3B,UAA0B,EAC1B,QAAgB,EAChB,OAAoB;IAEpB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAC,OAAO,EAAe,CAAC;IACxC,CAAC;IAED,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,KAAK,KAAK;YACN,mCAAmC;YACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;QAEzC,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,yBAAyB;YACzB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,SAAS;gBAAE,OAAO,MAAM,CAAC;YAEpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,0BAA0B;YAC1B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEpE,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC,OAAO,EAAe,CAAC;YACxC,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,6CAA6C;AAC7C,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,QAAQ,CACpB,UAA0B,EAC1B,QAAgB,EAChB,QAAgB;IAEhB,OAAO,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QACrD,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CACpB,UAA0B,EAC1B,QAAgB;IAEhB,OAAO,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QACrD,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAkB;IAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;QACV,SAAS,GAAG,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,UAA0B,EAC1B,IAAY,EACZ,QAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;IAElE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,SAAS,KAAK,CAAI,CAAS,EAAE,CAAS;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,CAAS,EAAE,CAAS;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,CAAS,EAAE,CAAS;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Lambda Runtime - PTR Runtime for Lambda Calculus
3
+ *
4
+ * Implements α-β-η conversions as a PTR runtime, treating MCard hashes
5
+ * as Lambda terms and performing computations that produce new MCards.
6
+ *
7
+ * This runtime can be used via CLM specifications to define and verify
8
+ * Lambda Calculus reductions.
9
+ *
10
+ * @module mcard-js/ptr/lambda/LambdaRuntime
11
+ */
12
+ import { Runtime } from '../node/RuntimeInterface';
13
+ import { CardCollection } from '../../model/CardCollection';
14
+ import { ReductionStrategy } from './BetaReduction';
15
+ export type LambdaOperation = 'alpha' | 'beta' | 'eta-reduce' | 'eta-expand' | 'normalize' | 'step' | 'alpha-equiv' | 'eta-equiv' | 'alpha-norm' | 'eta-norm' | 'free-vars' | 'is-closed' | 'is-normal' | 'parse' | 'pretty' | 'build';
16
+ export interface LambdaConfig {
17
+ operation: LambdaOperation;
18
+ strategy?: ReductionStrategy;
19
+ maxSteps?: number;
20
+ newName?: string;
21
+ freshVar?: string;
22
+ compareWith?: string;
23
+ }
24
+ export interface LambdaRuntimeResult {
25
+ success: boolean;
26
+ result?: unknown;
27
+ error?: string;
28
+ termHash?: string;
29
+ prettyPrint?: string;
30
+ }
31
+ /**
32
+ * Lambda Calculus Runtime for PTR
33
+ *
34
+ * Executes Lambda Calculus operations on MCard-stored terms.
35
+ */
36
+ export declare class LambdaRuntime implements Runtime {
37
+ private collection;
38
+ constructor(collection: CardCollection);
39
+ /**
40
+ * Execute a Lambda operation
41
+ *
42
+ * @param codeOrPath - For Lambda runtime, this is the term hash to operate on
43
+ * @param context - Additional context (varies by operation)
44
+ * @param config - Lambda configuration with operation type
45
+ * @param chapterDir - Chapter directory (used for relative paths if needed)
46
+ */
47
+ execute(codeOrPath: string, context: unknown, config: any, chapterDir: string): Promise<LambdaRuntimeResult>;
48
+ private doAlphaRename;
49
+ private doBetaReduce;
50
+ private doEtaReduce;
51
+ private doEtaExpand;
52
+ private doNormalize;
53
+ private doStep;
54
+ private doAlphaEquiv;
55
+ private doEtaEquiv;
56
+ private doAlphaNormalize;
57
+ private doEtaNormalize;
58
+ private doFreeVars;
59
+ private doIsClosed;
60
+ private doIsNormal;
61
+ private doParse;
62
+ private doPretty;
63
+ private doBuild;
64
+ }
65
+ /**
66
+ * Parse a simple Lambda expression string into MCards
67
+ *
68
+ * Syntax:
69
+ * x, y, z - Variables
70
+ * \x.M or λx.M - Abstraction
71
+ * (M N) - Application
72
+ * M N - Application (left-associative)
73
+ *
74
+ * Examples:
75
+ * \x.x - Identity function
76
+ * \f.\x.f x - Application combinator
77
+ * (\x.x) y - Identity applied to y
78
+ */
79
+ export declare function parseLambdaExpression(collection: CardCollection, expression: string): Promise<string>;
80
+ //# sourceMappingURL=LambdaRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LambdaRuntime.d.ts","sourceRoot":"","sources":["../../../src/ptr/lambda/LambdaRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAW5D,OAAO,EAMH,iBAAiB,EAEpB,MAAM,iBAAiB,CAAC;AA4BzB,MAAM,MAAM,eAAe,GACrB,OAAO,GACP,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,MAAM,GACN,aAAa,GACb,WAAW,GACX,YAAY,GACZ,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,OAAO,GACP,QAAQ,GACR,OAAO,CACR;AAEL,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;GAIG;AACH,qBAAa,aAAc,YAAW,OAAO;IACzC,OAAO,CAAC,UAAU,CAAiB;gBAEvB,UAAU,EAAE,cAAc;IAItC;;;;;;;OAOG;IACG,OAAO,CACT,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC;YA2EjB,aAAa;YAyBb,YAAY;YAgBZ,WAAW;YAgBX,WAAW;YAkBX,WAAW;YA4BX,MAAM;YA0BN,YAAY;YAsBZ,UAAU;YAkBV,gBAAgB;YAgBhB,cAAc;YAYd,UAAU;YAaV,UAAU;YASV,UAAU;YASV,OAAO;YAwBP,QAAQ;YAUR,OAAO;CAgBxB;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CACvC,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAiFjB"}