LaTeX to CAS translator

Jump to navigation Jump to search

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" : [ ]
}

Specify your own input