You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 62935ca
Browse filesBrowse the repository at this point in the historyBrowse files
Do not answer an exhausted search with the empty set (#1036, #746 tier 4) (#1046)
`Solve` returned an empty `FiniteSet` both for an equation shown to have no roots
and for one every solver declined. The empty set is a positive claim, so the
second was a wrong answer: `x^6 + x*y + 1 = 0` has six roots for every `y` and
came back as `{ }`.
The two exits that mean "nothing settled this" now answer with the equation as a
set builder — the spelling `AnalyticalEquationSolver` already uses for #278 and
#964 — while an equation whose emptiness was established keeps `{ }`. Newton's
method is included: a search from finitely many starting points inside a bounded
region finding nothing is a fact about the search.
A conjunction with an unsettled side is answered as the conjunction. Intersecting
a finite set with a condition keeps the elements whose membership could not be
decided, so `x^6 + x*y + 1 = 0 and x - 1 = 0` would have become `{ 1 }` — one
false claim in place of another, since 1 solves the first only at `y = -2`.
Four theory rows recorded the old answer as correct. Each pinned an equation the
solver gives up on and that has roots, so they move to the new test file with the
honest assertion rather than being loosened.
Claude-Session: https://claude.ai/code/session_01Bjumi5K7fg8yx6UK1mZTQd
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: BREAKING-CHANGES.md
+102Lines changed: 102 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,9 @@ read first.
21
21
22
22
| Silent? | What | Was | Is |
23
23
|---|---|---|---|
24
+
|**Silent**|`"x6 + x y + 1 = 0".ToEntity().Solve("x")`, and every equation no solver settles |`{ }` — there are no roots |`{ x : 1 + x ^ 6 + x * y = 0 }` — these are the roots, whichever they are |
25
+
|**Silent**|`"(x - 1) * (x6 + x y + 1) = 0".ToEntity().Solve("x")`|`{ 1 }`|`{ 1 } \/ { x : 1 + x ^ 6 + x * y = 0 }`|
26
+
|**Silent**|`"x6 + x y + 1 = 0 and x - 1 = 0".ToEntity().Solve("x")`|`{ }`|`{ x : x ^ 6 + x * y + 1 = 0 and x - 1 = 0 }`|
24
27
|**Silent**|`"sum(k, k, 1, n)".ToEntity().FreeVariables`, and `product`|`{ k, n }` — the bound index counted as free |`{ n }`|
25
28
|**Silent**|`"integral(t * b, t, 0, 1)".ToEntity().FreeVariables`, and every integral with limits |`{ b, t }`|`{ b }`|
26
29
||`"x ^ 3 - x > 0".ToEntity().Solve("x")`, and every polynomial inequality of degree three or more |`NotSufficientlySupportedException: Only linear and quadratic polynomial inequalities are supported`|`(-1; 0) \/ (1; +oo)` — the solution set |
@@ -37,6 +40,105 @@ read first.
37
40
||`Compile` to a nullable integral return type in a NativeAOT app |`AngouriBugException: IsNaN method expected for type System.Double`, which took the process down | the compiled function |
38
41
|**Silent**| an app publishing with `PublishTrimmed` or NativeAOT |`AngouriMath.dll` was copied in whole, being unmarked | it is trimmed with the rest, since the assembly now declares `IsTrimmable`|
39
42
43
+
### An equation nothing settled is no longer answered with the empty set
44
+
45
+
`Solve` and `SolveEquation` returned an empty `FiniteSet` for two different things: an equation
46
+
shown to have no roots, and an equation every solver in the chain declined. The empty set is a
47
+
positive claim — *no x satisfies this* — so the second of those was a wrong answer rather than a
0 commit comments