@stevenvo780/st-lang 4.9.0 → 4.11.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 (241) hide show
  1. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts +18 -0
  2. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts.map +1 -0
  3. package/dist/logic/profiles/natural-deduction-nk/formula.js +102 -0
  4. package/dist/logic/profiles/natural-deduction-nk/formula.js.map +1 -0
  5. package/dist/logic/profiles/natural-deduction-nk/index.d.ts +5 -0
  6. package/dist/logic/profiles/natural-deduction-nk/index.d.ts.map +1 -0
  7. package/dist/logic/profiles/natural-deduction-nk/index.js +28 -0
  8. package/dist/logic/profiles/natural-deduction-nk/index.js.map +1 -0
  9. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts +49 -0
  10. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts.map +1 -0
  11. package/dist/logic/profiles/natural-deduction-nk/prover.js +557 -0
  12. package/dist/logic/profiles/natural-deduction-nk/prover.js.map +1 -0
  13. package/dist/logic/profiles/natural-deduction-nk/types.d.ts +48 -0
  14. package/dist/logic/profiles/natural-deduction-nk/types.d.ts.map +1 -0
  15. package/dist/logic/profiles/natural-deduction-nk/types.js +35 -0
  16. package/dist/logic/profiles/natural-deduction-nk/types.js.map +1 -0
  17. package/dist/proof-systems/distributed-exchange/index.d.ts +101 -0
  18. package/dist/proof-systems/distributed-exchange/index.d.ts.map +1 -0
  19. package/dist/proof-systems/distributed-exchange/index.js +408 -0
  20. package/dist/proof-systems/distributed-exchange/index.js.map +1 -0
  21. package/dist/reasoning/automata/dfa.d.ts +17 -0
  22. package/dist/reasoning/automata/dfa.d.ts.map +1 -0
  23. package/dist/reasoning/automata/dfa.js +276 -0
  24. package/dist/reasoning/automata/dfa.js.map +1 -0
  25. package/dist/reasoning/automata/index.d.ts +8 -0
  26. package/dist/reasoning/automata/index.d.ts.map +1 -0
  27. package/dist/reasoning/automata/index.js +64 -0
  28. package/dist/reasoning/automata/index.js.map +1 -0
  29. package/dist/reasoning/automata/languages.d.ts +10 -0
  30. package/dist/reasoning/automata/languages.d.ts.map +1 -0
  31. package/dist/reasoning/automata/languages.js +78 -0
  32. package/dist/reasoning/automata/languages.js.map +1 -0
  33. package/dist/reasoning/automata/nfa.d.ts +8 -0
  34. package/dist/reasoning/automata/nfa.d.ts.map +1 -0
  35. package/dist/reasoning/automata/nfa.js +122 -0
  36. package/dist/reasoning/automata/nfa.js.map +1 -0
  37. package/dist/reasoning/automata/pda.d.ts +10 -0
  38. package/dist/reasoning/automata/pda.d.ts.map +1 -0
  39. package/dist/reasoning/automata/pda.js +169 -0
  40. package/dist/reasoning/automata/pda.js.map +1 -0
  41. package/dist/reasoning/automata/regex.d.ts +6 -0
  42. package/dist/reasoning/automata/regex.d.ts.map +1 -0
  43. package/dist/reasoning/automata/regex.js +259 -0
  44. package/dist/reasoning/automata/regex.js.map +1 -0
  45. package/dist/reasoning/automata/types.d.ts +69 -0
  46. package/dist/reasoning/automata/types.d.ts.map +1 -0
  47. package/dist/reasoning/automata/types.js +29 -0
  48. package/dist/reasoning/automata/types.js.map +1 -0
  49. package/dist/reasoning/computability/index.d.ts +239 -0
  50. package/dist/reasoning/computability/index.d.ts.map +1 -0
  51. package/dist/reasoning/computability/index.js +851 -0
  52. package/dist/reasoning/computability/index.js.map +1 -0
  53. package/dist/reasoning/graph-theory/index.d.ts +63 -0
  54. package/dist/reasoning/graph-theory/index.d.ts.map +1 -0
  55. package/dist/reasoning/graph-theory/index.js +1043 -0
  56. package/dist/reasoning/graph-theory/index.js.map +1 -0
  57. package/dist/reasoning/group-presentation/cayley.d.ts +8 -0
  58. package/dist/reasoning/group-presentation/cayley.d.ts.map +1 -0
  59. package/dist/reasoning/group-presentation/cayley.js +38 -0
  60. package/dist/reasoning/group-presentation/cayley.js.map +1 -0
  61. package/dist/reasoning/group-presentation/index.d.ts +8 -0
  62. package/dist/reasoning/group-presentation/index.d.ts.map +1 -0
  63. package/dist/reasoning/group-presentation/index.js +36 -0
  64. package/dist/reasoning/group-presentation/index.js.map +1 -0
  65. package/dist/reasoning/group-presentation/standard-groups.d.ts +6 -0
  66. package/dist/reasoning/group-presentation/standard-groups.d.ts.map +1 -0
  67. package/dist/reasoning/group-presentation/standard-groups.js +93 -0
  68. package/dist/reasoning/group-presentation/standard-groups.js.map +1 -0
  69. package/dist/reasoning/group-presentation/todd-coxeter.d.ts +10 -0
  70. package/dist/reasoning/group-presentation/todd-coxeter.d.ts.map +1 -0
  71. package/dist/reasoning/group-presentation/todd-coxeter.js +362 -0
  72. package/dist/reasoning/group-presentation/todd-coxeter.js.map +1 -0
  73. package/dist/reasoning/group-presentation/types.d.ts +7 -0
  74. package/dist/reasoning/group-presentation/types.d.ts.map +1 -0
  75. package/dist/reasoning/group-presentation/types.js +22 -0
  76. package/dist/reasoning/group-presentation/types.js.map +1 -0
  77. package/dist/reasoning/group-presentation/words.d.ts +10 -0
  78. package/dist/reasoning/group-presentation/words.d.ts.map +1 -0
  79. package/dist/reasoning/group-presentation/words.js +109 -0
  80. package/dist/reasoning/group-presentation/words.js.map +1 -0
  81. package/dist/reasoning/number-theory/crt.d.ts +9 -0
  82. package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
  83. package/dist/reasoning/number-theory/crt.js +39 -0
  84. package/dist/reasoning/number-theory/crt.js.map +1 -0
  85. package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
  86. package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
  87. package/dist/reasoning/number-theory/diophantine.js +87 -0
  88. package/dist/reasoning/number-theory/diophantine.js.map +1 -0
  89. package/dist/reasoning/number-theory/factorization.d.ts +12 -0
  90. package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
  91. package/dist/reasoning/number-theory/factorization.js +136 -0
  92. package/dist/reasoning/number-theory/factorization.js.map +1 -0
  93. package/dist/reasoning/number-theory/gcd.d.ts +8 -0
  94. package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
  95. package/dist/reasoning/number-theory/gcd.js +51 -0
  96. package/dist/reasoning/number-theory/gcd.js.map +1 -0
  97. package/dist/reasoning/number-theory/index.d.ts +9 -0
  98. package/dist/reasoning/number-theory/index.d.ts.map +1 -0
  99. package/dist/reasoning/number-theory/index.js +46 -0
  100. package/dist/reasoning/number-theory/index.js.map +1 -0
  101. package/dist/reasoning/number-theory/modular.d.ts +6 -0
  102. package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
  103. package/dist/reasoning/number-theory/modular.js +75 -0
  104. package/dist/reasoning/number-theory/modular.js.map +1 -0
  105. package/dist/reasoning/number-theory/primality.d.ts +6 -0
  106. package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
  107. package/dist/reasoning/number-theory/primality.js +144 -0
  108. package/dist/reasoning/number-theory/primality.js.map +1 -0
  109. package/dist/reasoning/number-theory/symbols.d.ts +3 -0
  110. package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
  111. package/dist/reasoning/number-theory/symbols.js +57 -0
  112. package/dist/reasoning/number-theory/symbols.js.map +1 -0
  113. package/dist/reasoning/real-analysis/index.d.ts +127 -0
  114. package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
  115. package/dist/reasoning/real-analysis/index.js +638 -0
  116. package/dist/reasoning/real-analysis/index.js.map +1 -0
  117. package/dist/reasoning/topology/index.d.ts +41 -0
  118. package/dist/reasoning/topology/index.d.ts.map +1 -0
  119. package/dist/reasoning/topology/index.js +739 -0
  120. package/dist/reasoning/topology/index.js.map +1 -0
  121. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
  122. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
  123. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
  124. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
  125. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts +2 -0
  126. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts.map +1 -0
  127. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js +328 -0
  128. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js.map +1 -0
  129. package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
  130. package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
  131. package/dist/tests/reasoning/automata/automata.test.js +310 -0
  132. package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
  133. package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
  134. package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
  135. package/dist/tests/reasoning/computability/computability.test.js +246 -0
  136. package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
  137. package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts +2 -0
  138. package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts.map +1 -0
  139. package/dist/tests/reasoning/graph-theory/graph-theory.test.js +363 -0
  140. package/dist/tests/reasoning/graph-theory/graph-theory.test.js.map +1 -0
  141. package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts +2 -0
  142. package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts.map +1 -0
  143. package/dist/tests/reasoning/group-presentation/group-presentation.test.js +229 -0
  144. package/dist/tests/reasoning/group-presentation/group-presentation.test.js.map +1 -0
  145. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
  146. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
  147. package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
  148. package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
  149. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
  150. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
  151. package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
  152. package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
  153. package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
  154. package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
  155. package/dist/tests/reasoning/topology/topology.test.js +327 -0
  156. package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
  157. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts +2 -0
  158. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts.map +1 -0
  159. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js +411 -0
  160. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js.map +1 -0
  161. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
  162. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
  163. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
  164. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
  165. package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts +2 -0
  166. package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts.map +1 -0
  167. package/dist/tests/tooling/lemma-library/lemma-library.test.js +197 -0
  168. package/dist/tests/tooling/lemma-library/lemma-library.test.js.map +1 -0
  169. package/dist/tests/tooling/provenance/ledger.test.d.ts +2 -0
  170. package/dist/tests/tooling/provenance/ledger.test.d.ts.map +1 -0
  171. package/dist/tests/tooling/provenance/ledger.test.js +545 -0
  172. package/dist/tests/tooling/provenance/ledger.test.js.map +1 -0
  173. package/dist/tooling/exporters/coq-v2/index.d.ts +68 -0
  174. package/dist/tooling/exporters/coq-v2/index.d.ts.map +1 -0
  175. package/dist/tooling/exporters/coq-v2/index.js +692 -0
  176. package/dist/tooling/exporters/coq-v2/index.js.map +1 -0
  177. package/dist/tooling/exporters/lean4/index.d.ts +47 -0
  178. package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
  179. package/dist/tooling/exporters/lean4/index.js +423 -0
  180. package/dist/tooling/exporters/lean4/index.js.map +1 -0
  181. package/dist/tooling/lemma-library/apply.d.ts +9 -0
  182. package/dist/tooling/lemma-library/apply.d.ts.map +1 -0
  183. package/dist/tooling/lemma-library/apply.js +94 -0
  184. package/dist/tooling/lemma-library/apply.js.map +1 -0
  185. package/dist/tooling/lemma-library/arithmetic.d.ts +3 -0
  186. package/dist/tooling/lemma-library/arithmetic.d.ts.map +1 -0
  187. package/dist/tooling/lemma-library/arithmetic.js +176 -0
  188. package/dist/tooling/lemma-library/arithmetic.js.map +1 -0
  189. package/dist/tooling/lemma-library/firstorder.d.ts +3 -0
  190. package/dist/tooling/lemma-library/firstorder.d.ts.map +1 -0
  191. package/dist/tooling/lemma-library/firstorder.js +136 -0
  192. package/dist/tooling/lemma-library/firstorder.js.map +1 -0
  193. package/dist/tooling/lemma-library/index.d.ts +13 -0
  194. package/dist/tooling/lemma-library/index.d.ts.map +1 -0
  195. package/dist/tooling/lemma-library/index.js +32 -0
  196. package/dist/tooling/lemma-library/index.js.map +1 -0
  197. package/dist/tooling/lemma-library/library.d.ts +34 -0
  198. package/dist/tooling/lemma-library/library.d.ts.map +1 -0
  199. package/dist/tooling/lemma-library/library.js +126 -0
  200. package/dist/tooling/lemma-library/library.js.map +1 -0
  201. package/dist/tooling/lemma-library/modal.d.ts +3 -0
  202. package/dist/tooling/lemma-library/modal.d.ts.map +1 -0
  203. package/dist/tooling/lemma-library/modal.js +138 -0
  204. package/dist/tooling/lemma-library/modal.js.map +1 -0
  205. package/dist/tooling/lemma-library/propositional.d.ts +3 -0
  206. package/dist/tooling/lemma-library/propositional.d.ts.map +1 -0
  207. package/dist/tooling/lemma-library/propositional.js +265 -0
  208. package/dist/tooling/lemma-library/propositional.js.map +1 -0
  209. package/dist/tooling/lemma-library/set-theory.d.ts +3 -0
  210. package/dist/tooling/lemma-library/set-theory.d.ts.map +1 -0
  211. package/dist/tooling/lemma-library/set-theory.js +134 -0
  212. package/dist/tooling/lemma-library/set-theory.js.map +1 -0
  213. package/dist/tooling/lemma-library/standard.d.ts +3 -0
  214. package/dist/tooling/lemma-library/standard.d.ts.map +1 -0
  215. package/dist/tooling/lemma-library/standard.js +27 -0
  216. package/dist/tooling/lemma-library/standard.js.map +1 -0
  217. package/dist/tooling/lemma-library/tfidf.d.ts +5 -0
  218. package/dist/tooling/lemma-library/tfidf.d.ts.map +1 -0
  219. package/dist/tooling/lemma-library/tfidf.js +100 -0
  220. package/dist/tooling/lemma-library/tfidf.js.map +1 -0
  221. package/dist/tooling/lemma-library/tokenize.d.ts +2 -0
  222. package/dist/tooling/lemma-library/tokenize.d.ts.map +1 -0
  223. package/dist/tooling/lemma-library/tokenize.js +74 -0
  224. package/dist/tooling/lemma-library/tokenize.js.map +1 -0
  225. package/dist/tooling/lemma-library/types.d.ts +53 -0
  226. package/dist/tooling/lemma-library/types.d.ts.map +1 -0
  227. package/dist/tooling/lemma-library/types.js +10 -0
  228. package/dist/tooling/lemma-library/types.js.map +1 -0
  229. package/dist/tooling/provenance/index.d.ts +3 -0
  230. package/dist/tooling/provenance/index.d.ts.map +1 -0
  231. package/dist/tooling/provenance/index.js +16 -0
  232. package/dist/tooling/provenance/index.js.map +1 -0
  233. package/dist/tooling/provenance/ledger.d.ts +89 -0
  234. package/dist/tooling/provenance/ledger.d.ts.map +1 -0
  235. package/dist/tooling/provenance/ledger.js +439 -0
  236. package/dist/tooling/provenance/ledger.js.map +1 -0
  237. package/dist/tooling/provenance/types.d.ts +70 -0
  238. package/dist/tooling/provenance/types.d.ts.map +1 -0
  239. package/dist/tooling/provenance/types.js +14 -0
  240. package/dist/tooling/provenance/types.js.map +1 -0
  241. package/package.json +1 -1
@@ -0,0 +1,638 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Real Analysis — Primitivas formales (límites ε-δ, continuidad,
4
+ // derivadas, integrales, series, Taylor, MVT)
5
+ // ============================================================
6
+ // Estas primitivas son *numéricas*: no decidimos análisis real
7
+ // exactamente (eso es indecidible en general), sino que verificamos
8
+ // claims con tolerancia explícita ε > 0 sobre muestreos finitos.
9
+ //
10
+ // Convención: una función real es `RealFn = (x: number) => number`.
11
+ // Toda función que dependa de muestreos expone `eps`/`samples`/`tol`
12
+ // para que quien llama pueda ajustar el rigor numérico.
13
+ // ============================================================
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.verifyLimit = verifyLimit;
16
+ exports.findLimit = findLimit;
17
+ exports.isContinuousAt = isContinuousAt;
18
+ exports.isUniformlyContinuous = isUniformlyContinuous;
19
+ exports.findDiscontinuities = findDiscontinuities;
20
+ exports.derivative = derivative;
21
+ exports.nthDerivative = nthDerivative;
22
+ exports.isDifferentiableAt = isDifferentiableAt;
23
+ exports.findCriticalPoints = findCriticalPoints;
24
+ exports.integrate = integrate;
25
+ exports.ratioTest = ratioTest;
26
+ exports.rootTest = rootTest;
27
+ exports.partialSum = partialSum;
28
+ exports.sequenceLimit = sequenceLimit;
29
+ exports.meanValueTheorem = meanValueTheorem;
30
+ exports.taylorPolynomial = taylorPolynomial;
31
+ exports.taylorRemainderBound = taylorRemainderBound;
32
+ // ── Constantes y helpers internos ────────────────────────────
33
+ const DEFAULT_EPS = 1e-6;
34
+ const DEFAULT_SAMPLES = 200;
35
+ function isFiniteNumber(x) {
36
+ return Number.isFinite(x);
37
+ }
38
+ function safeEval(fn, x) {
39
+ try {
40
+ const v = fn(x);
41
+ return isFiniteNumber(v) ? v : null;
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Verifica numéricamente la afirmación
49
+ * ∀ε>0 ∃δ>0 ∀x (0 < |x-point| < δ → |fn(x)-value| < ε)
50
+ * para el ε dado. Devuelve δ sugerido (o counterexample si falla
51
+ * incluso con δ extremadamente pequeño).
52
+ *
53
+ * Estrategia: bisecta δ desde 1 hacia abajo, muestreando puntos en
54
+ * (point-δ, point) ∪ (point, point+δ); si todos cumplen |f(x)-L|<ε,
55
+ * δ es válido. Si no encontramos δ válido tras `maxIter` iteraciones,
56
+ * el último x que falló se reporta como counterexample.
57
+ */
58
+ function verifyLimit(claim, epsilon, deltaFinder) {
59
+ if (epsilon <= 0)
60
+ return { holds: false };
61
+ const { fn, point, value } = claim;
62
+ const maxIter = 60;
63
+ const samplesPerDelta = 40;
64
+ let delta = deltaFinder ? deltaFinder(epsilon) : 1.0;
65
+ if (!isFiniteNumber(delta) || delta <= 0)
66
+ delta = 1.0;
67
+ let lastCounter;
68
+ for (let iter = 0; iter < maxIter; iter++) {
69
+ let allOk = true;
70
+ let worstX = point;
71
+ let worstDiff = -Infinity;
72
+ for (let i = 1; i <= samplesPerDelta; i++) {
73
+ const frac = i / (samplesPerDelta + 1);
74
+ const dx = delta * frac;
75
+ const candidates = [point + dx, point - dx];
76
+ for (const x of candidates) {
77
+ if (x === point)
78
+ continue;
79
+ const v = safeEval(fn, x);
80
+ if (v === null) {
81
+ allOk = false;
82
+ worstX = x;
83
+ worstDiff = Infinity;
84
+ break;
85
+ }
86
+ const diff = Math.abs(v - value);
87
+ if (diff > worstDiff) {
88
+ worstDiff = diff;
89
+ worstX = x;
90
+ }
91
+ if (diff >= epsilon) {
92
+ allOk = false;
93
+ // seguimos para encontrar el peor punto, pero podríamos break
94
+ }
95
+ }
96
+ if (!allOk && worstDiff === Infinity)
97
+ break;
98
+ }
99
+ if (allOk && worstDiff < epsilon) {
100
+ return { holds: true, suggestedDelta: delta };
101
+ }
102
+ lastCounter = worstX;
103
+ delta = delta / 2;
104
+ if (delta < 1e-15)
105
+ break;
106
+ }
107
+ return { holds: false, counterexample: lastCounter };
108
+ }
109
+ /**
110
+ * Encuentra (o detecta divergencia/indeterminación de) lim_{x→point} fn(x)
111
+ * por muestreo bilateral con refinamiento sucesivo.
112
+ *
113
+ * Devuelve:
114
+ * • número L si las dos colas convergen al mismo valor con tolerancia
115
+ * • 'diverges' si crece sin cota
116
+ * • 'unknown' si las colas no coinciden (límite no existe / discontinuidad de salto)
117
+ */
118
+ function findLimit(fn, point, opts) {
119
+ const tol = opts?.tolerance ?? 1e-7;
120
+ const samples = opts?.samples ?? 30;
121
+ const leftVals = [];
122
+ const rightVals = [];
123
+ for (let k = 1; k <= samples; k++) {
124
+ const h = Math.pow(0.5, k);
125
+ const vl = safeEval(fn, point - h);
126
+ const vr = safeEval(fn, point + h);
127
+ if (vl !== null)
128
+ leftVals.push(vl);
129
+ if (vr !== null)
130
+ rightVals.push(vr);
131
+ }
132
+ if (leftVals.length < 5 || rightVals.length < 5)
133
+ return 'unknown';
134
+ const tail = (arr) => arr.slice(-Math.min(5, arr.length));
135
+ const lt = tail(leftVals);
136
+ const rt = tail(rightVals);
137
+ // detecto divergencia: valores absolutos crecen sin cota
138
+ const lastL = lt[lt.length - 1];
139
+ const lastR = rt[rt.length - 1];
140
+ if (Math.abs(lastL) > 1e12 &&
141
+ Math.abs(lastL) > Math.abs(lt[0]) * 1e3 &&
142
+ Math.abs(lastR) > 1e12 &&
143
+ Math.abs(lastR) > Math.abs(rt[0]) * 1e3) {
144
+ return 'diverges';
145
+ }
146
+ // estabilidad de las colas
147
+ const stable = (arr) => {
148
+ const last = arr[arr.length - 1];
149
+ const prev = arr[arr.length - 2];
150
+ return Math.abs(last - prev) < tol * (1 + Math.abs(last));
151
+ };
152
+ if (!stable(lt) || !stable(rt)) {
153
+ // ¿ambos divergen al mismo infinito?
154
+ const li = lt[lt.length - 1];
155
+ const ri = rt[rt.length - 1];
156
+ if (Math.abs(li) > 1e10 && Math.abs(ri) > 1e10 && Math.sign(li) === Math.sign(ri)) {
157
+ return 'diverges';
158
+ }
159
+ return 'unknown';
160
+ }
161
+ if (Math.abs(lastL - lastR) > tol * 100 * (1 + Math.abs(lastL))) {
162
+ return 'unknown';
163
+ }
164
+ return (lastL + lastR) / 2;
165
+ }
166
+ // ── 2. Continuidad ───────────────────────────────────────────
167
+ /**
168
+ * fn es continua en `point` si lim_{x→point} fn(x) = fn(point) con tol `eps`.
169
+ */
170
+ function isContinuousAt(fn, point, eps = DEFAULT_EPS) {
171
+ const v0 = safeEval(fn, point);
172
+ if (v0 === null)
173
+ return false;
174
+ const lim = findLimit(fn, point, { tolerance: eps / 10 });
175
+ if (lim === 'diverges' || lim === 'unknown')
176
+ return false;
177
+ return Math.abs(lim - v0) < eps;
178
+ }
179
+ /**
180
+ * Verificación numérica de continuidad uniforme en [a,b]:
181
+ * ∀ε ∃δ ∀x,y∈[a,b] (|x-y|<δ → |f(x)-f(y)|<ε)
182
+ * Estrategia: para cada δ candidato muestreamos pares (x_i, x_i+δ)
183
+ * cubriendo el intervalo y verificamos que |f(x)-f(x+δ)| < eps en todos.
184
+ */
185
+ function isUniformlyContinuous(fn, domain, eps = DEFAULT_EPS) {
186
+ const [a, b] = domain;
187
+ if (!(b > a))
188
+ return false;
189
+ // probamos un δ "razonable" basado en eps y la longitud del dominio
190
+ const candidateDeltas = [(b - a) / 1000, (b - a) / 10000, (b - a) / 100000];
191
+ for (const delta of candidateDeltas) {
192
+ const steps = Math.min(10000, Math.max(50, Math.floor((b - a) / delta) + 1));
193
+ let ok = true;
194
+ for (let i = 0; i < steps; i++) {
195
+ const x = a + (i / steps) * (b - a);
196
+ const v1 = safeEval(fn, x);
197
+ const v2 = safeEval(fn, x + delta);
198
+ if (v1 === null || v2 === null) {
199
+ ok = false;
200
+ break;
201
+ }
202
+ if (Math.abs(v1 - v2) >= eps) {
203
+ ok = false;
204
+ break;
205
+ }
206
+ }
207
+ if (ok)
208
+ return true;
209
+ }
210
+ return false;
211
+ }
212
+ /**
213
+ * Detecta puntos de discontinuidad por muestreo + chequeo local.
214
+ */
215
+ function findDiscontinuities(fn, domain, samples = DEFAULT_SAMPLES) {
216
+ const [a, b] = domain;
217
+ const out = [];
218
+ const step = (b - a) / samples;
219
+ // valores y NaN/Inf candidates
220
+ const ys = [];
221
+ for (let i = 0; i <= samples; i++) {
222
+ ys.push(safeEval(fn, a + i * step));
223
+ }
224
+ for (let i = 0; i < samples; i++) {
225
+ const x = a + i * step;
226
+ const y1 = ys[i];
227
+ const y2 = ys[i + 1];
228
+ if (y1 === null || y2 === null) {
229
+ if (!out.some((p) => Math.abs(p - x) < step * 2))
230
+ out.push(x);
231
+ continue;
232
+ }
233
+ // salto local: |Δy| es mucho mayor que la media local
234
+ const expected = 100 * step * Math.max(1, Math.abs(y1));
235
+ if (Math.abs(y2 - y1) > expected + 1) {
236
+ // confirma localmente
237
+ const mid = x + step / 2;
238
+ if (!isContinuousAt(fn, mid, 1e-3)) {
239
+ if (!out.some((p) => Math.abs(p - mid) < step * 2))
240
+ out.push(mid);
241
+ }
242
+ }
243
+ }
244
+ return out;
245
+ }
246
+ function derivative(fn, x, opts) {
247
+ const h = opts?.h ?? 1e-5;
248
+ const method = opts?.method ?? 'central';
249
+ switch (method) {
250
+ case 'forward': {
251
+ const v = (fn(x + h) - fn(x)) / h;
252
+ return { value: v, method };
253
+ }
254
+ case 'backward': {
255
+ const v = (fn(x) - fn(x - h)) / h;
256
+ return { value: v, method };
257
+ }
258
+ case 'central': {
259
+ const v = (fn(x + h) - fn(x - h)) / (2 * h);
260
+ return { value: v, method };
261
+ }
262
+ case 'richardson': {
263
+ // Richardson extrapolation: D = (4·D(h/2) - D(h)) / 3 con central diff
264
+ const D = (step) => (fn(x + step) - fn(x - step)) / (2 * step);
265
+ const d1 = D(h);
266
+ const d2 = D(h / 2);
267
+ const v = (4 * d2 - d1) / 3;
268
+ return { value: v, method };
269
+ }
270
+ }
271
+ }
272
+ /**
273
+ * n-ésima derivada por diferencias finitas centrales iteradas (fórmula
274
+ * con coeficientes binomiales con signo alternado).
275
+ *
276
+ * f^(n)(x) ≈ (1/h^n) · Σ_{k=0..n} (-1)^k C(n,k) f(x + (n/2 - k)·h)
277
+ */
278
+ function nthDerivative(fn, x, n, h) {
279
+ if (!Number.isInteger(n) || n < 0) {
280
+ throw new Error(`nthDerivative: n debe ser entero ≥ 0, recibido ${n}`);
281
+ }
282
+ if (n === 0)
283
+ return fn(x);
284
+ // Heurística: derivadas altas necesitan h más grande para no perder precisión por roundoff
285
+ const step = h ?? Math.pow(1e-3, 1 / Math.max(1, n));
286
+ let sum = 0;
287
+ for (let k = 0; k <= n; k++) {
288
+ const coef = binomial(n, k) * (k % 2 === 0 ? 1 : -1);
289
+ const xi = x + (n / 2 - k) * step;
290
+ sum += coef * fn(xi);
291
+ }
292
+ return sum / Math.pow(step, n);
293
+ }
294
+ function binomial(n, k) {
295
+ if (k < 0 || k > n)
296
+ return 0;
297
+ if (k === 0 || k === n)
298
+ return 1;
299
+ let result = 1;
300
+ for (let i = 1; i <= k; i++) {
301
+ result = (result * (n - i + 1)) / i;
302
+ }
303
+ return result;
304
+ }
305
+ /**
306
+ * Diferenciable en `point` si las derivadas laterales coinciden con tolerancia.
307
+ */
308
+ function isDifferentiableAt(fn, point, eps = DEFAULT_EPS) {
309
+ if (!isContinuousAt(fn, point, eps))
310
+ return false;
311
+ const h = 1e-5;
312
+ const fwd = (fn(point + h) - fn(point)) / h;
313
+ const bwd = (fn(point) - fn(point - h)) / h;
314
+ if (!isFiniteNumber(fwd) || !isFiniteNumber(bwd))
315
+ return false;
316
+ return Math.abs(fwd - bwd) < eps * 1000;
317
+ }
318
+ /**
319
+ * Encuentra puntos críticos (f'(x) ≈ 0) por bisección en cambios de signo
320
+ * de la derivada numérica.
321
+ */
322
+ function findCriticalPoints(fn, domain, samples = DEFAULT_SAMPLES) {
323
+ const [a, b] = domain;
324
+ const out = [];
325
+ const dx = (b - a) / samples;
326
+ let prev = derivative(fn, a, { method: 'central' }).value;
327
+ for (let i = 1; i <= samples; i++) {
328
+ const xi = a + i * dx;
329
+ const cur = derivative(fn, xi, { method: 'central' }).value;
330
+ if (!isFiniteNumber(prev) || !isFiniteNumber(cur)) {
331
+ prev = cur;
332
+ continue;
333
+ }
334
+ if (prev * cur < 0 || cur === 0) {
335
+ // bisección
336
+ let lo = a + (i - 1) * dx;
337
+ let hi = xi;
338
+ for (let it = 0; it < 60; it++) {
339
+ const mid = (lo + hi) / 2;
340
+ const dmid = derivative(fn, mid, { method: 'central' }).value;
341
+ const dlo = derivative(fn, lo, { method: 'central' }).value;
342
+ if (Math.abs(dmid) < 1e-9) {
343
+ lo = mid;
344
+ hi = mid;
345
+ break;
346
+ }
347
+ if (dlo * dmid < 0)
348
+ hi = mid;
349
+ else
350
+ lo = mid;
351
+ }
352
+ const root = (lo + hi) / 2;
353
+ if (!out.some((p) => Math.abs(p - root) < dx / 4))
354
+ out.push(root);
355
+ }
356
+ prev = cur;
357
+ }
358
+ return out;
359
+ }
360
+ function integrate(fn, from, to, opts) {
361
+ const method = opts?.method ?? 'simpson';
362
+ const n = opts?.subdivisions ?? 1024;
363
+ if (from === to)
364
+ return { value: 0, method };
365
+ const sign = from < to ? 1 : -1;
366
+ const a = Math.min(from, to);
367
+ const b = Math.max(from, to);
368
+ let value = 0;
369
+ switch (method) {
370
+ case 'trapezoidal':
371
+ value = trapezoidal(fn, a, b, n);
372
+ break;
373
+ case 'simpson':
374
+ value = simpson(fn, a, b, n % 2 === 0 ? n : n + 1);
375
+ break;
376
+ case 'romberg':
377
+ value = romberg(fn, a, b, Math.min(12, Math.max(4, Math.log2(n) | 0)));
378
+ break;
379
+ case 'gaussian':
380
+ value = gaussianAdaptive(fn, a, b, n);
381
+ break;
382
+ }
383
+ return { value: sign * value, method };
384
+ }
385
+ function trapezoidal(fn, a, b, n) {
386
+ const h = (b - a) / n;
387
+ let sum = (fn(a) + fn(b)) / 2;
388
+ for (let i = 1; i < n; i++)
389
+ sum += fn(a + i * h);
390
+ return sum * h;
391
+ }
392
+ function simpson(fn, a, b, n) {
393
+ // n debe ser par
394
+ const h = (b - a) / n;
395
+ let sum = fn(a) + fn(b);
396
+ for (let i = 1; i < n; i++) {
397
+ const c = i % 2 === 0 ? 2 : 4;
398
+ sum += c * fn(a + i * h);
399
+ }
400
+ return (sum * h) / 3;
401
+ }
402
+ function romberg(fn, a, b, levels) {
403
+ const R = [];
404
+ for (let i = 0; i < levels; i++)
405
+ R.push(new Array(levels).fill(0));
406
+ R[0][0] = ((b - a) / 2) * (fn(a) + fn(b));
407
+ for (let i = 1; i < levels; i++) {
408
+ const n = 1 << i;
409
+ const h = (b - a) / n;
410
+ let s = 0;
411
+ for (let k = 1; k <= n; k += 2)
412
+ s += fn(a + k * h);
413
+ R[i][0] = R[i - 1][0] / 2 + s * h;
414
+ for (let j = 1; j <= i; j++) {
415
+ const p = 1 << (2 * j);
416
+ R[i][j] = (p * R[i][j - 1] - R[i - 1][j - 1]) / (p - 1);
417
+ }
418
+ }
419
+ return R[levels - 1][levels - 1];
420
+ }
421
+ // Gauss-Legendre de 5 puntos sobre cada subintervalo (adaptativo simple).
422
+ function gaussianAdaptive(fn, a, b, n) {
423
+ const segs = Math.max(1, Math.floor(n / 8));
424
+ const w = [0.2369268851, 0.4786286705, 0.5688888889, 0.4786286705, 0.2369268851];
425
+ const t = [-0.9061798459, -0.5384693101, 0.0, 0.5384693101, 0.9061798459];
426
+ const h = (b - a) / segs;
427
+ let total = 0;
428
+ for (let s = 0; s < segs; s++) {
429
+ const x0 = a + s * h;
430
+ const x1 = x0 + h;
431
+ const mid = (x0 + x1) / 2;
432
+ const half = (x1 - x0) / 2;
433
+ let sub = 0;
434
+ for (let i = 0; i < 5; i++)
435
+ sub += w[i] * fn(mid + half * t[i]);
436
+ total += sub * half;
437
+ }
438
+ return total;
439
+ }
440
+ /**
441
+ * Test de la razón sobre coeficientes de una serie Σ a_n (no Σ a_n x^n):
442
+ * L = lim |a_{n+1}/a_n|
443
+ * L < 1 ⇒ converge ; L > 1 ⇒ diverge ; L = 1 ⇒ indeciso.
444
+ */
445
+ function ratioTest(coefficients) {
446
+ if (coefficients.length < 3) {
447
+ return { converges: false, reason: 'insuficientes coeficientes' };
448
+ }
449
+ const ratios = [];
450
+ for (let i = 1; i < coefficients.length; i++) {
451
+ const a = coefficients[i - 1];
452
+ const b = coefficients[i];
453
+ if (a === 0)
454
+ continue;
455
+ ratios.push(Math.abs(b / a));
456
+ }
457
+ if (ratios.length === 0)
458
+ return { converges: false, reason: 'todos los coeficientes ceros' };
459
+ // limit aproximado por las últimas razones + chequeo de tendencia
460
+ const tail = ratios.slice(-Math.min(5, ratios.length));
461
+ const L = tail.reduce((s, x) => s + x, 0) / tail.length;
462
+ // tendencia: si las razones siguen creciendo hacia 1 desde abajo, es inconcluyente
463
+ // (ej: serie armónica n/(n+1) → 1⁻)
464
+ const trendingToOne = tail.length >= 3 &&
465
+ tail[tail.length - 1] > tail[0] &&
466
+ tail[tail.length - 1] > 0.9 &&
467
+ tail[tail.length - 1] < 1;
468
+ if (L < 0.95 && !trendingToOne) {
469
+ const sum = coefficients.reduce((s, x) => s + x, 0);
470
+ return { converges: true, sumApprox: sum, reason: `L≈${L.toFixed(4)} < 1` };
471
+ }
472
+ if (L > 1.05) {
473
+ return { converges: false, reason: `L≈${L.toFixed(4)} > 1` };
474
+ }
475
+ return { converges: false, reason: `L≈${L.toFixed(4)} ≈ 1 (test inconcluyente)` };
476
+ }
477
+ /**
478
+ * Test de la raíz: L = lim sup |a_n|^{1/n}.
479
+ */
480
+ function rootTest(coefficients) {
481
+ if (coefficients.length < 3) {
482
+ return { converges: false, reason: 'insuficientes coeficientes' };
483
+ }
484
+ const roots = [];
485
+ for (let n = 1; n < coefficients.length; n++) {
486
+ const an = Math.abs(coefficients[n]);
487
+ if (an === 0)
488
+ continue;
489
+ roots.push(Math.pow(an, 1 / n));
490
+ }
491
+ if (roots.length === 0)
492
+ return { converges: true, sumApprox: 0, reason: 'todos los coeficientes ceros' };
493
+ const tail = roots.slice(-Math.min(5, roots.length));
494
+ const L = Math.max(...tail);
495
+ if (L < 0.95) {
496
+ const sum = coefficients.reduce((s, x) => s + x, 0);
497
+ return { converges: true, sumApprox: sum, reason: `L≈${L.toFixed(4)} < 1` };
498
+ }
499
+ if (L > 1.05) {
500
+ return { converges: false, reason: `L≈${L.toFixed(4)} > 1` };
501
+ }
502
+ return { converges: false, reason: `L≈${L.toFixed(4)} ≈ 1 (test inconcluyente)` };
503
+ }
504
+ function partialSum(fn, terms) {
505
+ let s = 0;
506
+ for (let n = 0; n < terms; n++)
507
+ s += fn(n);
508
+ return s;
509
+ }
510
+ // ── 6. Sucesiones ────────────────────────────────────────────
511
+ function sequenceLimit(seq, opts) {
512
+ const N = opts?.maxTerms ?? 2000;
513
+ const tol = opts?.tolerance ?? 1e-7;
514
+ const vals = [];
515
+ for (let n = 1; n <= N; n++) {
516
+ const v = seq(n);
517
+ if (!isFiniteNumber(v))
518
+ return { converges: false };
519
+ vals.push(v);
520
+ }
521
+ const last = vals[vals.length - 1];
522
+ const prev = vals[vals.length - 2];
523
+ const prev2 = vals[vals.length - 3];
524
+ const d1 = Math.abs(last - prev);
525
+ const d2 = Math.abs(prev - prev2);
526
+ // Aceptamos convergencia si:
527
+ // (a) adyacentes están dentro de tol relativo a la magnitud, O
528
+ // (b) ambas diferencias son menores que tol absoluto y decrecientes
529
+ // (Cauchy con cola pequeña, típico de seq → 0)
530
+ const denom = 1 + Math.abs(last);
531
+ const cauchyRel = d1 < tol * denom;
532
+ const cauchyAbs = d1 < tol && d2 < tol && d1 <= d2 * 1.5;
533
+ if (cauchyRel || cauchyAbs) {
534
+ let rate = 'unknown';
535
+ if (d2 > 0) {
536
+ const ratio = d1 / d2;
537
+ if (ratio < 0.5 && ratio > 0)
538
+ rate = 'linear';
539
+ if (ratio < 0.05)
540
+ rate = 'quadratic';
541
+ }
542
+ return { converges: true, limit: last, rate };
543
+ }
544
+ return { converges: false };
545
+ }
546
+ // ── 7. Mean Value Theorem ────────────────────────────────────
547
+ /**
548
+ * Busca c ∈ (a,b) tal que f'(c) = (f(b)-f(a))/(b-a).
549
+ * Si fn es continua en [a,b] y derivable en (a,b), por MVT existe.
550
+ * Aquí asumimos eso y buscamos c por bisección sobre f'(x) - slope.
551
+ */
552
+ function meanValueTheorem(fn, derivativeFn, a, b, tolerance = 1e-7) {
553
+ if (!(b > a))
554
+ return { holds: false };
555
+ const slope = (fn(b) - fn(a)) / (b - a);
556
+ if (!isFiniteNumber(slope))
557
+ return { holds: false };
558
+ const g = (x) => derivativeFn(x) - slope;
559
+ // muestreo para encontrar cambio de signo
560
+ const samples = 200;
561
+ let prevX = a + (b - a) / (samples + 1);
562
+ let prevG = g(prevX);
563
+ for (let i = 2; i <= samples; i++) {
564
+ const xi = a + (i * (b - a)) / (samples + 1);
565
+ const gi = g(xi);
566
+ if (!isFiniteNumber(gi))
567
+ continue;
568
+ if (prevG * gi <= 0) {
569
+ // bisección
570
+ let lo = prevX, hi = xi;
571
+ for (let it = 0; it < 80; it++) {
572
+ const mid = (lo + hi) / 2;
573
+ const gm = g(mid);
574
+ if (Math.abs(gm) < tolerance)
575
+ return { holds: true, c: mid };
576
+ if (g(lo) * gm < 0)
577
+ hi = mid;
578
+ else
579
+ lo = mid;
580
+ }
581
+ return { holds: true, c: (lo + hi) / 2 };
582
+ }
583
+ prevX = xi;
584
+ prevG = gi;
585
+ }
586
+ return { holds: false };
587
+ }
588
+ // ── 8. Taylor ────────────────────────────────────────────────
589
+ /**
590
+ * Polinomio de Taylor de orden N de `fn` centrado en `center`, devuelto
591
+ * como función. Las derivadas se calculan numéricamente con `nthDerivative`.
592
+ */
593
+ function taylorPolynomial(fn, center, order) {
594
+ if (!Number.isInteger(order) || order < 0) {
595
+ throw new Error(`taylorPolynomial: order debe ser entero ≥ 0`);
596
+ }
597
+ const coefs = [];
598
+ let fact = 1;
599
+ for (let k = 0; k <= order; k++) {
600
+ if (k > 0)
601
+ fact *= k;
602
+ const dk = k === 0 ? fn(center) : nthDerivative(fn, center, k);
603
+ coefs.push(dk / fact);
604
+ }
605
+ return (x) => {
606
+ let s = 0;
607
+ let pow = 1;
608
+ const dx = x - center;
609
+ for (let k = 0; k <= order; k++) {
610
+ s += coefs[k] * pow;
611
+ pow *= dx;
612
+ }
613
+ return s;
614
+ };
615
+ }
616
+ /**
617
+ * Cota grosera del resto de Lagrange: |R_n(x)| ≤ M·|x-c|^(n+1)/(n+1)!
618
+ * con M estimado como sup |f^(n+1)| sobre un muestreo entre c y x.
619
+ */
620
+ function taylorRemainderBound(fn, center, x, order) {
621
+ if (!Number.isInteger(order) || order < 0)
622
+ return Infinity;
623
+ const samples = 30;
624
+ const a = Math.min(center, x);
625
+ const b = Math.max(center, x);
626
+ let M = 0;
627
+ for (let i = 0; i <= samples; i++) {
628
+ const xi = a + ((b - a) * i) / samples;
629
+ const v = Math.abs(nthDerivative(fn, xi, order + 1));
630
+ if (isFiniteNumber(v) && v > M)
631
+ M = v;
632
+ }
633
+ let fact = 1;
634
+ for (let k = 1; k <= order + 1; k++)
635
+ fact *= k;
636
+ return (M * Math.pow(Math.abs(x - center), order + 1)) / fact;
637
+ }
638
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/real-analysis/index.ts"],"names":[],"mappings":"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"}