Commit 63bd11d
Simplify and evaluation disagreed about three-valued logic. Simplify gave the Kleene answer
and evaluation absorbed everything into NaN, so "True or (True and (x < 0))" simplified to
True and evaluated at x := i to NaN -- the same expression, two answers, and one of them
claiming the thing does not exist.
The tables were already three-valued. Andf reads (_, Boolean(false)) as False and
(Boolean(true), _) as its right operand, which is Kleene as written. What overrode them was a
single line in the shared ExpandOnTwoArguments -- if (left.IsNaN || right.IsNaN) return
MathS.NaN -- running before the table was consulted. The four connectives now get first
refusal on an undefined operand, through a settlesNaN flag, and hand back null where they
cannot settle it, which is what still reaches NaN. Checked row by row against Kleene's tables
first: and, or, implies and xor each already give the right answer for an unknown operand,
including leaving it unknown where it decides the result.
Opted in per node rather than changed in the helper for everything, because arithmetic must
stay strict: a rule for a zero factor exists and NaN * 0 must not reach it. Measured, not
assumed -- (0/0) * 0, (0/0) + 1 and (0/0) - (0/0) are all still NaN.
#880 set this out as a fork between Kleene and strict and left it open for want of one
measurement: how much of the suite pins strict propagation. The answer is one assertion of
6385, and it is that issue's own guard clause -- the row asserting `x < 0 and x = 0` is NaN at
x = i, written to keep the test from going vacuous if a comparison ever gained a truth value.
It has gained one indirectly: `i = 0` is decidably False, and False and u is False.
That row moves to a test of its own, which also records the consequence: Simplify answers
`False provided x in RR` there, and the condition is over-strong for that reduction, which
needs one conjunct false rather than both operands real. So Simplify is now weaker than
evaluation on it rather than stronger. The rules #876 conditioned want going through one at a
time to see which still need it; that is not this change.
Suite 6389 passed, F# wrapper 130 passed; casbench 117/119 with 0 wrong; rootcheck 596/596;
simpsweep 10463/10463; propcheck 1340 checks 0 failures; crashcheck 1652 cases 0 crashes and 0
unexpected throws; boundcheck unchanged at 2 disagreements.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 8c56b59 commit 63bd11d
4 files changed
Lines changed: 152 additions & 10 deletions
File tree
- Sources
- AngouriMath/Functions/Evaluation
- Evaluation.Discrete
- Tests/UnitTests/Common
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
76 | 77 | | |
77 | 78 | | |
78 | 79 | | |
| |||
407 | 408 | | |
408 | 409 | | |
409 | 410 | | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
410 | 460 | | |
411 | 461 | | |
412 | 462 | | |
| |||
Lines changed: 23 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
48 | 55 | | |
49 | 56 | | |
50 | | - | |
51 | | - | |
52 | | - | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
53 | 60 | | |
54 | | - | |
| 61 | + | |
| 62 | + | |
55 | 63 | | |
56 | 64 | | |
57 | 65 | | |
58 | 66 | | |
59 | 67 | | |
60 | | - | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
61 | 79 | | |
62 | 80 | | |
63 | 81 | | |
| |||
Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
72 | | - | |
| 72 | + | |
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
91 | | - | |
| 91 | + | |
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
| |||
107 | 107 | | |
108 | 108 | | |
109 | 109 | | |
110 | | - | |
| 110 | + | |
111 | 111 | | |
112 | 112 | | |
113 | 113 | | |
| |||
Lines changed: 75 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
473 | 473 | | |
474 | 474 | | |
475 | 475 | | |
476 | | - | |
477 | 476 | | |
478 | 477 | | |
479 | 478 | | |
| |||
490 | 489 | | |
491 | 490 | | |
492 | 491 | | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
493 | 515 | | |
494 | 516 | | |
495 | 517 | | |
| |||
876 | 898 | | |
877 | 899 | | |
878 | 900 | | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
879 | 953 | | |
880 | 954 | | |
0 commit comments