Skip to content
docs
Arxo ↗

Computer algebra: the textbook-steps run

For LLMs6 sections

Computer algebra systems cover far more mathematics than this comparison: their scope is not in question here. This page is about applying textbook rules step by step and about what certifies the answer. For the broader question of what tools change for a model solving science tasks, see Science tasks: models with and without tools.

Result: a bank of 129 checked rows — derivative, integral, limit and ODE rows (dr-1-*, di-1-*, li-1-*, od-1-*) — was recounted on 2 October 2026. SymPy 1.14.0 and Wolfram 15.0.1 (for Linux x86, 64-bit) agree on all 129; Arxo, checking the presented steps, records zero false accepts and zero silent refusals on expected cases. On top of the bank, 15 textbook cases C01–C15 from OpenStax Calculus (editions pinned in the package sources) were mapped against both references: C01–C05 were executed by the Arxo case package (6 of 6 tests pass, including the related by-parts case C13r); the remaining cases sit on the stated model boundary, except C14, where the two references disagree. The numbers belong to SymPy 1.14.0, Wolfram build 15.0.1, and law 0.1.1.

The expectations come from a printed textbook, OpenStax Calculus, not from either implementation: each case states the rule to apply (power rule, sine derivative, power antiderivative, net change, a special limit, series, corner cases) and the value the textbook requires. SymPy 1.14.0 serves as the main reference; Wolfram 15.0.1 serves as the second reference, called fresh 15 times for the C01–C15 mapping (one probe plus 14 case calls, no cache reuse). The Arxo side applies the pinned textbook formulations through the packages openstax.calculus_derivatives, openstax.calculus_integrals, openstax.calculus_limits and openstax.calculus_series. Public pages of the references are at SymPy and the Wolfram Language.

Three outcome classes are used. A case matches when both sides give the textbook value, possibly in different but equivalent forms (factored or expanded, an unevaluated-input refusal against an explicit infinity where both mean divergence). A case is not comparable when the two sides answer different questions by construction (a rule the catalog does not state). C14 alone is a mismatch between a reference and the textbook, described below. An honest refusal — no value with a stated reason — is its own class, not a failure.

Bank: 129 of 129 rows agree between SymPy 1.14.0 and Wolfram 15.0.1; Arxo false accepts 0 of 129. Cases C01–C05 below are a subset of those rows and were additionally executed by the Arxo case package.

CaseExpectation (OpenStax)SymPy 1.14.0Wolfram 15.0.1ArxoOutcome
C013x squared3x squared (bank dr-1-0000)confirmed 1/1 in bankPASS, power rule justifies (executed)match
C02cos xcos x (bank dr-1-0018)confirmed 1/1 in bankPASS, sine rule justifies (executed)match
C03x cubed over 3 plus constantx cubed over 3 (bank di-1-0000)confirmed 1/1 in bankPASS, power antiderivative justifies (executed)match
C04one halfone halfone halfPASS, net change justifies the definite integral (executed, exact case)match
C0511 (bank li-1-0024)1 in bankPASS, special-limit rule justifies (executed; mapping note in force)match, with note
C06divergesinfinityinput returned unevaluatedoutside the model (no case of this shape)match in substance, forms differ
C071/a for positive real part of a; otherwise not establishedpiecewise: 1/a under condition, else the integral formconditional form with Re(a) > 0; with a > 0 gives 1/aoutside the model (the catalog states no conditional branches)match (the two conditions are equivalent)
C08pi squared over 6pi squared over 6Pi squared over 6outside the model (no series family in the case bank)match
C09divergesinfinitysum returned unevaluatedoutside the model (as C06)match in substance, forms differ
C10does not exist (corner point)no value (not-a-number at zero; a complex form, not a value)derivative left unevaluatedoutside the model (no corner-point rule)match (neither side gives a value)
C11(x-1)(x+1)factored form; expansion returns the inputthe same product, factors ordered differentlypolynomial-factor shoulder, not executed herematch
C122 pi i kinteger-indexed set of valuesinteger-parameter formoutside the model (no solver package)match (forms equivalent)
C13e to x times (sin x minus cos x) over 2equal value, expandedequal valueexact case not executed; related by-parts case C13r PASSmatch (values equal; the decomposition choice belongs to the student)
C141/(1-r) for |r| < 1; otherwise not establishedpiecewise with the |r| < 1 conditionthe bare formula without the condition; at r = 1/2 gives 2outside the model (as C08)mismatch between Wolfram and the textbook
C15divergesinfinityinput returned unevaluatedoutside the model (as C06)match in substance, forms differ

One case, C14, the geometric series: SymPy 1.14.0 returns the sum guarded by the condition |r| < 1, which is what the textbook requires; Wolfram 15.0.1 returns the bare closed form without the condition. At r = 1/2 both references give 2, so the difference only matters where the condition decides the answer. In a bank pipeline such a case would leave the expected set and enter reference disagreement — 1 of 9 mapped cases here, with the other 8 agreeing in substance, including honest refusals in different forms (C06, C09, C10, C15).

A second, quieter difference is form, not value: where the textbook expects divergence, SymPy writes infinity while Wolfram returns the input unevaluated (C06, C09, C15); where no value exists, SymPy surfaces not-a-number or a complex form while Wolfram leaves the derivative unevaluated (C10). The contract counts these as agreement in substance.

Series (C08, C14), improper integrals (C06, C09, C15), parametric cases with assumption branches (C07), the corner point (C10) and complex roots (C12) sit outside the checked catalog: where the catalog states no rule, Arxo answers “not established” with the reason instead of a value. That silence with a reason is a property of the package, stated in advance — the same property the bank measures on its negative controls. One further limit belongs to all three sides equally: no side ships an independent certificate with its answer. The bank answers are verdict records, and the cross-check is Wolfram times SymPy independently, 129 of 129 — not a proof object either side could hand over.

Pin the bank at its recorded commit and recount the five per-family answer files (wolfram, sympy, expected lines) against each other; that comparison is the only execution this run adds, and it uses the plain interpreter without the bank tooling. Pin the Arxo side: law 0.1.1 with the OpenStax packages named above; the C01–C05 and C13r cases execute as package tests (6 of 6 pass). Pin the mapping calls: SymPy 1.14.0 locally, Wolfram build 15.0.1, 15 fresh calls in total. Each mapped answer is filed verbatim with its case identifier and reference version, so any row of the table can be rechecked case by case.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.