cortex-js / compute-engine

An engine for symbolic manipulation and numeric evaluation of math formulas expressed with MathJSON
https://cortexjs.io
MIT License
355 stars 42 forks source link

Enabling Summation Subscript Equations #133

Open emily0622 opened 9 months ago

emily0622 commented 9 months ago

The summation is unable to parse a group containing more than a single argument in the subscript.

Error Examples 1) latex: \sum{n,m} k{n,m} ["Sum",["Subscript","k",["Delimiter",["Sequence","n","m"],"','"]],["Error",["ErrorCode","'incompatible-domain'","Symbols","Undefined"],["Delimiter",["Sequence","n","m"],"','"]]]

2) latex: \sum_{n \in N}K_n ["Sum","K_n",["Error",["ErrorCode","'incompatible-domain'","Symbols","Undefined"],["Element","n","N"]]]

Would like the parser to insert the mathjson of the equation in place of the subscript/superscript.

Proposed Solution to Examples Above 1) ["Sum",["Subscript","k",["Delimiter",["Sequence","n","m"],"','"]],["Hold",["Delimiter",["Sequence","n","m"],"','"]]] 2) ["Sum","K_n",["Hold",["Element","n","N"]]]

emily0622 commented 9 months ago

Hi, can I implement it?

arnog commented 9 months ago

Sure! That would be great. You'll want to extend the canonicalIndexingSet function in src/compute-engine/library/utils.ts and then the evalSummation and evalMultiplication function to make use of the extended indexing set.

The correct output should be ["Sum", ..., "n", "m"] for \sum_{n, m} or ["Sum", ..., ["Pair", "n", 1], ["Pair", "m", 1]] for \sum_{n=1, m=1}...

emily0622 commented 9 months ago

Hi @arnog , some follow-up questions: 1) Why would \sum{n,m} -> ["Sum",...,"n","m"] instead of ["Sum",...,["Hold","n"],["Hold","m"]]? 2) would \sum{n,m}^{j,k} x -> ["Sum", "x", ["Triple","n",1,"j"], ["Triple","m",1,"k"]] 3) and would \sum_{d \in D;d \ne 5}{} d -> ["Sum", "d", ["Element","d","D"], ["NotEqual","d","5"]]

arnog commented 9 months ago
  1. The Hold is not actually necessary since the Sum is already 'hold: "all"` (I know it's generated right now, but it could be removed).
  2. yes, presumably
  3. yes