diff --git a/Sources/AngouriMath/Functions/Algebra/Groebner/GroebnerSystemSolver.cs b/Sources/AngouriMath/Functions/Algebra/Groebner/GroebnerSystemSolver.cs index a836c2d45..df1e1aa92 100644 --- a/Sources/AngouriMath/Functions/Algebra/Groebner/GroebnerSystemSolver.cs +++ b/Sources/AngouriMath/Functions/Algebra/Groebner/GroebnerSystemSolver.cs @@ -249,15 +249,21 @@ static Entity Canonical(Entity substituted, IReadOnlyDictionary r /// radical is not bounded by anything, and an early version of this spent longer /// failing to prove a degree-nine root satisfied its system than the old solver takes /// to solve the whole thing. `InnerSimplified` is one structural pass, which is - /// cheap enough to be safe here and still proves what is needed: + /// cheap enough to be safe here and still settles what is needed: /// sqrt(2)^2 - 2, (3^(1/3))^3 - 3 and a Cardano cube root all reduce to /// zero in single-digit milliseconds. /// /// - /// It only ever proves zero, never disproves it, so a candidate it cannot settle is - /// declined and the system falls back. That costs coverage and never costs - /// correctness — and no tolerance is involved anywhere, which is what would turn a - /// root that is merely close into one that gets reported. + /// It only ever answers zero, never disproves it, so a candidate it cannot settle is + /// declined and the system falls back, which costs coverage. The zero is decided to + /// about fifty digits, though, not exactly. With downcasting on, the default, a + /// residual that evaluates below DowncastingTolerance, half the hundred digits + /// of , times the scale that + /// cancelled is taken as 0. So a candidate that is close enough passes as + /// well: 8y^3 + 4y^2 - 4y - 1 at the Cardano root for cos(2pi/7), with + /// one 7 made 7 + 10^(-50), comes out 0, where its value is + /// 2.48e-52 - 3.26e-52 i. + /// #2143 /// /// static bool Satisfies(