@stevenvo780/st-lang 4.4.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/coinduction/index.d.ts +136 -0
  2. package/dist/coinduction/index.d.ts.map +1 -0
  3. package/dist/coinduction/index.js +318 -0
  4. package/dist/coinduction/index.js.map +1 -0
  5. package/dist/combinators-ski/abstract.d.ts +5 -0
  6. package/dist/combinators-ski/abstract.d.ts.map +1 -0
  7. package/dist/combinators-ski/abstract.js +88 -0
  8. package/dist/combinators-ski/abstract.js.map +1 -0
  9. package/dist/combinators-ski/index.d.ts +6 -0
  10. package/dist/combinators-ski/index.d.ts.map +1 -0
  11. package/dist/combinators-ski/index.js +30 -0
  12. package/dist/combinators-ski/index.js.map +1 -0
  13. package/dist/combinators-ski/reduce.d.ts +10 -0
  14. package/dist/combinators-ski/reduce.d.ts.map +1 -0
  15. package/dist/combinators-ski/reduce.js +118 -0
  16. package/dist/combinators-ski/reduce.js.map +1 -0
  17. package/dist/combinators-ski/types.d.ts +23 -0
  18. package/dist/combinators-ski/types.d.ts.map +1 -0
  19. package/dist/combinators-ski/types.js +102 -0
  20. package/dist/combinators-ski/types.js.map +1 -0
  21. package/dist/constructive-reals/index.d.ts +132 -0
  22. package/dist/constructive-reals/index.d.ts.map +1 -0
  23. package/dist/constructive-reals/index.js +723 -0
  24. package/dist/constructive-reals/index.js.map +1 -0
  25. package/dist/game-semantics/convert.d.ts +4 -0
  26. package/dist/game-semantics/convert.d.ts.map +1 -0
  27. package/dist/game-semantics/convert.js +28 -0
  28. package/dist/game-semantics/convert.js.map +1 -0
  29. package/dist/game-semantics/index.d.ts +6 -0
  30. package/dist/game-semantics/index.d.ts.map +1 -0
  31. package/dist/game-semantics/index.js +28 -0
  32. package/dist/game-semantics/index.js.map +1 -0
  33. package/dist/game-semantics/strategy.d.ts +34 -0
  34. package/dist/game-semantics/strategy.d.ts.map +1 -0
  35. package/dist/game-semantics/strategy.js +336 -0
  36. package/dist/game-semantics/strategy.js.map +1 -0
  37. package/dist/game-semantics/types.d.ts +64 -0
  38. package/dist/game-semantics/types.d.ts.map +1 -0
  39. package/dist/game-semantics/types.js +78 -0
  40. package/dist/game-semantics/types.js.map +1 -0
  41. package/dist/higher-order-unify/index.d.ts +5 -0
  42. package/dist/higher-order-unify/index.d.ts.map +1 -0
  43. package/dist/higher-order-unify/index.js +27 -0
  44. package/dist/higher-order-unify/index.js.map +1 -0
  45. package/dist/higher-order-unify/normalize.d.ts +14 -0
  46. package/dist/higher-order-unify/normalize.d.ts.map +1 -0
  47. package/dist/higher-order-unify/normalize.js +191 -0
  48. package/dist/higher-order-unify/normalize.js.map +1 -0
  49. package/dist/higher-order-unify/pattern.d.ts +4 -0
  50. package/dist/higher-order-unify/pattern.d.ts.map +1 -0
  51. package/dist/higher-order-unify/pattern.js +70 -0
  52. package/dist/higher-order-unify/pattern.js.map +1 -0
  53. package/dist/higher-order-unify/types.d.ts +19 -0
  54. package/dist/higher-order-unify/types.d.ts.map +1 -0
  55. package/dist/higher-order-unify/types.js +14 -0
  56. package/dist/higher-order-unify/types.js.map +1 -0
  57. package/dist/higher-order-unify/unify.d.ts +5 -0
  58. package/dist/higher-order-unify/unify.d.ts.map +1 -0
  59. package/dist/higher-order-unify/unify.js +306 -0
  60. package/dist/higher-order-unify/unify.js.map +1 -0
  61. package/dist/nbe/index.d.ts +3 -0
  62. package/dist/nbe/index.d.ts.map +1 -0
  63. package/dist/nbe/index.js +25 -0
  64. package/dist/nbe/index.js.map +1 -0
  65. package/dist/nbe/nbe.d.ts +7 -0
  66. package/dist/nbe/nbe.d.ts.map +1 -0
  67. package/dist/nbe/nbe.js +118 -0
  68. package/dist/nbe/nbe.js.map +1 -0
  69. package/dist/nbe/types.d.ts +54 -0
  70. package/dist/nbe/types.d.ts.map +1 -0
  71. package/dist/nbe/types.js +117 -0
  72. package/dist/nbe/types.js.map +1 -0
  73. package/dist/profile-bridge/index.d.ts +64 -0
  74. package/dist/profile-bridge/index.d.ts.map +1 -0
  75. package/dist/profile-bridge/index.js +328 -0
  76. package/dist/profile-bridge/index.js.map +1 -0
  77. package/dist/proof-nets/construct.d.ts +3 -0
  78. package/dist/proof-nets/construct.d.ts.map +1 -0
  79. package/dist/proof-nets/construct.js +85 -0
  80. package/dist/proof-nets/construct.js.map +1 -0
  81. package/dist/proof-nets/correctness.d.ts +3 -0
  82. package/dist/proof-nets/correctness.d.ts.map +1 -0
  83. package/dist/proof-nets/correctness.js +213 -0
  84. package/dist/proof-nets/correctness.js.map +1 -0
  85. package/dist/proof-nets/cut-elim.d.ts +9 -0
  86. package/dist/proof-nets/cut-elim.d.ts.map +1 -0
  87. package/dist/proof-nets/cut-elim.js +149 -0
  88. package/dist/proof-nets/cut-elim.js.map +1 -0
  89. package/dist/proof-nets/index.d.ts +6 -0
  90. package/dist/proof-nets/index.d.ts.map +1 -0
  91. package/dist/proof-nets/index.js +33 -0
  92. package/dist/proof-nets/index.js.map +1 -0
  93. package/dist/proof-nets/types.d.ts +36 -0
  94. package/dist/proof-nets/types.d.ts.map +1 -0
  95. package/dist/proof-nets/types.js +89 -0
  96. package/dist/proof-nets/types.js.map +1 -0
  97. package/dist/tableau-framework/TableauProver.d.ts +10 -0
  98. package/dist/tableau-framework/TableauProver.d.ts.map +1 -0
  99. package/dist/tableau-framework/TableauProver.js +118 -0
  100. package/dist/tableau-framework/TableauProver.js.map +1 -0
  101. package/dist/tableau-framework/index.d.ts +5 -0
  102. package/dist/tableau-framework/index.d.ts.map +1 -0
  103. package/dist/tableau-framework/index.js +11 -0
  104. package/dist/tableau-framework/index.js.map +1 -0
  105. package/dist/tableau-framework/propositional.d.ts +11 -0
  106. package/dist/tableau-framework/propositional.d.ts.map +1 -0
  107. package/dist/tableau-framework/propositional.js +143 -0
  108. package/dist/tableau-framework/propositional.js.map +1 -0
  109. package/dist/tableau-framework/types.d.ts +32 -0
  110. package/dist/tableau-framework/types.d.ts.map +1 -0
  111. package/dist/tableau-framework/types.js +6 -0
  112. package/dist/tableau-framework/types.js.map +1 -0
  113. package/dist/tests/coinduction/coinduction.test.d.ts +2 -0
  114. package/dist/tests/coinduction/coinduction.test.d.ts.map +1 -0
  115. package/dist/tests/coinduction/coinduction.test.js +217 -0
  116. package/dist/tests/coinduction/coinduction.test.js.map +1 -0
  117. package/dist/tests/combinators-ski/combinators-ski.test.d.ts +2 -0
  118. package/dist/tests/combinators-ski/combinators-ski.test.d.ts.map +1 -0
  119. package/dist/tests/combinators-ski/combinators-ski.test.js +211 -0
  120. package/dist/tests/combinators-ski/combinators-ski.test.js.map +1 -0
  121. package/dist/tests/constructive-reals/constructive-reals.test.d.ts +2 -0
  122. package/dist/tests/constructive-reals/constructive-reals.test.d.ts.map +1 -0
  123. package/dist/tests/constructive-reals/constructive-reals.test.js +357 -0
  124. package/dist/tests/constructive-reals/constructive-reals.test.js.map +1 -0
  125. package/dist/tests/game-semantics/game-semantics.test.d.ts +2 -0
  126. package/dist/tests/game-semantics/game-semantics.test.d.ts.map +1 -0
  127. package/dist/tests/game-semantics/game-semantics.test.js +143 -0
  128. package/dist/tests/game-semantics/game-semantics.test.js.map +1 -0
  129. package/dist/tests/higher-order-unify/ho-unify.test.d.ts +2 -0
  130. package/dist/tests/higher-order-unify/ho-unify.test.d.ts.map +1 -0
  131. package/dist/tests/higher-order-unify/ho-unify.test.js +264 -0
  132. package/dist/tests/higher-order-unify/ho-unify.test.js.map +1 -0
  133. package/dist/tests/integration/cross-modules.test.d.ts +8 -0
  134. package/dist/tests/integration/cross-modules.test.d.ts.map +1 -0
  135. package/dist/tests/integration/cross-modules.test.js +668 -0
  136. package/dist/tests/integration/cross-modules.test.js.map +1 -0
  137. package/dist/tests/nbe/nbe.test.d.ts +2 -0
  138. package/dist/tests/nbe/nbe.test.d.ts.map +1 -0
  139. package/dist/tests/nbe/nbe.test.js +121 -0
  140. package/dist/tests/nbe/nbe.test.js.map +1 -0
  141. package/dist/tests/profile-bridge/translations.test.d.ts +2 -0
  142. package/dist/tests/profile-bridge/translations.test.d.ts.map +1 -0
  143. package/dist/tests/profile-bridge/translations.test.js +266 -0
  144. package/dist/tests/profile-bridge/translations.test.js.map +1 -0
  145. package/dist/tests/proof-nets/proof-nets.test.d.ts +2 -0
  146. package/dist/tests/proof-nets/proof-nets.test.d.ts.map +1 -0
  147. package/dist/tests/proof-nets/proof-nets.test.js +263 -0
  148. package/dist/tests/proof-nets/proof-nets.test.js.map +1 -0
  149. package/dist/tests/tableau-framework/tableau.test.d.ts +2 -0
  150. package/dist/tests/tableau-framework/tableau.test.d.ts.map +1 -0
  151. package/dist/tests/tableau-framework/tableau.test.js +196 -0
  152. package/dist/tests/tableau-framework/tableau.test.js.map +1 -0
  153. package/package.json +1 -1
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // SKI combinatory logic — Reducción
4
+ // ============================================================
5
+ //
6
+ // Reglas (weak reduction, leftmost-outermost):
7
+ // I x → x
8
+ // K x y → x (descarta `y` aunque éste tenga redex propios)
9
+ // S x y z → x z (y z)
10
+ //
11
+ // `reduceStep` aplica un único paso si encuentra un redex en la
12
+ // cabeza o, si no, baja por las ramas siguiendo orden
13
+ // leftmost-outermost. Como no hay binders ni captura, no se requiere
14
+ // renombrar; la sustitución es pegado físico de subárboles.
15
+ //
16
+ // La forma normal SKI puede no existir (e.g. términos divergentes
17
+ // equivalentes a Ω), por lo que `normalize` recibe `maxSteps`.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.reduceStep = reduceStep;
20
+ exports.normalize = normalize;
21
+ exports.isNormalForm = isNormalForm;
22
+ // Devuelve el término reducido en UN paso, o `null` si no hay redex.
23
+ function reduceStep(t) {
24
+ // Intenta primero un paso en la posición de cabeza.
25
+ const head = reduceHead(t);
26
+ if (head !== null)
27
+ return head;
28
+ // Si no hay redex en cabeza, baja recursivamente.
29
+ switch (t.kind) {
30
+ case 'app': {
31
+ const fn2 = reduceStep(t.fn);
32
+ if (fn2 !== null)
33
+ return { kind: 'app', fn: fn2, arg: t.arg };
34
+ const arg2 = reduceStep(t.arg);
35
+ if (arg2 !== null)
36
+ return { kind: 'app', fn: t.fn, arg: arg2 };
37
+ return null;
38
+ }
39
+ default:
40
+ return null;
41
+ }
42
+ }
43
+ // Intenta una reducción en la posición de cabeza del término.
44
+ // Devuelve `null` si no hay redex de cabeza.
45
+ function reduceHead(t) {
46
+ if (t.kind !== 'app')
47
+ return null;
48
+ // Junta la cabeza (combinador o variable) con sus argumentos
49
+ // recorridos por la espina izquierda.
50
+ const spine = [];
51
+ let cursor = t;
52
+ while (cursor.kind === 'app') {
53
+ spine.unshift(cursor.arg);
54
+ cursor = cursor.fn;
55
+ }
56
+ // `cursor` es la cabeza definitiva (S/K/I/var); `spine` son los args
57
+ // aplicados de izquierda a derecha.
58
+ switch (cursor.kind) {
59
+ case 'I': {
60
+ const x = spine[0];
61
+ if (x === undefined)
62
+ return null;
63
+ // I x rest... → x rest...
64
+ return rebuild(x, spine.slice(1));
65
+ }
66
+ case 'K': {
67
+ const x = spine[0];
68
+ const y = spine[1];
69
+ if (x === undefined || y === undefined)
70
+ return null;
71
+ // K x y rest... → x rest... (y se descarta)
72
+ return rebuild(x, spine.slice(2));
73
+ }
74
+ case 'S': {
75
+ const x = spine[0];
76
+ const y = spine[1];
77
+ const z = spine[2];
78
+ if (x === undefined || y === undefined || z === undefined)
79
+ return null;
80
+ // S x y z rest... → (x z (y z)) rest...
81
+ const reduced = {
82
+ kind: 'app',
83
+ fn: { kind: 'app', fn: x, arg: z },
84
+ arg: { kind: 'app', fn: y, arg: z },
85
+ };
86
+ return rebuild(reduced, spine.slice(3));
87
+ }
88
+ default:
89
+ return null;
90
+ }
91
+ }
92
+ // Reconstruye `head arg0 arg1 ...` como aplicación asociativa a la izquierda.
93
+ function rebuild(head, args) {
94
+ let acc = head;
95
+ for (const a of args) {
96
+ acc = { kind: 'app', fn: acc, arg: a };
97
+ }
98
+ return acc;
99
+ }
100
+ // Itera reducciones hasta forma normal o agotar `maxSteps`.
101
+ // `terminated=true` significa que no quedan redex (forma normal SKI);
102
+ // `false` indica que se alcanzó el cap (típico para términos divergentes).
103
+ function normalize(t, maxSteps = 1000) {
104
+ let current = t;
105
+ let steps = 0;
106
+ for (; steps < maxSteps; steps += 1) {
107
+ const next = reduceStep(current);
108
+ if (next === null)
109
+ return { result: current, steps, terminated: true };
110
+ current = next;
111
+ }
112
+ return { result: current, steps, terminated: false };
113
+ }
114
+ // ¿No hay más redex aplicable?
115
+ function isNormalForm(t) {
116
+ return reduceStep(t) === null;
117
+ }
118
+ //# sourceMappingURL=reduce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reduce.js","sourceRoot":"","sources":["../../src/combinators-ski/reduce.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type CTerm = {
2
+ kind: 'S';
3
+ } | {
4
+ kind: 'K';
5
+ } | {
6
+ kind: 'I';
7
+ } | {
8
+ kind: 'var';
9
+ name: string;
10
+ } | {
11
+ kind: 'app';
12
+ fn: CTerm;
13
+ arg: CTerm;
14
+ };
15
+ export declare const S: () => CTerm;
16
+ export declare const K: () => CTerm;
17
+ export declare const I: () => CTerm;
18
+ export declare const cvar: (name: string) => CTerm;
19
+ export declare function app(...ts: CTerm[]): CTerm;
20
+ export declare function ctermEq(a: CTerm, b: CTerm): boolean;
21
+ export declare function termToString(t: CTerm): string;
22
+ export declare function freeVars(t: CTerm): Set<string>;
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/combinators-ski/types.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,GACb;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,GACb;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,GACb;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,KAAK,CAAA;CAAE,CAAC;AAG3C,eAAO,MAAM,CAAC,QAAO,KAAwB,CAAC;AAC9C,eAAO,MAAM,CAAC,QAAO,KAAwB,CAAC;AAC9C,eAAO,MAAM,CAAC,QAAO,KAAwB,CAAC;AAC9C,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,KAAgC,CAAC;AAIrE,wBAAgB,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAYzC;AAGD,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,OAAO,CAcnD;AAID,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAgB7C;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAI9C"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // SKI combinatory logic — Términos y constructores
4
+ // ============================================================
5
+ //
6
+ // Sistema base de combinadores S, K, I (Schönfinkel / Curry). Es
7
+ // Turing-completo y equivalente al λ-cálculo, pero sin variables
8
+ // ligadas: toda función se construye combinando S, K, I y variables
9
+ // libres mediante aplicación. Las λ-abstracciones se "eliminan"
10
+ // vía bracket abstraction (ver `abstract.ts`).
11
+ //
12
+ // Reglas de reducción:
13
+ // I x → x
14
+ // K x y → x
15
+ // S x y z → x z (y z)
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.cvar = exports.I = exports.K = exports.S = void 0;
18
+ exports.app = app;
19
+ exports.ctermEq = ctermEq;
20
+ exports.termToString = termToString;
21
+ exports.freeVars = freeVars;
22
+ // ---------- Constructores convenientes ----------
23
+ const S = () => ({ kind: 'S' });
24
+ exports.S = S;
25
+ const K = () => ({ kind: 'K' });
26
+ exports.K = K;
27
+ const I = () => ({ kind: 'I' });
28
+ exports.I = I;
29
+ const cvar = (name) => ({ kind: 'var', name });
30
+ exports.cvar = cvar;
31
+ // Aplicación n-aria asociativa a la izquierda: app(f, a, b, c) = ((f a) b) c.
32
+ // Con un solo argumento devuelve el término tal cual; sin argumentos lanza.
33
+ function app(...ts) {
34
+ const head = ts[0];
35
+ if (head === undefined) {
36
+ throw new Error('app() requiere al menos un término');
37
+ }
38
+ let acc = head;
39
+ for (let i = 1; i < ts.length; i += 1) {
40
+ const next = ts[i];
41
+ if (next === undefined)
42
+ break;
43
+ acc = { kind: 'app', fn: acc, arg: next };
44
+ }
45
+ return acc;
46
+ }
47
+ // Igualdad estructural (no hay alpha — no hay binders).
48
+ function ctermEq(a, b) {
49
+ if (a.kind !== b.kind)
50
+ return false;
51
+ switch (a.kind) {
52
+ case 'S':
53
+ case 'K':
54
+ case 'I':
55
+ return true;
56
+ case 'var':
57
+ return a.name === b.name;
58
+ case 'app': {
59
+ const bb = b;
60
+ return ctermEq(a.fn, bb.fn) && ctermEq(a.arg, bb.arg);
61
+ }
62
+ }
63
+ }
64
+ // Pretty-printer. Aplicación asociativa a la izquierda: agrupa con
65
+ // paréntesis sólo cuando el argumento es a su vez una aplicación.
66
+ function termToString(t) {
67
+ switch (t.kind) {
68
+ case 'S':
69
+ return 'S';
70
+ case 'K':
71
+ return 'K';
72
+ case 'I':
73
+ return 'I';
74
+ case 'var':
75
+ return t.name;
76
+ case 'app': {
77
+ const fn = termToString(t.fn);
78
+ const arg = t.arg.kind === 'app' ? `(${termToString(t.arg)})` : termToString(t.arg);
79
+ return `${fn} ${arg}`;
80
+ }
81
+ }
82
+ }
83
+ // Variables libres del término (no hay ligadas en SKI puro).
84
+ function freeVars(t) {
85
+ const acc = new Set();
86
+ collect(t, acc);
87
+ return acc;
88
+ }
89
+ function collect(t, acc) {
90
+ switch (t.kind) {
91
+ case 'var':
92
+ acc.add(t.name);
93
+ return;
94
+ case 'app':
95
+ collect(t.fn, acc);
96
+ collect(t.arg, acc);
97
+ return;
98
+ default:
99
+ return;
100
+ }
101
+ }
102
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/combinators-ski/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ export interface CReal {
2
+ /**
3
+ * Devuelve una aproximación dyádica de x con error < 2^{-precision}.
4
+ * numerator / denominator ≈ x, denominator = 2^precision.
5
+ */
6
+ approx(precision: number): {
7
+ numerator: bigint;
8
+ denominator: bigint;
9
+ };
10
+ }
11
+ /** Eleva 2 a un entero no negativo. */
12
+ declare function pow2(n: number): bigint;
13
+ /**
14
+ * Divide entero con "round half away from zero".
15
+ * shiftRight(x, k) ≈ x / 2^k redondeado.
16
+ * Garantiza |shiftRight(x,k) - x/2^k| ≤ 1/2.
17
+ */
18
+ declare function shiftRight(x: bigint, k: number): bigint;
19
+ /**
20
+ * Calcula el número de bits del entero (|x| en binario).
21
+ * bitLength(0) = 0, bitLength(1) = 1, bitLength(7) = 3, bitLength(8) = 4.
22
+ */
23
+ declare function bitLength(x: bigint): number;
24
+ export declare function fromInt(n: number | bigint): CReal;
25
+ export declare function fromRational(p: number | bigint, q: number | bigint): CReal;
26
+ export declare function neg(a: CReal): CReal;
27
+ export declare function abs(a: CReal): CReal;
28
+ /**
29
+ * add(a,b) a precisión p:
30
+ * pedimos a y b a precisión p+2.
31
+ * error de cada uno < 2^{-(p+2)} → error en a+b < 2·2^{-(p+2)} = 2^{-(p+1)}.
32
+ * Al pasar de escala p+2 a p (shift de 2), introducimos error
33
+ * de redondeo ≤ 1/2 en la unidad p, = 2^{-(p+1)}.
34
+ * Total: < 2^{-(p+1)} + 2^{-(p+1)} = 2^{-p}. ✓
35
+ */
36
+ export declare function add(a: CReal, b: CReal): CReal;
37
+ export declare function sub(a: CReal, b: CReal): CReal;
38
+ /**
39
+ * mul(a,b) a precisión p:
40
+ * Necesitamos cotas sobre |a| y |b|. Tomamos una aproximación gruesa
41
+ * a precisión 0 para estimar el tamaño en bits.
42
+ * Sean |a| ≤ 2^A, |b| ≤ 2^B (con A,B no-negativos).
43
+ * Trabajamos a precisión p + A + B + 3.
44
+ * En esa escala el producto cabe y la cota de error queda < 2^{-p}.
45
+ *
46
+ * Detalle del error: si â = a + ε_a con |ε_a| < 2^{-w} y análogamente
47
+ * para b̂ (w = work precision en los operandos), entonces
48
+ * â·b̂ - a·b = a·ε_b + b·ε_a + ε_a·ε_b.
49
+ * |a·ε_b| ≤ 2^A · 2^{-w}, idem para b.
50
+ * Eligiendo w = p + A + B + 3 ese error queda < 2·2^{-(p+B+3)}
51
+ * acotado holgadamente por 2^{-(p+1)}, y el shift final añade otro
52
+ * 2^{-(p+1)}, dando < 2^{-p}.
53
+ */
54
+ export declare function mul(a: CReal, b: CReal): CReal;
55
+ /**
56
+ * div(a,b) a precisión p (b ≠ 0).
57
+ * Encontramos k tal que |b| ≥ 2^{-k}.
58
+ * Necesitamos también cota superior A_bits sobre |a|.
59
+ * Trabajamos a precisión w = p + 2k + A_bits + 4.
60
+ *
61
+ * Si â = a + ε_a, b̂ = b + ε_b, entonces
62
+ * â/b̂ - a/b = (ε_a · b - a · ε_b) / (b · b̂).
63
+ * |b · b̂| ≥ (2^{-k}) · (2^{-k} - 2^{-w}) ≥ 2^{-2k-1}.
64
+ * |ε_a · b| ≤ 2^{-w} · (|b̂|+2^{-w}).
65
+ * |a · ε_b| ≤ |â+2^{-w}| · 2^{-w}.
66
+ * Tomando w = p + 2k + A_bits + 4 acotamos por < 2^{-p}.
67
+ */
68
+ export declare function div(a: CReal, b: CReal): CReal;
69
+ /**
70
+ * sqrt(a) para a ≥ 0. Si a < 0 (detectado con cota), lanza.
71
+ * Implementación: Newton-Raphson en bigint sobre x² = N donde
72
+ * N = aprox(a) a precisión 2·prec + buffer. La raíz cuadrada entera
73
+ * de N da nuestra aproximación a √a a precisión prec.
74
+ */
75
+ export declare function sqrt(a: CReal): CReal;
76
+ /** Raíz cuadrada entera (floor) de n ≥ 0 vía Newton. */
77
+ declare function isqrt(n: bigint): bigint;
78
+ /**
79
+ * compareWithEpsilon(a, b, epsPrec):
80
+ * Si |a - b| < 2^{-epsPrec}, devuelve 0 (indistinguibles).
81
+ * Si a > b + 2^{-epsPrec}, devuelve 1.
82
+ * Si a < b - 2^{-epsPrec}, devuelve -1.
83
+ *
84
+ * Implementación: comparamos aproximaciones a precisión epsPrec + 3.
85
+ * |aw/2^w - a| < 2^{-w}, idem b. Entonces
86
+ * (aw - bw)/2^w está dentro de (a - b) ± 2·2^{-w}.
87
+ * Eligiendo w = epsPrec + 3:
88
+ * • Si (aw - bw) > 2^{w - epsPrec} + 2 = 8 + 2 = 10 (en escala w),
89
+ * entonces a - b > 2^{-epsPrec}, devolvemos 1.
90
+ * • Análogo para -10.
91
+ * • En otro caso, devolvemos 0.
92
+ */
93
+ export declare function compareWithEpsilon(a: CReal, b: CReal, epsilonPrecision: number): -1 | 0 | 1;
94
+ /**
95
+ * toString(r, digits): representación decimal con `digits` dígitos
96
+ * después del punto. Usa precisión binaria suficiente:
97
+ * 2^p > 10^digits ⇔ p > digits · log2(10) ≈ digits · 3.322.
98
+ * Tomamos p = ceil(digits · 4) + 8 para holgura.
99
+ */
100
+ export declare function toString(r: CReal, digits: number): string;
101
+ /**
102
+ * exp(x) = Σ x^k / k!. Para que la serie converja rápido reducimos
103
+ * primero el argumento: escribimos x = q · ln(2) + r con |r| ≤ ln(2)/2
104
+ * usando q = round(x / ln(2)). Luego exp(x) = 2^q · exp(r).
105
+ *
106
+ * Para esta versión inicial hacemos una reducción más simple: si
107
+ * |x| > 1, dividimos por 2^k hasta que |x/2^k| < 1, calculamos
108
+ * exp(x/2^k) por serie, y elevamos al cuadrado k veces (exp(y)² = exp(2y)).
109
+ * Esto mantiene la convergencia de la serie acotada a ~prec términos.
110
+ */
111
+ export declare function exp(x: CReal): CReal;
112
+ export declare function log(x: CReal): CReal;
113
+ export declare function sin(x: CReal): CReal;
114
+ export declare function cos(x: CReal): CReal;
115
+ /**
116
+ * pow(a, b) = exp(b · log(a)) para a > 0.
117
+ * Caso especial: si b es un entero, hacemos exponenciación rápida
118
+ * sobre CReal para evitar log de a (lo que permite a ≤ 0 si b es entero).
119
+ */
120
+ export declare function pow(a: CReal, b: CReal | number): CReal;
121
+ export declare const PI: CReal;
122
+ export declare const E: CReal;
123
+ export declare const SQRT2: CReal;
124
+ /** @internal Exposed for whitebox tests. */
125
+ export declare const __internals: {
126
+ shiftRight: typeof shiftRight;
127
+ bitLength: typeof bitLength;
128
+ isqrt: typeof isqrt;
129
+ pow2: typeof pow2;
130
+ };
131
+ export {};
132
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constructive-reals/index.ts"],"names":[],"mappings":"AA6CA,MAAM,WAAW,KAAK;IACpB;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAID,uCAAuC;AACvC,iBAAS,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/B;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;GAGG;AACH,iBAAS,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMpC;AA8DD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CASjD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAuB1E;AAID,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGnC;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAMnC;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAQ7C;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAQ7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAoB7C;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CA2B7C;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAoBpC;AAED,wDAAwD;AACxD,iBAAS,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAahC;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAW3F;AAID;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAWD;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAqCnC;AAwBD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CA0CnC;AA6CD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAiBnC;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAenC;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAmBtD;AA2CD,eAAO,MAAM,EAAE,EAAE,KAAuC,CAAC;AAmBzD,eAAO,MAAM,CAAC,EAAE,KAAsC,CAAC;AAYvD,eAAO,MAAM,KAAK,EAAE,KAA0C,CAAC;AAI/D,4CAA4C;AAC5C,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC"}