LaTeX to CAS translator
This mockup demonstrates the concept of TeX to Computer Algebra System (CAS) conversion.
The demo-application converts LaTeX functions which directly translate to CAS counterparts.
Functions without explicit CAS support are available for translation via a DRMF package (under development).
The following LaTeX input ...
{\displaystyle \begin{align} &2n (n + \alpha + \beta) (2n + \alpha + \beta - 2) P_n^{(\alpha,\beta)}(z) \\ &\qquad= (2n+\alpha + \beta-1) \Big\{ (2n+\alpha + \beta)(2n+\alpha+\beta-2) z + \alpha^2 - \beta^2 \Big\} P_{n-1}^{(\alpha,\beta)}(z) - 2 (n+\alpha - 1) (n + \beta-1) (2n+\alpha + \beta) P_{n-2}^{(\alpha, \beta)}(z), \end{align}}
... is translated to the CAS output ...
Semantic latex: \begin{align}&2 n(n + \alpha + \beta)(2 n + \alpha + \beta - 2) \JacobipolyP{\alpha}{\beta}{n}@{z} \\ &\qquad =(2 n + \alpha + \beta - 1) \{(2 n + \alpha + \beta)(2 n + \alpha + \beta - 2) z + \alpha^2 - \beta^2 \} \JacobipolyP{\alpha}{\beta}{n-1}@{z} - 2(n + \alpha - 1)(n + \beta - 1)(2 n + \alpha + \beta) \JacobipolyP{\alpha}{\beta}{n-2}@{z} ,\end{align}
Confidence: 0.65633676869532
Mathematica
Translation: 2*n*(n + \[Alpha]+ \[Beta])*(2*n + \[Alpha]+ \[Beta]- 2)*JacobiP[n, \[Alpha], \[Beta], z] == (2*n + \[Alpha]+ \[Beta]- 1)*((2*n + \[Alpha]+ \[Beta])*(2*n + \[Alpha]+ \[Beta]- 2)*z + \[Alpha]^(2)- \[Beta]^(2))*JacobiP[n - 1, \[Alpha], \[Beta], z]- 2*(n + \[Alpha]- 1)*(n + \[Beta]- 1)*(2*n + \[Alpha]+ \[Beta])*JacobiP[n - 2, \[Alpha], \[Beta], z]
Information
Sub Equations
- 2*n*(n + \[Alpha]+ \[Beta])*(2*n + \[Alpha]+ \[Beta]- 2)*JacobiP[n, \[Alpha], \[Beta], z] = (2*n + \[Alpha]+ \[Beta]- 1)*((2*n + \[Alpha]+ \[Beta])*(2*n + \[Alpha]+ \[Beta]- 2)*z + \[Alpha]^(2)- \[Beta]^(2))*JacobiP[n - 1, \[Alpha], \[Beta], z]- 2*(n + \[Alpha]- 1)*(n + \[Beta]- 1)*(2*n + \[Alpha]+ \[Beta])*JacobiP[n - 2, \[Alpha], \[Beta], z]
Free variables
- \[Alpha]
- \[Beta]
- n
- z
Symbol info
- Jacobi polynomial; Example: \JacobipolyP{\alpha}{\beta}{n}@{x}
Will be translated to: JacobiP[$2, $0, $1, $3] Relevant links to definitions: DLMF: http://dlmf.nist.gov/18.3#T1.t1.r2 Mathematica: https://reference.wolfram.com/language/ref/JacobiP.html?q=JacobiP
- Could be the second Feigenbaum constant.
But this system doesn't know how to translate it as a constant. It was translated as a general letter.
Tests
Symbolic
Test expression: (2*n*(n + \[Alpha]+ \[Beta])*(2*n + \[Alpha]+ \[Beta]- 2)*JacobiP[n, \[Alpha], \[Beta], z])-((2*n + \[Alpha]+ \[Beta]- 1)*((2*n + \[Alpha]+ \[Beta])*(2*n + \[Alpha]+ \[Beta]- 2)*z + \[Alpha]^(2)- \[Beta]^(2))*JacobiP[n - 1, \[Alpha], \[Beta], z]- 2*(n + \[Alpha]- 1)*(n + \[Beta]- 1)*(2*n + \[Alpha]+ \[Beta])*JacobiP[n - 2, \[Alpha], \[Beta], z])
ERROR:
{
"result": "ERROR",
"testTitle": "Simple",
"testExpression": null,
"resultExpression": null,
"wasAborted": false,
"conditionallySuccessful": false
}
Numeric
SymPy
Translation: 2*n*(n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*jacobi(n, Symbol('alpha'), Symbol('beta'), z) == (2*n + Symbol('alpha')+ Symbol('beta')- 1)*((2*n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*z + (Symbol('alpha'))**(2)- (Symbol('beta'))**(2))*jacobi(n - 1, Symbol('alpha'), Symbol('beta'), z)- 2*(n + Symbol('alpha')- 1)*(n + Symbol('beta')- 1)*(2*n + Symbol('alpha')+ Symbol('beta'))*jacobi(n - 2, Symbol('alpha'), Symbol('beta'), z)
Information
Sub Equations
- 2*n*(n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*jacobi(n, Symbol('alpha'), Symbol('beta'), z) = (2*n + Symbol('alpha')+ Symbol('beta')- 1)*((2*n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*z + (Symbol('alpha'))**(2)- (Symbol('beta'))**(2))*jacobi(n - 1, Symbol('alpha'), Symbol('beta'), z)- 2*(n + Symbol('alpha')- 1)*(n + Symbol('beta')- 1)*(2*n + Symbol('alpha')+ Symbol('beta'))*jacobi(n - 2, Symbol('alpha'), Symbol('beta'), z)
Free variables
- Symbol('alpha')
- Symbol('beta')
- n
- z
Symbol info
- Jacobi polynomial; Example: \JacobipolyP{\alpha}{\beta}{n}@{x}
Will be translated to: jacobi($2, $0, $1, $3) Relevant links to definitions: DLMF: http://dlmf.nist.gov/18.3#T1.t1.r2 SymPy: https://docs.sympy.org/latest/modules/functions/special.html#jacobi-polynomials
- Could be the second Feigenbaum constant.
But this system doesn't know how to translate it as a constant. It was translated as a general letter.
Tests
Symbolic
Numeric
Maple
Translation: 2*n*(n + alpha + beta)*(2*n + alpha + beta - 2)*JacobiP(n, alpha, beta, z) = (2*n + alpha + beta - 1)*((2*n + alpha + beta)*(2*n + alpha + beta - 2)*z + (alpha)^(2)- (beta)^(2))*JacobiP(n - 1, alpha, beta, z)- 2*(n + alpha - 1)*(n + beta - 1)*(2*n + alpha + beta)*JacobiP(n - 2, alpha, beta, z)
Information
Sub Equations
- 2*n*(n + alpha + beta)*(2*n + alpha + beta - 2)*JacobiP(n, alpha, beta, z) = (2*n + alpha + beta - 1)*((2*n + alpha + beta)*(2*n + alpha + beta - 2)*z + (alpha)^(2)- (beta)^(2))*JacobiP(n - 1, alpha, beta, z)- 2*(n + alpha - 1)*(n + beta - 1)*(2*n + alpha + beta)*JacobiP(n - 2, alpha, beta, z)
Free variables
- alpha
- beta
- n
- z
Symbol info
- Jacobi polynomial; Example: \JacobipolyP{\alpha}{\beta}{n}@{x}
Will be translated to: JacobiP($2, $0, $1, $3) Relevant links to definitions: DLMF: http://dlmf.nist.gov/18.3#T1.t1.r2 Maple: https://www.maplesoft.com/support/help/maple/view.aspx?path=JacobiP
- Could be the second Feigenbaum constant.
But this system doesn't know how to translate it as a constant. It was translated as a general letter.
Tests
Symbolic
Numeric
Dependency Graph Information
Includes
Is part of
Complete translation information:
{
"id" : "FORMULA_8faa73d3c1bbfd4e6cc0050ed0a95547",
"formula" : "\\begin{align}\n&2n (n + \\alpha + \\beta) (2n + \\alpha + \\beta - 2) P_n^{(\\alpha,\\beta)}(z) \\\\\n&\\qquad= (2n+\\alpha + \\beta-1) \\{ (2n+\\alpha + \\beta)(2n+\\alpha+\\beta-2) z + \\alpha^2 - \\beta^2 \\} P_{n-1}^{(\\alpha,\\beta)}(z) - 2 (n+\\alpha - 1) (n + \\beta-1) (2n+\\alpha + \\beta) P_{n-2}^{(\\alpha, \\beta)}(z),\n\\end{align}",
"semanticFormula" : "\\begin{align}&2 n(n + \\alpha + \\beta)(2 n + \\alpha + \\beta - 2) \\JacobipolyP{\\alpha}{\\beta}{n}@{z} \\\\ &\\qquad =(2 n + \\alpha + \\beta - 1) \\{(2 n + \\alpha + \\beta)(2 n + \\alpha + \\beta - 2) z + \\alpha^2 - \\beta^2 \\} \\JacobipolyP{\\alpha}{\\beta}{n-1}@{z} - 2(n + \\alpha - 1)(n + \\beta - 1)(2 n + \\alpha + \\beta) \\JacobipolyP{\\alpha}{\\beta}{n-2}@{z} ,\\end{align}",
"confidence" : 0.6563367686953199,
"translations" : {
"Mathematica" : {
"translation" : "2*n*(n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*JacobiP[n, \\[Alpha], \\[Beta], z] == (2*n + \\[Alpha]+ \\[Beta]- 1)*((2*n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*z + \\[Alpha]^(2)- \\[Beta]^(2))*JacobiP[n - 1, \\[Alpha], \\[Beta], z]- 2*(n + \\[Alpha]- 1)*(n + \\[Beta]- 1)*(2*n + \\[Alpha]+ \\[Beta])*JacobiP[n - 2, \\[Alpha], \\[Beta], z]",
"translationInformation" : {
"subEquations" : [ "2*n*(n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*JacobiP[n, \\[Alpha], \\[Beta], z] = (2*n + \\[Alpha]+ \\[Beta]- 1)*((2*n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*z + \\[Alpha]^(2)- \\[Beta]^(2))*JacobiP[n - 1, \\[Alpha], \\[Beta], z]- 2*(n + \\[Alpha]- 1)*(n + \\[Beta]- 1)*(2*n + \\[Alpha]+ \\[Beta])*JacobiP[n - 2, \\[Alpha], \\[Beta], z]" ],
"freeVariables" : [ "\\[Alpha]", "\\[Beta]", "n", "z" ],
"tokenTranslations" : {
"\\JacobipolyP" : "Jacobi polynomial; Example: \\JacobipolyP{\\alpha}{\\beta}{n}@{x}\nWill be translated to: JacobiP[$2, $0, $1, $3]\nRelevant links to definitions:\nDLMF: http://dlmf.nist.gov/18.3#T1.t1.r2\nMathematica: https://reference.wolfram.com/language/ref/JacobiP.html?q=JacobiP",
"\\alpha" : "Could be the second Feigenbaum constant.\nBut this system doesn't know how to translate it as a constant. It was translated as a general letter.\n"
}
},
"numericResults" : {
"overallResult" : "SKIPPED",
"numberOfTests" : 0,
"numberOfFailedTests" : 0,
"numberOfSuccessfulTests" : 0,
"numberOfSkippedTests" : 0,
"numberOfErrorTests" : 0,
"wasAborted" : false,
"crashed" : false,
"testCalculationsGroups" : [ ]
},
"symbolicResults" : {
"overallResult" : "ERROR",
"numberOfTests" : 1,
"numberOfFailedTests" : 0,
"numberOfSuccessfulTests" : 0,
"numberOfSkippedTests" : 0,
"numberOfErrorTests" : 1,
"crashed" : false,
"testCalculationsGroup" : [ {
"lhs" : "2*n*(n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*JacobiP[n, \\[Alpha], \\[Beta], z]",
"rhs" : "(2*n + \\[Alpha]+ \\[Beta]- 1)*((2*n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*z + \\[Alpha]^(2)- \\[Beta]^(2))*JacobiP[n - 1, \\[Alpha], \\[Beta], z]- 2*(n + \\[Alpha]- 1)*(n + \\[Beta]- 1)*(2*n + \\[Alpha]+ \\[Beta])*JacobiP[n - 2, \\[Alpha], \\[Beta], z]",
"testExpression" : "(2*n*(n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*JacobiP[n, \\[Alpha], \\[Beta], z])-((2*n + \\[Alpha]+ \\[Beta]- 1)*((2*n + \\[Alpha]+ \\[Beta])*(2*n + \\[Alpha]+ \\[Beta]- 2)*z + \\[Alpha]^(2)- \\[Beta]^(2))*JacobiP[n - 1, \\[Alpha], \\[Beta], z]- 2*(n + \\[Alpha]- 1)*(n + \\[Beta]- 1)*(2*n + \\[Alpha]+ \\[Beta])*JacobiP[n - 2, \\[Alpha], \\[Beta], z])",
"testCalculations" : [ {
"result" : "ERROR",
"testTitle" : "Simple",
"testExpression" : null,
"resultExpression" : null,
"wasAborted" : false,
"conditionallySuccessful" : false
} ]
} ]
}
},
"SymPy" : {
"translation" : "2*n*(n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*jacobi(n, Symbol('alpha'), Symbol('beta'), z) == (2*n + Symbol('alpha')+ Symbol('beta')- 1)*((2*n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*z + (Symbol('alpha'))**(2)- (Symbol('beta'))**(2))*jacobi(n - 1, Symbol('alpha'), Symbol('beta'), z)- 2*(n + Symbol('alpha')- 1)*(n + Symbol('beta')- 1)*(2*n + Symbol('alpha')+ Symbol('beta'))*jacobi(n - 2, Symbol('alpha'), Symbol('beta'), z)",
"translationInformation" : {
"subEquations" : [ "2*n*(n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*jacobi(n, Symbol('alpha'), Symbol('beta'), z) = (2*n + Symbol('alpha')+ Symbol('beta')- 1)*((2*n + Symbol('alpha')+ Symbol('beta'))*(2*n + Symbol('alpha')+ Symbol('beta')- 2)*z + (Symbol('alpha'))**(2)- (Symbol('beta'))**(2))*jacobi(n - 1, Symbol('alpha'), Symbol('beta'), z)- 2*(n + Symbol('alpha')- 1)*(n + Symbol('beta')- 1)*(2*n + Symbol('alpha')+ Symbol('beta'))*jacobi(n - 2, Symbol('alpha'), Symbol('beta'), z)" ],
"freeVariables" : [ "Symbol('alpha')", "Symbol('beta')", "n", "z" ],
"tokenTranslations" : {
"\\JacobipolyP" : "Jacobi polynomial; Example: \\JacobipolyP{\\alpha}{\\beta}{n}@{x}\nWill be translated to: jacobi($2, $0, $1, $3)\nRelevant links to definitions:\nDLMF: http://dlmf.nist.gov/18.3#T1.t1.r2\nSymPy: https://docs.sympy.org/latest/modules/functions/special.html#jacobi-polynomials",
"\\alpha" : "Could be the second Feigenbaum constant.\nBut this system doesn't know how to translate it as a constant. It was translated as a general letter.\n"
}
}
},
"Maple" : {
"translation" : "2*n*(n + alpha + beta)*(2*n + alpha + beta - 2)*JacobiP(n, alpha, beta, z) = (2*n + alpha + beta - 1)*((2*n + alpha + beta)*(2*n + alpha + beta - 2)*z + (alpha)^(2)- (beta)^(2))*JacobiP(n - 1, alpha, beta, z)- 2*(n + alpha - 1)*(n + beta - 1)*(2*n + alpha + beta)*JacobiP(n - 2, alpha, beta, z)",
"translationInformation" : {
"subEquations" : [ "2*n*(n + alpha + beta)*(2*n + alpha + beta - 2)*JacobiP(n, alpha, beta, z) = (2*n + alpha + beta - 1)*((2*n + alpha + beta)*(2*n + alpha + beta - 2)*z + (alpha)^(2)- (beta)^(2))*JacobiP(n - 1, alpha, beta, z)- 2*(n + alpha - 1)*(n + beta - 1)*(2*n + alpha + beta)*JacobiP(n - 2, alpha, beta, z)" ],
"freeVariables" : [ "alpha", "beta", "n", "z" ],
"tokenTranslations" : {
"\\JacobipolyP" : "Jacobi polynomial; Example: \\JacobipolyP{\\alpha}{\\beta}{n}@{x}\nWill be translated to: JacobiP($2, $0, $1, $3)\nRelevant links to definitions:\nDLMF: http://dlmf.nist.gov/18.3#T1.t1.r2\nMaple: https://www.maplesoft.com/support/help/maple/view.aspx?path=JacobiP",
"\\alpha" : "Could be the second Feigenbaum constant.\nBut this system doesn't know how to translate it as a constant. It was translated as a general letter.\n"
}
}
}
},
"positions" : [ ],
"includes" : [ "z", "n + \\alpha + \\beta", "\\alpha,\\beta", "n", "P_{n}^{(\\alpha, \\beta)}", "\\begin{align}&2n (n + \\alpha + \\beta) (2n + \\alpha + \\beta - 2) P_n^{(\\alpha,\\beta)}(z) \\\\&\\qquad= (2n+\\alpha + \\beta-1) \\Big\\{ (2n+\\alpha + \\beta)(2n+\\alpha+\\beta-2) z + \\alpha^2 - \\beta^2 \\Big\\} P_{n-1}^{(\\alpha,\\beta)}(z) - 2 (n+\\alpha - 1) (n + \\beta-1) (2n+\\alpha + \\beta) P_{n-2}^{(\\alpha, \\beta)}(z),\\end{align}", "P_{n}^{(\\alpha, \\beta)}(x)" ],
"isPartOf" : [ "\\begin{align}&2n (n + \\alpha + \\beta) (2n + \\alpha + \\beta - 2) P_n^{(\\alpha,\\beta)}(z) \\\\&\\qquad= (2n+\\alpha + \\beta-1) \\Big\\{ (2n+\\alpha + \\beta)(2n+\\alpha+\\beta-2) z + \\alpha^2 - \\beta^2 \\Big\\} P_{n-1}^{(\\alpha,\\beta)}(z) - 2 (n+\\alpha - 1) (n + \\beta-1) (2n+\\alpha + \\beta) P_{n-2}^{(\\alpha, \\beta)}(z),\\end{align}" ],
"definiens" : [ ]
}