@cortex-js/compute-engine 0.32.1 → 0.34.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 (168) hide show
  1. package/dist/compute-engine.esm.js +39456 -28560
  2. package/dist/compute-engine.min.esm.js +80 -59
  3. package/dist/compute-engine.min.umd.js +80 -59
  4. package/dist/compute-engine.umd.js +39464 -28585
  5. package/dist/math-json.esm.js +2 -2
  6. package/dist/math-json.min.esm.js +2 -130
  7. package/dist/math-json.min.umd.js +2 -2
  8. package/dist/math-json.umd.js +2 -2
  9. package/dist/types/common/ansi-codes.d.ts +1 -1
  10. package/dist/types/common/configuration-change.d.ts +1 -1
  11. package/dist/types/common/fuzzy-string-match.d.ts +1 -1
  12. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  13. package/dist/types/common/interruptible.d.ts +1 -1
  14. package/dist/types/common/one-of.d.ts +2 -1
  15. package/dist/types/common/signals.d.ts +1 -1
  16. package/dist/types/common/type/ast-nodes.d.ts +1 -1
  17. package/dist/types/common/type/boxed-type.d.ts +1 -1
  18. package/dist/types/common/type/lexer.d.ts +1 -1
  19. package/dist/types/common/type/parse.d.ts +1 -1
  20. package/dist/types/common/type/parser.d.ts +1 -1
  21. package/dist/types/common/type/primitive.d.ts +1 -1
  22. package/dist/types/common/type/reduce.d.ts +12 -0
  23. package/dist/types/common/type/serialize.d.ts +1 -1
  24. package/dist/types/common/type/subtype.d.ts +1 -1
  25. package/dist/types/common/type/type-builder.d.ts +1 -1
  26. package/dist/types/common/type/types.d.ts +1 -1
  27. package/dist/types/common/type/utils.d.ts +1 -1
  28. package/dist/types/common/utils.d.ts +1 -1
  29. package/dist/types/compute-engine/assume.d.ts +37 -1
  30. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +6 -3
  31. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  32. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  33. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  34. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  35. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  36. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  37. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  38. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +6 -2
  39. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  40. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  41. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  42. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  43. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +5 -1
  44. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +2 -1
  45. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +5 -1
  46. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  47. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  48. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  49. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  50. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  51. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  52. package/dist/types/compute-engine/boxed-expression/factor.d.ts +47 -1
  53. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  54. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  55. package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
  56. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  57. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  58. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  59. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  60. package/dist/types/compute-engine/boxed-expression/product.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +60 -0
  66. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/terms.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -2
  69. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  70. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  71. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  72. package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
  73. package/dist/types/compute-engine/compilation/glsl-target.d.ts +63 -0
  74. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  75. package/dist/types/compute-engine/compilation/types.d.ts +58 -1
  76. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  77. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  78. package/dist/types/compute-engine/global-types.d.ts +381 -10
  79. package/dist/types/compute-engine/index.d.ts +186 -3
  80. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  81. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  82. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  83. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  84. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  85. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  86. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  87. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  88. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  89. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  90. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  91. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  92. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  93. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +10 -1
  94. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  95. package/dist/types/compute-engine/latex-syntax/parse.d.ts +21 -1
  96. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  97. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  98. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  99. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  100. package/dist/types/compute-engine/latex-syntax/types.d.ts +33 -3
  101. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  102. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  103. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  104. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  105. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  106. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  107. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  108. package/dist/types/compute-engine/library/core.d.ts +1 -1
  109. package/dist/types/compute-engine/library/invisible-operator.d.ts +1 -1
  110. package/dist/types/compute-engine/library/library.d.ts +1 -1
  111. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  112. package/dist/types/compute-engine/library/logic-analysis.d.ts +189 -4
  113. package/dist/types/compute-engine/library/logic-utils.d.ts +1 -5
  114. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  115. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  116. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  117. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  118. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  119. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  120. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  121. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  122. package/dist/types/compute-engine/library/utils.d.ts +60 -2
  123. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  124. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  125. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  126. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  127. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  128. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  129. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  130. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  131. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  132. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  133. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  134. package/dist/types/compute-engine/numerics/numeric.d.ts +2 -2
  135. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  136. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  137. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  138. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  139. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  140. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  141. package/dist/types/compute-engine/numerics/types.d.ts +2 -1
  142. package/dist/types/compute-engine/oeis.d.ts +85 -0
  143. package/dist/types/compute-engine/sequence.d.ts +120 -0
  144. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  145. package/dist/types/compute-engine/symbolic/derivative.d.ts +17 -2
  146. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  147. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +33 -0
  148. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +130 -0
  149. package/dist/types/compute-engine/symbolic/fu.d.ts +48 -0
  150. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +12 -0
  151. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +15 -0
  152. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +2 -0
  153. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +14 -0
  154. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +15 -0
  155. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +15 -0
  156. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  157. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -11
  158. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  159. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +2 -0
  160. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  161. package/dist/types/compute-engine/tensor/tensors.d.ts +3 -3
  162. package/dist/types/compute-engine/types.d.ts +1 -1
  163. package/dist/types/compute-engine.d.ts +5 -1
  164. package/dist/types/math-json/symbols.d.ts +1 -1
  165. package/dist/types/math-json/types.d.ts +1 -1
  166. package/dist/types/math-json/utils.d.ts +1 -1
  167. package/dist/types/math-json.d.ts +2 -2
  168. package/package.json +2 -2
@@ -1,8 +1,37 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  /**
3
3
  * Quantifier domain helpers and boolean analysis functions.
4
4
  * Extracted from logic.ts for better code organization.
5
5
  */
6
+ /**
7
+ * Result of extracting a finite domain from an Element expression.
8
+ * - `status: 'success'` - Domain was successfully extracted
9
+ * - `status: 'non-enumerable'` - Domain exists but cannot be enumerated (e.g., infinite set, unknown symbol)
10
+ * - `status: 'error'` - Invalid Element expression (missing variable, malformed domain)
11
+ */
12
+ export type ExtractDomainResult = {
13
+ status: 'success';
14
+ variable: string;
15
+ values: BoxedExpression[];
16
+ } | {
17
+ status: 'non-enumerable';
18
+ variable: string;
19
+ domain: BoxedExpression;
20
+ reason: string;
21
+ } | {
22
+ status: 'error';
23
+ reason: string;
24
+ };
25
+ /**
26
+ * Extract the finite domain from a quantifier's condition.
27
+ * Supports:
28
+ * - ["Element", "x", ["Set", 1, 2, 3]] → [1, 2, 3]
29
+ * - ["Element", "x", ["Range", 1, 5]] → [1, 2, 3, 4, 5]
30
+ * - ["Element", "x", ["Interval", 1, 5]] → [1, 2, 3, 4, 5] (integers only)
31
+ * - ["Element", "x", ["Set", 1, 2, 3], condition] → filtered values (EL-3)
32
+ * Returns detailed result indicating success, non-enumerable domain, or error.
33
+ */
34
+ export declare function extractFiniteDomainWithReason(condition: BoxedExpression, ce: ComputeEngine): ExtractDomainResult;
6
35
  /**
7
36
  * Extract the finite domain from a quantifier's condition.
8
37
  * Supports:
@@ -10,6 +39,7 @@
10
39
  * - ["Element", "x", ["Range", 1, 5]] → [1, 2, 3, 4, 5]
11
40
  * - ["Element", "x", ["Interval", 1, 5]] → [1, 2, 3, 4, 5] (integers only)
12
41
  * Returns null if the domain is not finite or not recognized.
42
+ * @deprecated Use extractFiniteDomainWithReason for better error handling
13
43
  */
14
44
  export declare function extractFiniteDomain(condition: BoxedExpression, ce: ComputeEngine): {
15
45
  variable: string;
@@ -49,16 +79,171 @@ export declare function evaluateExistsCartesian(domains: {
49
79
  }[], body: BoxedExpression, ce: ComputeEngine): BoxedExpression | undefined;
50
80
  /**
51
81
  * Check if a boolean expression is satisfiable.
52
- * Returns True if there exists an assignment that makes the expression true.
82
+ *
83
+ * Returns `True` if there exists an assignment of truth values to variables
84
+ * that makes the expression true, `False` if no such assignment exists.
85
+ *
86
+ * ## Algorithm
87
+ *
88
+ * Uses brute-force enumeration of all possible truth assignments.
89
+ * This has **O(2^n) time complexity** where n is the number of variables.
90
+ *
91
+ * ## Performance Characteristics
92
+ *
93
+ * | Variables | Assignments | Approximate Time |
94
+ * |-----------|-------------|------------------|
95
+ * | 10 | 1,024 | < 1ms |
96
+ * | 15 | 32,768 | ~10ms |
97
+ * | 20 | 1,048,576 | ~100ms-1s |
98
+ * | > 20 | (rejected) | N/A |
99
+ *
100
+ * ## Limits
101
+ *
102
+ * - **Maximum 20 variables**: Expressions with more than 20 distinct boolean
103
+ * variables will return the unevaluated `IsSatisfiable` expression rather
104
+ * than attempting evaluation (to prevent blocking the thread).
105
+ *
106
+ * ## Future Improvements
107
+ *
108
+ * For better performance on larger expressions, a DPLL-based SAT solver
109
+ * could be implemented. The current brute-force approach is suitable for
110
+ * small expressions typically encountered in educational and verification
111
+ * contexts.
112
+ *
113
+ * @param expr - A boolean expression to check for satisfiability
114
+ * @param ce - The ComputeEngine instance
115
+ * @returns `True` if satisfiable, `False` if unsatisfiable, or the
116
+ * unevaluated expression if the variable limit is exceeded
53
117
  */
54
118
  export declare function isSatisfiable(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
55
119
  /**
56
120
  * Check if a boolean expression is a tautology.
57
- * Returns True if the expression is true for all possible assignments.
121
+ *
122
+ * Returns `True` if the expression evaluates to true for all possible
123
+ * assignments of truth values to variables, `False` otherwise.
124
+ *
125
+ * ## Algorithm
126
+ *
127
+ * Uses brute-force enumeration of all possible truth assignments.
128
+ * This has **O(2^n) time complexity** where n is the number of variables.
129
+ *
130
+ * ## Performance Characteristics
131
+ *
132
+ * | Variables | Assignments | Approximate Time |
133
+ * |-----------|-------------|------------------|
134
+ * | 10 | 1,024 | < 1ms |
135
+ * | 15 | 32,768 | ~10ms |
136
+ * | 20 | 1,048,576 | ~100ms-1s |
137
+ * | > 20 | (rejected) | N/A |
138
+ *
139
+ * ## Limits
140
+ *
141
+ * - **Maximum 20 variables**: Expressions with more than 20 distinct boolean
142
+ * variables will return the unevaluated `IsTautology` expression rather
143
+ * than attempting evaluation (to prevent blocking the thread).
144
+ *
145
+ * ## Future Improvements
146
+ *
147
+ * For better performance on larger expressions, a DPLL-based approach
148
+ * (checking unsatisfiability of the negation) could be implemented.
149
+ *
150
+ * @param expr - A boolean expression to check
151
+ * @param ce - The ComputeEngine instance
152
+ * @returns `True` if a tautology, `False` if not, or the unevaluated
153
+ * expression if the variable limit is exceeded
58
154
  */
59
155
  export declare function isTautology(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
60
156
  /**
61
157
  * Generate a truth table for a boolean expression.
62
- * Returns a List of Lists with headers and rows.
158
+ *
159
+ * Returns a `List` of `List`s where the first row contains column headers
160
+ * (variable names followed by "Result") and subsequent rows contain the
161
+ * truth values for each assignment.
162
+ *
163
+ * ## Algorithm
164
+ *
165
+ * Generates all 2^n possible truth assignments and evaluates the expression
166
+ * for each. This has **O(2^n) time and space complexity**.
167
+ *
168
+ * ## Performance Characteristics
169
+ *
170
+ * | Variables | Rows Generated | Output Size |
171
+ * |-----------|----------------|-------------|
172
+ * | 5 | 32 | ~1 KB |
173
+ * | 8 | 256 | ~8 KB |
174
+ * | 10 | 1,024 | ~32 KB |
175
+ * | > 10 | (rejected) | N/A |
176
+ *
177
+ * ## Limits
178
+ *
179
+ * - **Maximum 10 variables**: Expressions with more than 10 distinct boolean
180
+ * variables will return the unevaluated `TruthTable` expression. This
181
+ * stricter limit (compared to `IsSatisfiable`/`IsTautology`) accounts for
182
+ * the memory required to store all rows.
183
+ *
184
+ * @param expr - A boolean expression to generate a truth table for
185
+ * @param ce - The ComputeEngine instance
186
+ * @returns A `List` of `List`s representing the truth table, or the
187
+ * unevaluated expression if the variable limit is exceeded
63
188
  */
64
189
  export declare function generateTruthTable(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
190
+ /**
191
+ * Find all prime implicants using the Quine-McCluskey algorithm.
192
+ *
193
+ * ## Algorithm
194
+ *
195
+ * 1. Generate minterms from the truth table (assignments where expression is true)
196
+ * 2. Group minterms by number of 1s
197
+ * 3. Combine terms differing in exactly one position, marking combined terms
198
+ * 4. Repeat until no more combinations possible
199
+ * 5. Return terms that were never combined (prime implicants)
200
+ *
201
+ * ## Performance Characteristics
202
+ *
203
+ * | Variables | Max Minterms | Approximate Time |
204
+ * |-----------|--------------|------------------|
205
+ * | 5 | 32 | < 1ms |
206
+ * | 8 | 256 | ~10ms |
207
+ * | 10 | 1,024 | ~100ms |
208
+ * | > 12 | (rejected) | N/A |
209
+ *
210
+ * ## Limits
211
+ *
212
+ * - **Maximum 12 variables**: Larger expressions return unevaluated.
213
+ *
214
+ * @param expr - A boolean expression
215
+ * @param ce - The ComputeEngine instance
216
+ * @returns A Set of expressions representing prime implicants
217
+ */
218
+ export declare function findPrimeImplicants(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression[] | null;
219
+ /**
220
+ * Find all prime implicates using the Quine-McCluskey algorithm.
221
+ *
222
+ * Prime implicates are the dual of prime implicants - they are the minimal
223
+ * clauses in CNF. We find them by finding prime implicants of the negation
224
+ * and then negating the result.
225
+ *
226
+ * @param expr - A boolean expression
227
+ * @param ce - The ComputeEngine instance
228
+ * @returns A Set of expressions representing prime implicates (clauses)
229
+ */
230
+ export declare function findPrimeImplicates(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression[] | null;
231
+ /**
232
+ * Find a minimal DNF (sum of products) using prime implicants.
233
+ *
234
+ * This uses the Quine-McCluskey algorithm followed by a greedy covering
235
+ * algorithm to select a minimal set of prime implicants.
236
+ *
237
+ * @param expr - A boolean expression
238
+ * @param ce - The ComputeEngine instance
239
+ * @returns The minimal DNF, or null if too many variables
240
+ */
241
+ export declare function minimalDNF(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression | null;
242
+ /**
243
+ * Find a minimal CNF (product of sums) using prime implicates.
244
+ *
245
+ * @param expr - A boolean expression
246
+ * @param ce - The ComputeEngine instance
247
+ * @returns The minimal CNF, or null if too many variables
248
+ */
249
+ export declare function minimalCNF(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression | null;
@@ -1,8 +1,4 @@
1
- /* 0.32.1 */
2
- /**
3
- * Basic evaluation functions for logical operators.
4
- * Extracted from logic.ts for better code organization.
5
- */
1
+ /* 0.34.0 */
6
2
  export declare function evaluateAnd(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
7
3
  engine: ComputeEngine;
8
4
  }): BoxedExpression | undefined;
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const LOGIC_LIBRARY: SymbolDefinitions;
3
3
  export declare function simplifyLogicFunction(x: BoxedExpression): {
4
4
  value: BoxedExpression;
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const NUMBER_THEORY_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const POLYNOMIALS_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function randomExpression(level?: number): Expression;
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const RELOP_LIBRARY: SymbolDefinitions;
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const SETS_LIBRARY: SymbolDefinitions;
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const STATISTICS_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const TRIGONOMETRY_LIBRARY: SymbolDefinitions[];
@@ -1,4 +1,20 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
+ /**
3
+ * EL-4: Convert known infinite integer sets to their equivalent Limits bounds.
4
+ * Returns undefined if the set cannot be converted to a Limits form.
5
+ *
6
+ * Mappings:
7
+ * - NonNegativeIntegers (ℕ₀) → [0, ∞)
8
+ * - PositiveIntegers (ℤ⁺) → [1, ∞)
9
+ * - NegativeIntegers (ℤ⁻) → Not supported (would need negative direction)
10
+ * - Integers (ℤ) → Not supported (bidirectional)
11
+ * - Other sets (Reals, Complexes, etc.) → Not supported (non-integer)
12
+ */
13
+ export declare function convertInfiniteSetToLimits(domainSymbol: string): {
14
+ lower: number;
15
+ upper: number;
16
+ isFinite: false;
17
+ } | undefined;
2
18
  export type IndexingSet = {
3
19
  index: string | undefined;
4
20
  lower: number;
@@ -58,20 +74,62 @@ export declare function canonicalLimits(ops: ReadonlyArray<BoxedExpression>, { e
58
74
  * - `lower` (a number), `Nothing` if none is present
59
75
  * - `upper` (a number), `Nothing` if none is present
60
76
  *
77
+ * Or, for Element expressions, preserve them in canonical form.
78
+ *
61
79
  * Assume we are in the context of a big operator
62
80
  * (i.e. `pushScope()` has been called)
63
81
  */
64
82
  export declare function canonicalIndexingSet(expr: BoxedExpression): BoxedExpression | undefined;
65
83
  export declare function canonicalBigop(bigOp: string, body: BoxedExpression, indexingSets: BoxedExpression[], scope: Scope | undefined): BoxedExpression | null;
84
+ /**
85
+ * A special symbol used to signal that a BigOp could not be evaluated
86
+ * because the domain is non-enumerable (e.g., infinite set, unknown symbol).
87
+ * When this is returned, the Sum/Product should keep the expression symbolic
88
+ * rather than returning NaN.
89
+ */
90
+ export declare const NON_ENUMERABLE_DOMAIN: unique symbol;
91
+ /**
92
+ * Result type for reduceBigOp that includes reason for failure
93
+ */
94
+ export type BigOpResult<T> = {
95
+ status: 'success';
96
+ value: T;
97
+ } | {
98
+ status: 'non-enumerable';
99
+ reason: string;
100
+ domain?: BoxedExpression;
101
+ } | {
102
+ status: 'error';
103
+ reason: string;
104
+ };
66
105
  /**
67
106
  * Process an expression of the form
68
107
  * - ['Operator', body, ['Tuple', index1, lower, upper]]
69
108
  * - ['Operator', body, ['Tuple', index1, lower, upper], ['Tuple', index2, lower, upper], ...]
109
+ * - ['Operator', body, ['Element', index, collection]]
70
110
  * - ['Operator', body]
71
111
  * - ['Operator', collection]
72
112
  *
73
113
  * `fn()` is the processing done on each element
74
114
  * Apply the function `fn` to the body of a big operator, according to the
75
115
  * indexing sets.
116
+ *
117
+ * Returns either the reduced value, or `typeof NON_ENUMERABLE_DOMAIN` if the
118
+ * domain cannot be enumerated (in which case the expression should remain symbolic).
76
119
  */
77
- export declare function reduceBigOp<T>(body: BoxedExpression, indexes: ReadonlyArray<BoxedExpression>, fn: (acc: T, x: BoxedExpression) => T | null, initial: T): Generator<T | undefined>;
120
+ export declare function reduceBigOp<T>(body: BoxedExpression, indexes: ReadonlyArray<BoxedExpression>, fn: (acc: T, x: BoxedExpression) => T | null, initial: T): Generator<T | typeof NON_ENUMERABLE_DOMAIN | undefined>;
121
+ /**
122
+ * Result type for reduceElementIndexingSets to distinguish between
123
+ * successful evaluation, non-enumerable domains (keep symbolic), and errors.
124
+ */
125
+ export type ReduceElementResult<T> = {
126
+ status: 'success';
127
+ value: T;
128
+ } | {
129
+ status: 'non-enumerable';
130
+ reason: string;
131
+ domain?: BoxedExpression;
132
+ } | {
133
+ status: 'error';
134
+ reason: string;
135
+ };
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  import { BigNumFactory, NumericValue, NumericValueData } from './types';
3
3
  import { ExactNumericValue } from './exact-numeric-value';
4
4
  import { Expression } from '../../math-json/types';
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  import { Rational, SmallInteger } from '../numerics/types';
3
3
  import { BigNumFactory, ExactNumericValueData, NumericValue, NumericValueFactory } from './types';
4
4
  import { Expression } from '../../math-json/types';
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  import { BigNumFactory, NumericValue, NumericValueData } from './types';
3
3
  import type { Expression } from '../../math-json/types';
4
4
  import type { SmallInteger } from '../numerics/types';
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  *
3
3
  * ## THEORY OF OPERATIONS
4
4
  *
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function bigint(a: Decimal | number | bigint | string): bigint | null;
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function bigintValue(expr: Expression | null | undefined): bigint | null;
3
3
  /** Output a shorthand if possible */
4
4
  export declare function numberToExpression(num: number | bigint, fractionalDigits?: string | number): Expression;
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  /** An interval is a continuous set of real numbers */
3
3
  export type Interval = {
4
4
  start: number;
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  estimate: number;
3
3
  error: number;
4
4
  };
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function lcm(a: bigint, b: bigint): bigint;
3
3
  /** Return `[factor, root]` such that
4
4
  * pow(n, 1/exponent) = factor * pow(root, 1/exponent)
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function gcd(a: BigNum, b: BigNum): BigNum;
3
3
  export declare function lcm(a: BigNum, b: BigNum): BigNum;
4
4
  export declare function factorial2(ce: IBigNum, n: BigNum): BigNum;
@@ -1,3 +1,3 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function gamma(c: Complex): Complex;
3
3
  export declare function gammaln(c: Complex): Complex;
@@ -1,11 +1,11 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare const MACHINE_PRECISION_BITS = 53;
3
3
  export declare const MACHINE_PRECISION: number;
4
4
  export declare const DEFAULT_TOLERANCE = 1e-10;
5
5
  export declare const SMALL_INTEGER = 1000000;
6
6
  /** The largest number of digits of a bigint */
7
7
  export declare const MAX_BIGINT_DIGITS = 1024;
8
- export declare const MAX_ITERATION = 1000000;
8
+ export declare const MAX_ITERATION = 10000;
9
9
  export declare const MAX_SYMBOLIC_TERMS = 200;
10
10
  /**
11
11
  * Returns the smallest floating-point number greater than x.
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function primeFactors(n: number): {
3
3
  [factor: number]: number;
4
4
  };
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function isRational(x: any | null): x is Rational;
3
3
  export declare function isMachineRational(x: any | null): x is [SmallInteger, SmallInteger];
4
4
  export declare function isBigRational(x: any | null): x is [bigint, bigint];
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
 
3
3
  Translated from https://github.com/JuliaMath/Richardson.jl/blob/master/src/Richardson.jl
4
4
 
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  import type { BigNum } from './types';
3
3
  export declare function gammaln(z: number): number;
4
4
  export declare function gamma(z: number): number;
@@ -1,4 +1,4 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  import type { BigNum } from './types';
3
3
  export declare function mean(values: Iterable<number>): number;
4
4
  export declare function bigMean(bignum: BigNumFactory, values: Iterable<BigNum>): BigNum;
@@ -1,2 +1,2 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
2
  export declare function numberToString(num: number | bigint, fractionalDigits?: number | string): string;
@@ -1,4 +1,5 @@
1
- /* 0.32.1 */
1
+ /* 0.34.0 */
2
+ /** @internal */
2
3
  type IsInteger<N extends number> = `${N}` extends `${string}.${string}` ? never : `${N}` extends `-${string}.${string}` ? never : number;
3
4
  /** A `SmallInteger` is an integer < 1e6
4
5
  * @category Numerics
@@ -0,0 +1,85 @@
1
+ /* 0.34.0 */
2
+ * OEIS (Online Encyclopedia of Integer Sequences) Integration
3
+ *
4
+ * This module provides functions to look up sequences in the OEIS database
5
+ * and import them for use in the compute engine.
6
+ *
7
+ * @see https://oeis.org
8
+ */
9
+ import type { ComputeEngine, BoxedExpression } from './global-types';
10
+ /**
11
+ * Result from an OEIS lookup operation.
12
+ */
13
+ export interface OEISSequenceInfo {
14
+ /** OEIS sequence ID (e.g., 'A000045') */
15
+ id: string;
16
+ /** Sequence name/description */
17
+ name: string;
18
+ /** First several terms of the sequence */
19
+ terms: number[];
20
+ /** Formula or recurrence (if available) */
21
+ formula?: string;
22
+ /** Comments about the sequence */
23
+ comments?: string[];
24
+ /** URL to the OEIS page */
25
+ url: string;
26
+ }
27
+ /**
28
+ * Options for OEIS operations.
29
+ */
30
+ export interface OEISOptions {
31
+ /** Request timeout in milliseconds (default: 10000) */
32
+ timeout?: number;
33
+ /** Maximum number of results to return for lookups (default: 5) */
34
+ maxResults?: number;
35
+ }
36
+ /**
37
+ * Look up sequences in OEIS by their terms.
38
+ *
39
+ * @param terms - Array of sequence terms to search for
40
+ * @param options - Optional configuration
41
+ * @returns Promise resolving to array of matching sequences
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const results = await lookupOEISByTerms([0, 1, 1, 2, 3, 5, 8, 13]);
46
+ * // → [{ id: 'A000045', name: 'Fibonacci numbers', ... }]
47
+ * ```
48
+ */
49
+ export declare function lookupOEISByTerms(terms: number[], options?: OEISOptions): Promise<OEISSequenceInfo[]>;
50
+ /**
51
+ * Look up a sequence in OEIS by its ID.
52
+ *
53
+ * @param id - OEIS sequence ID (e.g., 'A000045' or '45')
54
+ * @param options - Optional configuration
55
+ * @returns Promise resolving to sequence info, or undefined if not found
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const fib = await lookupOEISById('A000045');
60
+ * // → { id: 'A000045', name: 'Fibonacci numbers', terms: [0, 1, 1, 2, ...], ... }
61
+ * ```
62
+ */
63
+ export declare function lookupOEISById(id: string, options?: OEISOptions): Promise<OEISSequenceInfo | undefined>;
64
+ /**
65
+ * Look up a sequence in OEIS by its terms.
66
+ *
67
+ * @param ce - ComputeEngine instance
68
+ * @param terms - Array of sequence terms (numbers or BoxedExpressions)
69
+ * @param options - Optional configuration
70
+ * @returns Promise resolving to array of matching sequences
71
+ */
72
+ export declare function lookupSequence(ce: ComputeEngine, terms: (number | BoxedExpression)[], options?: OEISOptions): Promise<OEISSequenceInfo[]>;
73
+ /**
74
+ * Check if a defined sequence matches an OEIS sequence.
75
+ *
76
+ * @param ce - ComputeEngine instance
77
+ * @param name - Name of the defined sequence
78
+ * @param count - Number of terms to check (default: 10)
79
+ * @param options - Optional configuration
80
+ * @returns Promise with match results
81
+ */
82
+ export declare function checkSequence(ce: ComputeEngine, name: string, count?: number, options?: OEISOptions): Promise<{
83
+ matches: OEISSequenceInfo[];
84
+ terms: number[];
85
+ }>;