@cortex-js/compute-engine 0.31.0 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/compute-engine.esm.js +1843 -249
  2. package/dist/compute-engine.min.esm.js +38 -38
  3. package/dist/compute-engine.min.umd.js +38 -38
  4. package/dist/compute-engine.umd.js +1843 -249
  5. package/dist/math-json.esm.js +2 -2
  6. package/dist/math-json.min.esm.js +2 -2
  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 +1 -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/serialize.d.ts +1 -1
  23. package/dist/types/common/type/subtype.d.ts +1 -1
  24. package/dist/types/common/type/type-builder.d.ts +1 -1
  25. package/dist/types/common/type/types.d.ts +1 -1
  26. package/dist/types/common/type/utils.d.ts +1 -1
  27. package/dist/types/common/utils.d.ts +1 -1
  28. package/dist/types/compute-engine/assume.d.ts +1 -1
  29. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
  30. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  31. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  32. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  33. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  34. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  35. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  36. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  37. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
  38. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  39. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  40. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  41. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  42. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
  43. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
  44. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
  45. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  46. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  47. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  48. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  49. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  50. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  51. package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
  52. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  53. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  54. package/dist/types/compute-engine/boxed-expression/match.d.ts +23 -1
  55. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  56. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  57. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  58. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  59. package/dist/types/compute-engine/boxed-expression/product.d.ts +1 -1
  60. package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/terms.d.ts +1 -1
  66. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  69. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  70. package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
  71. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  72. package/dist/types/compute-engine/compilation/types.d.ts +1 -1
  73. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  74. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  75. package/dist/types/compute-engine/global-types.d.ts +1 -1
  76. package/dist/types/compute-engine/index.d.ts +1 -1
  77. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  78. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  79. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  80. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  81. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  82. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  83. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  84. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  85. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  86. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  87. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  88. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  89. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  90. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  91. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  92. package/dist/types/compute-engine/latex-syntax/parse.d.ts +14 -1
  93. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  94. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  95. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  96. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  97. package/dist/types/compute-engine/latex-syntax/types.d.ts +75 -24
  98. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  99. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  100. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  101. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  102. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  103. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  104. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  105. package/dist/types/compute-engine/library/core.d.ts +1 -1
  106. package/dist/types/compute-engine/library/invisible-operator.d.ts +1 -1
  107. package/dist/types/compute-engine/library/library.d.ts +1 -1
  108. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  109. package/dist/types/compute-engine/library/logic-analysis.d.ts +64 -0
  110. package/dist/types/compute-engine/library/logic-utils.d.ts +58 -0
  111. package/dist/types/compute-engine/library/logic.d.ts +2 -1
  112. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  113. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  114. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  115. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  116. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  117. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  118. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  119. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  120. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  121. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
  122. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  123. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  124. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  125. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  126. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  127. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  128. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  129. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  130. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  131. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  132. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  133. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  134. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  135. package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
  136. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  137. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  138. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  139. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  140. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  141. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  142. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +6 -0
  143. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  144. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +6 -0
  145. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  146. package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
  147. package/dist/types/compute-engine/types.d.ts +1 -1
  148. package/dist/types/compute-engine.d.ts +1 -1
  149. package/dist/types/math-json/symbols.d.ts +1 -1
  150. package/dist/types/math-json/types.d.ts +1 -1
  151. package/dist/types/math-json/utils.d.ts +1 -1
  152. package/dist/types/math-json.d.ts +2 -2
  153. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_CORE: LatexDictionary;
3
3
  export declare const DELIMITERS_SHORTHAND: {
4
4
  '(': string;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_LINEAR_ALGEBRA: LatexDictionary;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_LOGIC: LatexDictionary;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_OTHERS: LatexDictionary;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_INEQUALITIES: LatexDictionaryEntry[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_SETS: LatexDictionary;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_STATISTICS: LatexDictionary;
@@ -1,3 +1,3 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const SYMBOLS: [string, string, number][];
3
3
  export declare const DEFINITIONS_SYMBOLS: LatexDictionary;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFINITIONS_TRIGONOMETRY: LatexDictionary;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import { Delimiter, EnvironmentParseHandler, ExpressionParseHandler, InfixParseHandler, LatexDictionary, LatexDictionaryEntry, LatexString, LatexToken, LibraryCategory, MatchfixParseHandler, PostfixParseHandler, Precedence, SerializeHandler } from '../types';
3
3
  export type CommonEntry = {
4
4
  /** Note: a name is required if a serialize handler is provided */
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import { Parser } from './types';
3
3
  /** For error handling, if we have a symbol prefix, assume
4
4
  * the symbol is invalid (it would have been captured by
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import { ParseLatexOptions, LatexToken, Terminator, Parser, SymbolTable } from './types';
3
3
  import type { IndexedLatexDictionary, IndexedLatexDictionaryEntry, IndexedInfixEntry, IndexedPostfixEntry, IndexedPrefixEntry, IndexedSymbolEntry, IndexedExpressionEntry, IndexedFunctionEntry } from './dictionary/definitions';
4
4
  import { BoxedType } from '../../common/type/boxed-type';
@@ -45,6 +45,10 @@ export declare class _Parser implements Parser {
45
45
  pushSymbolTable(): void;
46
46
  popSymbolTable(): void;
47
47
  addSymbol(id: string, type: BoxedType | TypeString): void;
48
+ private _quantifierScopeDepth;
49
+ get inQuantifierScope(): boolean;
50
+ enterQuantifierScope(): void;
51
+ exitQuantifierScope(): void;
48
52
  get index(): number;
49
53
  set index(val: number);
50
54
  private _tokens;
@@ -292,6 +296,15 @@ export declare class _Parser implements Parser {
292
296
  decorate(expr: Expression | null, start: number): Expression | null;
293
297
  error(code: string | [string, ...Expression[]], fromToken: number): Expression;
294
298
  private isFunctionOperator;
299
+ /**
300
+ * Check if a symbol looks like a predicate in First-Order Logic.
301
+ * A predicate is typically a single uppercase letter (P, Q, R, etc.)
302
+ * followed by parentheses containing arguments.
303
+ *
304
+ * This enables automatic inference of predicates without explicit declaration,
305
+ * so `\forall x. P(x)` works without having to declare `P` as a function.
306
+ */
307
+ private looksLikePredicate;
295
308
  /** Return all defs of the specified kind.
296
309
  * The defs at the end of the dictionary have priority, since they may
297
310
  * override previous definitions. (For example, there is a core definition
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import { NumberSerializationFormat } from './types';
3
3
  /**
4
4
  * @param expr - A number, can be represented as a string
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import { DelimiterScale } from './types';
3
3
  export declare function getApplyFunctionStyle(_expr: Expression, _level: number): DelimiterScale;
4
4
  export declare function getGroupStyle(_expr: Expression, _level: number): DelimiterScale;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import { LatexString, SerializeLatexOptions, DelimiterScale } from './types';
3
3
  import type { IndexedLatexDictionary, IndexedLatexDictionaryEntry } from './dictionary/definitions';
4
4
  export declare class Serializer {
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  * ## Reference
3
3
  * TeX source code:
4
4
  * {@link http://tug.org/texlive/devsrc/Build/source/texk/web2c/tex.web | Tex.web}
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import type { Expression, MathJsonSymbol } from '../../math-json/types';
3
3
  import { BoxedType, TypeString } from '../types';
4
4
  import type { IndexedLatexDictionary, IndexedLatexDictionaryEntry } from './dictionary/definitions';
@@ -47,34 +47,54 @@ export type LibraryCategory = 'algebra' | 'arithmetic' | 'calculus' | 'collectio
47
47
  * For example, in `1 + 2 * 3`, the `*` operator has a **higher** precedence
48
48
  * than the `+` operator, so it is applied first.
49
49
  *
50
- * The precedence range from 0 to 1000. The larger the number, the higher the
50
+ * The precedence ranges from 0 to 1000. The larger the number, the higher the
51
51
  * precedence, the more "binding" the operator is.
52
52
  *
53
- * Here are some rough ranges for the precedence:
54
- *
55
- * - 800: prefix and postfix operators: `\lnot` etc...
56
- * - `POSTFIX_PRECEDENCE` = 810: `!`, `'`
57
- * - 700: some arithmetic operators
58
- * - `EXPONENTIATION_PRECEDENCE` = 700: `^`
59
- * - 600: some binary operators
60
- * - `DIVISION_PRECEDENCE` = 600: `\div`
61
- * - 500: not used
62
- * - 400: not used
63
- * - 300: some logic and arithmetic operators:
64
- * `\land`, `\lor`, `\times`, etc...
65
- * - `MULTIPLICATION_PRECEDENCE` = 390: `\times`
66
- * - 200: arithmetic operators, inequalities:
67
- * - `ADDITION_PRECEDENCE` = 275: `+` `-`
68
- * - `ARROW_PRECEDENCE` = 270: `\to` `\rightarrow`
69
- * - `ASSIGNMENT_PRECEDENCE` = 260: `:=`
70
- * - `COMPARISON_PRECEDENCE` = 245: `\lt` `\gt`
71
- * - 241: `\leq`
72
- * - 100: not used
73
- * - 0: `,`, `;`, etc...
53
+ * ## Operator Precedence Table
54
+ *
55
+ * | Precedence | Operators | Description |
56
+ * |------------|-----------|-------------|
57
+ * | **880** | `\lnot` `\neg` `++` `--` `+` `-` (prefix) | Prefix/postfix unary |
58
+ * | **810** | `!` `'` `!!` `'''` | Factorial, prime (postfix) |
59
+ * | **800** | `_` (subscript) | Subscript |
60
+ * | **780** | `\degree` `\prime` | Degree, prime symbols |
61
+ * | **740** | `\%` | Percent |
62
+ * | **720** | `\/` (inline division) | Inline division |
63
+ * | **700** | `^` `\overset` `\underset` | Exponentiation, over/underscript |
64
+ * | **650** | (invisible multiply) `\cdot` | Implicit multiplication |
65
+ * | **600** | `\div` `\frac` | Division |
66
+ * | **390** | `\times` `*` `/` | Multiplication |
67
+ * | **350** | `\cup` `\cap` | Set union/intersection |
68
+ * | **275** | `+` `-` (infix) | Addition, subtraction |
69
+ * | **270** | `\to` `\rightarrow` `\mapsto` | Arrows |
70
+ * | **265** | `\setminus` `\smallsetminus` `:` (range) | Set difference, range |
71
+ * | **260** | `:=` | Assignment |
72
+ * | **255** | `\ne` | Not equal |
73
+ * | **250** | `\not\approxeq` | Not approximately equal |
74
+ * | **247** | `\approx` | Approximately |
75
+ * | **245-246** | `=` `<` `>` `\lt` `\gt` `\nless` `\ngtr` | Equality, comparison |
76
+ * | **241-244** | `\le` `\leq` `\ge` `\geq` `>=` | Less/greater or equal |
77
+ * | **240** | `\in` `\notin` `\subset` `\supset` ... | Set membership/relations |
78
+ * | **235** | `\land` `\wedge` `\&` | Logical AND |
79
+ * | **232** | `\veebar` `\barwedge` (Xor, Nand, Nor) | Logical XOR, NAND, NOR |
80
+ * | **230** | `\lor` `\vee` `\parallel` | Logical OR |
81
+ * | **220** | `\implies` `\Rightarrow` `\vdash` `\models` | Implication, entailment |
82
+ * | **219** | `\iff` `\Leftrightarrow` `\equiv` | Equivalence |
83
+ * | **200** | `\forall` `\exists` `\exists!` | Quantifiers |
84
+ * | **160** | `\mid` `\vert` (set builder) | Set builder notation |
85
+ * | **19-20** | `,` `;` `\ldots` | Sequence separators |
86
+ *
87
+ * ## Key Relationships
88
+ *
89
+ * - **Comparisons bind tighter than logic**: `x = 1 \lor y = 2` parses as
90
+ * `(x = 1) \lor (y = 2)`, not `x = (1 \lor y) = 2`
91
+ * - **AND binds tighter than OR**: `a \land b \lor c` parses as
92
+ * `(a \land b) \lor c`
93
+ * - **Logic operators bind tighter than implication**: `a \lor b \implies c`
94
+ * parses as `(a \lor b) \implies c`
74
95
  *
75
96
  * Some constants are defined below for common precedence values.
76
97
  *
77
- *
78
98
  * **Note**: MathML defines
79
99
  * [some operator precedence](https://www.w3.org/TR/2009/WD-MathML3-20090924/appendixc.html),
80
100
  * but it has some issues and inconsistencies. However,
@@ -518,6 +538,31 @@ export type ParseLatexOptions = NumberFormat & {
518
538
  * **Default:** `false`
519
539
  */
520
540
  preserveLatex: boolean;
541
+ /**
542
+ * Controls how quantifier scope is determined when parsing expressions
543
+ * like `\forall x. P(x) \rightarrow Q(x)`.
544
+ *
545
+ * - `"tight"`: The quantifier binds only to the immediately following
546
+ * well-formed formula, stopping at logical connectives (`\rightarrow`,
547
+ * `\implies`, `\land`, `\lor`, etc.). This follows standard First-Order
548
+ * Logic conventions. Use explicit parentheses for wider scope:
549
+ * `\forall x. (P(x) \rightarrow Q(x))`.
550
+ *
551
+ * - `"loose"`: The quantifier scope extends to the end of the expression
552
+ * or until a lower-precedence operator is encountered.
553
+ *
554
+ * **Default:** `"tight"`
555
+ *
556
+ * @example
557
+ * // With "tight" (default):
558
+ * // \forall x. P(x) \rightarrow Q(x)
559
+ * // parses as: (∀x. P(x)) → Q(x)
560
+ *
561
+ * // With "loose":
562
+ * // \forall x. P(x) \rightarrow Q(x)
563
+ * // parses as: ∀x. (P(x) → Q(x))
564
+ */
565
+ quantifierScope: 'tight' | 'loose';
521
566
  };
522
567
  /**
523
568
  *
@@ -538,6 +583,12 @@ export interface Parser {
538
583
  pushSymbolTable(): void;
539
584
  popSymbolTable(): void;
540
585
  addSymbol(id: MathJsonSymbol, type: BoxedType | TypeString): void;
586
+ /** True if currently parsing inside a quantifier body (ForAll, Exists, etc.) */
587
+ readonly inQuantifierScope: boolean;
588
+ /** Enter a quantifier scope for parsing the body of ForAll, Exists, etc. */
589
+ enterQuantifierScope(): void;
590
+ /** Exit the current quantifier scope */
591
+ exitQuantifierScope(): void;
541
592
  /** The index of the current token */
542
593
  index: number;
543
594
  /** True if the last token has been reached.
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare function asLatexString(s: unknown): string | null;
3
3
  export declare function isRelationalOperator(name: string | undefined): boolean;
4
4
  export declare function isInequalityOperator(operator: string | undefined): boolean;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export type CanonicalArithmeticOperators = 'Add' | 'Negate' | 'Multiply' | 'Divide' | 'Power' | 'Sqrt' | 'Root' | 'Ln';
3
3
  export declare const ARITHMETIC_LIBRARY: SymbolDefinitions[];
4
4
  export declare function isPrime(expr: BoxedExpression): boolean | undefined;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const CALCULUS_LIBRARY: SymbolDefinitions[];
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const DEFAULT_LINSPACE_COUNT = 50;
3
3
  export declare const COLLECTIONS_LIBRARY: SymbolDefinitions;
4
4
  /**
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const COMBINATORICS_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const COMPLEX_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const CONTROL_STRUCTURES_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const CORE_LIBRARY: SymbolDefinitions[];
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare function canonicalInvisibleOperator(ops: ReadonlyArray<BoxedExpression>, { engine: ce }: {
3
3
  engine: ComputeEngine;
4
4
  }): BoxedExpression | null;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  import type { SymbolDefinitions, ComputeEngine } from '../global-types';
3
3
  export declare function getStandardLibrary(categories: LibraryCategory[] | LibraryCategory | 'all'): readonly SymbolDefinitions[];
4
4
  export declare const LIBRARIES: {
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const LINEAR_ALGEBRA_LIBRARY: SymbolDefinitions[];
@@ -0,0 +1,64 @@
1
+ /* 0.32.1 */
2
+ /**
3
+ * Quantifier domain helpers and boolean analysis functions.
4
+ * Extracted from logic.ts for better code organization.
5
+ */
6
+ /**
7
+ * Extract the finite domain from a quantifier's condition.
8
+ * Supports:
9
+ * - ["Element", "x", ["Set", 1, 2, 3]] → [1, 2, 3]
10
+ * - ["Element", "x", ["Range", 1, 5]] → [1, 2, 3, 4, 5]
11
+ * - ["Element", "x", ["Interval", 1, 5]] → [1, 2, 3, 4, 5] (integers only)
12
+ * Returns null if the domain is not finite or not recognized.
13
+ */
14
+ export declare function extractFiniteDomain(condition: BoxedExpression, ce: ComputeEngine): {
15
+ variable: string;
16
+ values: BoxedExpression[];
17
+ } | null;
18
+ /**
19
+ * Check if an expression contains a reference to a specific variable.
20
+ */
21
+ export declare function bodyContainsVariable(expr: BoxedExpression, variable: string): boolean;
22
+ /**
23
+ * For nested quantifiers like ∀x∈S. ∀y∈T. P(x,y), collect the inner domains.
24
+ * Returns an array of {variable, values} for nested ForAll/Exists with finite domains.
25
+ */
26
+ export declare function collectNestedDomains(body: BoxedExpression, ce: ComputeEngine): {
27
+ variable: string;
28
+ values: BoxedExpression[];
29
+ }[];
30
+ /**
31
+ * Get the innermost body of nested quantifiers.
32
+ */
33
+ export declare function getInnermostBody(body: BoxedExpression): BoxedExpression;
34
+ /**
35
+ * Evaluate ForAll over a Cartesian product of domains.
36
+ * Returns True if the predicate holds for all combinations.
37
+ */
38
+ export declare function evaluateForAllCartesian(domains: {
39
+ variable: string;
40
+ values: BoxedExpression[];
41
+ }[], body: BoxedExpression, ce: ComputeEngine): BoxedExpression | undefined;
42
+ /**
43
+ * Evaluate Exists over a Cartesian product of domains.
44
+ * Returns True if the predicate holds for at least one combination.
45
+ */
46
+ export declare function evaluateExistsCartesian(domains: {
47
+ variable: string;
48
+ values: BoxedExpression[];
49
+ }[], body: BoxedExpression, ce: ComputeEngine): BoxedExpression | undefined;
50
+ /**
51
+ * Check if a boolean expression is satisfiable.
52
+ * Returns True if there exists an assignment that makes the expression true.
53
+ */
54
+ export declare function isSatisfiable(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
55
+ /**
56
+ * Check if a boolean expression is a tautology.
57
+ * Returns True if the expression is true for all possible assignments.
58
+ */
59
+ export declare function isTautology(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
60
+ /**
61
+ * Generate a truth table for a boolean expression.
62
+ * Returns a List of Lists with headers and rows.
63
+ */
64
+ export declare function generateTruthTable(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
@@ -0,0 +1,58 @@
1
+ /* 0.32.1 */
2
+ /**
3
+ * Basic evaluation functions for logical operators.
4
+ * Extracted from logic.ts for better code organization.
5
+ */
6
+ export declare function evaluateAnd(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
7
+ engine: ComputeEngine;
8
+ }): BoxedExpression | undefined;
9
+ export declare function evaluateOr(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
10
+ engine: ComputeEngine;
11
+ }): BoxedExpression | undefined;
12
+ export declare function evaluateNot(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
13
+ engine: ComputeEngine;
14
+ }): BoxedExpression | undefined;
15
+ export declare function evaluateEquivalent(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
16
+ engine: ComputeEngine;
17
+ }): BoxedExpression | undefined;
18
+ export declare function evaluateImplies(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
19
+ engine: ComputeEngine;
20
+ }): BoxedExpression | undefined;
21
+ export declare function evaluateXor(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
22
+ engine: ComputeEngine;
23
+ }): BoxedExpression | undefined;
24
+ export declare function evaluateNand(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
25
+ engine: ComputeEngine;
26
+ }): BoxedExpression | undefined;
27
+ export declare function evaluateNor(args: ReadonlyArray<BoxedExpression>, { engine: ce }: {
28
+ engine: ComputeEngine;
29
+ }): BoxedExpression | undefined;
30
+ /**
31
+ * Convert a boolean expression to Negation Normal Form (NNF).
32
+ * In NNF, negations only appear directly before variables (literals).
33
+ * This is a prerequisite for CNF/DNF conversion.
34
+ */
35
+ export declare function toNNF(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
36
+ /**
37
+ * Convert a boolean expression to Conjunctive Normal Form (CNF).
38
+ */
39
+ export declare function toCNF(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
40
+ /**
41
+ * Convert a boolean expression to Disjunctive Normal Form (DNF).
42
+ */
43
+ export declare function toDNF(expr: BoxedExpression, ce: ComputeEngine): BoxedExpression;
44
+ /**
45
+ * Extract all propositional variables from a boolean expression.
46
+ * Returns a sorted array of unique variable names.
47
+ */
48
+ export declare function extractVariables(expr: BoxedExpression): string[];
49
+ /**
50
+ * Evaluate a boolean expression with a given truth assignment.
51
+ * Returns True, False, or undefined if the expression cannot be evaluated.
52
+ */
53
+ export declare function evaluateWithAssignment(expr: BoxedExpression, assignment: Record<string, boolean>, ce: ComputeEngine): BoxedExpression;
54
+ /**
55
+ * Generate all possible truth assignments for a list of variables.
56
+ * Each assignment is a Record mapping variable names to boolean values.
57
+ */
58
+ export declare function generateAssignments(variables: string[]): Generator<Record<string, boolean>>;
@@ -1,6 +1,7 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const LOGIC_LIBRARY: SymbolDefinitions;
3
3
  export declare function simplifyLogicFunction(x: BoxedExpression): {
4
4
  value: BoxedExpression;
5
5
  because: string;
6
6
  } | undefined;
7
+ export declare const LOGIC_FUNCTION_LIBRARY: SymbolDefinitions;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const NUMBER_THEORY_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const POLYNOMIALS_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare function randomExpression(level?: number): Expression;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const RELOP_LIBRARY: SymbolDefinitions;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const SETS_LIBRARY: SymbolDefinitions;
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const STATISTICS_LIBRARY: SymbolDefinitions[];
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare const TRIGONOMETRY_LIBRARY: SymbolDefinitions[];
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export type IndexingSet = {
3
3
  index: string | undefined;
4
4
  lower: number;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
2
2
  *
3
3
  * ## THEORY OF OPERATIONS
4
4
  *
@@ -1,2 +1,2 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare function bigint(a: Decimal | number | bigint | string): bigint | null;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
2
2
  estimate: number;
3
3
  error: number;
4
4
  };
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare function gamma(c: Complex): Complex;
3
3
  export declare function gammaln(c: Complex): Complex;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
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;
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
2
2
  export declare function primeFactors(n: number): {
3
3
  [factor: number]: number;
4
4
  };
@@ -1,4 +1,4 @@
1
- /* 0.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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.31.0 */
1
+ /* 0.32.1 */
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;