@ceccec/millennium-solutions 9.2.8 → 9.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/speedup.md CHANGED
@@ -7,7 +7,7 @@ head:
7
7
 
8
8
  # The real uuidna advantage — measured, in all domains
9
9
 
10
- > Generated from the **2643** ledger entries and **59** domains, recomputed each build. The advantage is
10
+ > Generated from the **2658** ledger entries and **59** domains, recomputed each build. The advantage is
11
11
  > real and **measured**, and honestly bounded: a **verification and reuse** complexity reduction — **not**
12
12
  > faster original compute, **not** faster than light, **not** quantum.
13
13
 
@@ -33,9 +33,9 @@ theorems verify in `⌈log₂N⌉`. So one proof covers the whole [rosetta](/):
33
33
 
34
34
  ## Discovery lead — a lead, never a verdict
35
35
 
36
- Grouping the 2643 receipts by the digital root of their address, the **sparsest** region is digit
37
- **3** (268) — a candidate area to examine, not a finding. The ledger is currently held
38
- at **2643** (the captain's cap): improving a theorem's name or proof heals the record without changing the
36
+ Grouping the 2658 receipts by the digital root of their address, the **sparsest** region is digit
37
+ **3** (269) — a candidate area to examine, not a finding. The ledger is currently held
38
+ at **2658** (the captain's cap): improving a theorem's name or proof heals the record without changing the
39
39
  count; discovering a new one would require lifting the cap.
40
40
 
41
41
  A content-address proves **integrity, not truth**.
@@ -18966,5 +18966,80 @@
18966
18966
  "key": "lean_sequences_cassinis_identity_for_every_m",
18967
18967
  "name": "lean sequences.lean: cassinis_identity_for_every_m — ∀ m : Nat, fib (2 * m + 1) * fib (2 * m + 3) = fib (2 * m + 2) * fib (2 * m + 2) + 1 ∧ fib (2 * m) * fib (2 * m + 2) + 1 = fib (2 * m + 1) * fib (2 * m + 1) — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18968
18968
  "receipt": "3b815427-42b8-8b8c-abf3-423b1e268af3"
18969
+ },
18970
+ {
18971
+ "key": "lean_nim_the_xor_of_two_bits_is_their_sum_mod_two",
18972
+ "name": "lean nim.lean: the_xor_of_two_bits_is_their_sum_mod_two — ∀ x y : Nat, (if x % 2 == y % 2 then 0 else 1) = (x + y) % 2 — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18973
+ "receipt": "322304d5-f000-8492-8e7f-69ce46520610"
18974
+ },
18975
+ {
18976
+ "key": "lean_nim_xor_commutes_at_every_fuel",
18977
+ "name": "lean nim.lean: xor_commutes_at_every_fuel — ∀ f a b : Nat, xorF f a b = xorF f b a — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18978
+ "receipt": "b091d5a8-4e4a-8116-93d8-199afc028903"
18979
+ },
18980
+ {
18981
+ "key": "lean_nim_one_more_step_of_fuel_changes_nothing_once_it_exceeds_an_argument",
18982
+ "name": "lean nim.lean: one_more_step_of_fuel_changes_nothing_once_it_exceeds_an_argument — ∀ f a b : Nat, (a < f ∨ b < f) → xorF (f + 1) a b = xorF f a b — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18983
+ "receipt": "adf2ef5a-ef44-84b9-adb7-2edf0437284f"
18984
+ },
18985
+ {
18986
+ "key": "lean_nim_more_fuel_changes_nothing_once_it_exceeds_an_argument",
18987
+ "name": "lean nim.lean: more_fuel_changes_nothing_once_it_exceeds_an_argument — ∀ k f a b : Nat, (a < f ∨ b < f) → xorF (f + k) a b = xorF f a b — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18988
+ "receipt": "961d94be-959c-80ff-b0c4-03079551178a"
18989
+ },
18990
+ {
18991
+ "key": "lean_nim_xor_reads_the_same_at_every_sufficient_fuel",
18992
+ "name": "lean nim.lean: xor_reads_the_same_at_every_sufficient_fuel — ∀ g a b : Nat, (a < g ∨ b < g) → xorN a b = xorF g a b — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18993
+ "receipt": "e04a45b5-8834-8bc4-bf6e-bff90869081f"
18994
+ },
18995
+ {
18996
+ "key": "lean_nim_a_number_xored_with_itself_is_zero_at_every_fuel",
18997
+ "name": "lean nim.lean: a_number_xored_with_itself_is_zero_at_every_fuel — ∀ f b : Nat, xorF f b b = 0 — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
18998
+ "receipt": "409e78df-b565-83bb-b177-aa46813c1cb7"
18999
+ },
19000
+ {
19001
+ "key": "lean_nim_xor_splits_off_its_lowest_bit",
19002
+ "name": "lean nim.lean: xor_splits_off_its_lowest_bit — ∀ g x c : Nat, 1 ≤ g → xorF (g + 1) x c = (x + c) % 2 + 2 * xorF g (x / 2) (c / 2) — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19003
+ "receipt": "fa8f797f-95fa-80c6-9abc-4bd21309d53a"
19004
+ },
19005
+ {
19006
+ "key": "lean_nim_xor_undoes_itself_when_the_fuel_suffices",
19007
+ "name": "lean nim.lean: xor_undoes_itself_when_the_fuel_suffices — ∀ f a b g : Nat, (a < f ∨ b < f) → b < g → xorF g (xorF f a b) b = a — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19008
+ "receipt": "ba799e13-9cb6-8fc8-ab55-3879eb845e7f"
19009
+ },
19010
+ {
19011
+ "key": "lean_nim_xor_is_commutative_for_every_a_b",
19012
+ "name": "lean nim.lean: xor_is_commutative_for_every_a_b — ∀ a b : Nat, xorN a b = xorN b a — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19013
+ "receipt": "e62bc467-f90b-8bb2-844c-c44676d6fce0"
19014
+ },
19015
+ {
19016
+ "key": "lean_nim_xor_zero_is_identity_for_every_a",
19017
+ "name": "lean nim.lean: xor_zero_is_identity_for_every_a — ∀ a : Nat, xorN a 0 = a — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19018
+ "receipt": "667bd69d-51ea-88da-a48e-ce4a33c4f518"
19019
+ },
19020
+ {
19021
+ "key": "lean_nim_xor_is_its_own_inverse_for_every_a_b",
19022
+ "name": "lean nim.lean: xor_is_its_own_inverse_for_every_a_b — ∀ a b : Nat, xorN (xorN a b) b = a — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19023
+ "receipt": "e2f6d0f1-2fa2-832e-b884-1ac9f13160a0"
19024
+ },
19025
+ {
19026
+ "key": "lean_nim_xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves",
19027
+ "name": "lean nim.lean: xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves — ∀ a b : Nat, xorN a b = (a + b) % 2 + 2 * xorN (a / 2) (b / 2) — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19028
+ "receipt": "07c467d9-8226-81d4-93b2-612ebd433b2b"
19029
+ },
19030
+ {
19031
+ "key": "lean_nim_xor_is_associative_below_every_bound",
19032
+ "name": "lean nim.lean: xor_is_associative_below_every_bound — ∀ n a b c : Nat, a + b + c ≤ n → xorN (xorN a b) c = xorN a (xorN b c) — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19033
+ "receipt": "0c3ef805-2811-8035-a30b-cc03489171c1"
19034
+ },
19035
+ {
19036
+ "key": "lean_nim_xor_is_associative_for_every_a_b_c",
19037
+ "name": "lean nim.lean: xor_is_associative_for_every_a_b_c — ∀ a b c : Nat, xorN (xorN a b) c = xorN a (xorN b c) — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19038
+ "receipt": "d2a922d9-f09d-82db-ae54-2f92149512c9"
19039
+ },
19040
+ {
19041
+ "key": "lean_nim_the_nim_sum_is_a_gf2_vector_addition_for_every_a_b_c",
19042
+ "name": "lean nim.lean: the_nim_sum_is_a_gf2_vector_addition_for_every_a_b_c — ∀ a b c : Nat, xorN a b = xorN b a ∧ xorN (xorN a b) c = xorN a (xorN b c) ∧ xorN (xorN a b) b = a ∧ xorN a 0 = a — proved by the Lean kernel for every value (by\n intro), standard axioms only — checked by lean.ts",
19043
+ "receipt": "caa5c327-62cf-8171-9507-6453cfdaed0c"
18969
19044
  }
18970
19045
  ]
@@ -16,13 +16,16 @@ set_option maxHeartbeats 2000000
16
16
  -- stated in each name rather than implied.
17
17
  --
18
18
  -- XOR is imported from Fnv rather than restated: it is the same fuel-bounded structural fold, built because
19
- -- Nat's bitwise operations are well-founded and would drag `propext` into every theorem here.
19
+ -- Nat's bitwise operations are well-founded and would drag `propext` into every theorem here. Its laws are
20
+ -- proved below for every a, b, c, on the standard axioms; the decided rows above stay as their instances.
20
21
 
21
22
  namespace Nim
22
23
 
23
24
  open Fnv (xorF)
24
25
 
25
- def xorN (a b : Nat) : Nat := xorF 33 a b
26
+ -- the fuel is a + b + 1, which always exceeds what the fold needs (each step halves both arguments and the fold
27
+ -- stops at the first zero); the earlier fuel of 33 read XOR correctly only below 2³³ — a cap, now gone
28
+ def xorN (a b : Nat) : Nat := xorF (a + b + 1) a b
26
29
  -- The board is SMALL and stated, because the game tree is exponential: deciding `lost` explores every play
27
30
  -- from every position, and at 8x8 the kernel exceeds its heartbeat budget. Six is what `decide` settles here
28
31
  -- in reasonable time. A larger board is not a harder theorem, it is a longer computation — and claiming the
@@ -42,7 +45,7 @@ def lost : Nat → Nat → Nat → Bool
42
45
  def isLost (a b : Nat) : Bool := lost (a + b + 1) a b
43
46
 
44
47
  -- ── BOUTON: a two-heap position is lost for the mover exactly when the heaps are equal — which is exactly
45
- -- when their XOR is zero. Decided over every position on the 8×8 board. ──
48
+ -- when their XOR is zero. Decided over every position on the N×N board, N = 6. ──
46
49
  theorem bouton_two_heaps_lost_iff_xor_zero :
47
50
  (List.range N).all (fun a => (List.range N).all (fun b =>
48
51
  isLost a b == (xorN a b == 0))) := by decide
@@ -102,4 +105,207 @@ set_option maxRecDepth 4000000 in
102
105
  theorem bouton_holds_at_every_heap_size_to_six :
103
106
  (List.range 7).all (fun a => (List.range 7).all (fun b => isLost a b == (xorN a b == 0))) := by decide
104
107
 
108
+
109
+ -- ── XOR's algebra for every a, b, c — no bound ───────────────────────────────────────────────────────────────
110
+ -- xor_is_its_own_inverse and xor_is_commutative (a, b < 16), xor_zero_is_identity (a < 32) and
111
+ -- the_nim_sum_is_a_gf2_vector_addition (a, b, c < 16) were decided over a range; these prove them for every value.
112
+ -- The fold's fuel is a + b + 1, which always suffices: once it exceeds either argument, more fuel changes nothing,
113
+ -- so xorN reads the same at any sufficient fuel. Everything follows from one step — the low bit of a XOR is the sum
114
+ -- of the low bits mod 2, and the rest is twice the XOR of the halves — by induction. Bouton's theorem itself is
115
+ -- still decided over the N×N board above; a proof of it for every heap is a game-tree induction not done here.
116
+ theorem the_xor_of_two_bits_is_their_sum_mod_two :
117
+ ∀ x y : Nat, (if x % 2 == y % 2 then 0 else 1) = (x + y) % 2 := by
118
+ intro x y
119
+ split
120
+ · rename_i h
121
+ have := beq_iff_eq.mp h
122
+ omega
123
+ · rename_i h
124
+ have : x % 2 ≠ y % 2 := fun e => h (beq_iff_eq.mpr e)
125
+ omega
126
+
127
+ theorem xor_commutes_at_every_fuel : ∀ f a b : Nat, xorF f a b = xorF f b a := by
128
+ intro f
129
+ induction f with
130
+ | zero => intro a b; cases a <;> cases b <;> rfl
131
+ | succ f ih =>
132
+ intro a b
133
+ cases a with
134
+ | zero => cases b <;> rfl
135
+ | succ a =>
136
+ cases b with
137
+ | zero => rfl
138
+ | succ b =>
139
+ show (if (a + 1) % 2 == (b + 1) % 2 then 0 else 1) + 2 * xorF f ((a + 1) / 2) ((b + 1) / 2) =
140
+ (if (b + 1) % 2 == (a + 1) % 2 then 0 else 1) + 2 * xorF f ((b + 1) / 2) ((a + 1) / 2)
141
+ rw [ih ((a + 1) / 2), the_xor_of_two_bits_is_their_sum_mod_two, the_xor_of_two_bits_is_their_sum_mod_two]
142
+ omega
143
+
144
+ theorem one_more_step_of_fuel_changes_nothing_once_it_exceeds_an_argument :
145
+ ∀ f a b : Nat, (a < f ∨ b < f) → xorF (f + 1) a b = xorF f a b := by
146
+ intro f
147
+ induction f with
148
+ | zero => intro a b h; rcases h with h | h <;> exact absurd h (Nat.not_lt_zero _)
149
+ | succ f ih =>
150
+ intro a b h
151
+ cases a with
152
+ | zero => cases b <;> rfl
153
+ | succ a =>
154
+ cases b with
155
+ | zero => rfl
156
+ | succ b =>
157
+ show (if (a + 1) % 2 == (b + 1) % 2 then 0 else 1) + 2 * xorF (f + 1) ((a + 1) / 2) ((b + 1) / 2) =
158
+ (if (a + 1) % 2 == (b + 1) % 2 then 0 else 1) + 2 * xorF f ((a + 1) / 2) ((b + 1) / 2)
159
+ have h' : (a + 1) / 2 < f ∨ (b + 1) / 2 < f := by
160
+ rcases h with h | h
161
+ · exact Or.inl (by omega)
162
+ · exact Or.inr (by omega)
163
+ rw [ih _ _ h']
164
+
165
+ theorem more_fuel_changes_nothing_once_it_exceeds_an_argument :
166
+ ∀ k f a b : Nat, (a < f ∨ b < f) → xorF (f + k) a b = xorF f a b := by
167
+ intro k
168
+ induction k with
169
+ | zero => intro f a b _; rfl
170
+ | succ k ih =>
171
+ intro f a b h
172
+ have h' : a < f + k ∨ b < f + k := by
173
+ rcases h with h | h
174
+ · exact Or.inl (by omega)
175
+ · exact Or.inr (by omega)
176
+ rw [← Nat.add_assoc, one_more_step_of_fuel_changes_nothing_once_it_exceeds_an_argument _ _ _ h', ih f a b h]
177
+
178
+ theorem xor_reads_the_same_at_every_sufficient_fuel :
179
+ ∀ g a b : Nat, (a < g ∨ b < g) → xorN a b = xorF g a b := by
180
+ intro g a b h
181
+ unfold xorN
182
+ have h1 : a < a + b + 1 ∨ b < a + b + 1 := Or.inl (by omega)
183
+ rw [← more_fuel_changes_nothing_once_it_exceeds_an_argument g (a + b + 1) a b h1,
184
+ ← more_fuel_changes_nothing_once_it_exceeds_an_argument (a + b + 1) g a b h, Nat.add_comm g]
185
+
186
+ theorem a_number_xored_with_itself_is_zero_at_every_fuel : ∀ f b : Nat, xorF f b b = 0 := by
187
+ intro f
188
+ induction f with
189
+ | zero => intro b; cases b <;> rfl
190
+ | succ f ih =>
191
+ intro b
192
+ cases b with
193
+ | zero => rfl
194
+ | succ b =>
195
+ show (if (b + 1) % 2 == (b + 1) % 2 then 0 else 1) + 2 * xorF f ((b + 1) / 2) ((b + 1) / 2) = 0
196
+ rw [ih, the_xor_of_two_bits_is_their_sum_mod_two]
197
+ omega
198
+
199
+ theorem xor_splits_off_its_lowest_bit :
200
+ ∀ g x c : Nat, 1 ≤ g → xorF (g + 1) x c = (x + c) % 2 + 2 * xorF g (x / 2) (c / 2) := by
201
+ intro g x c hg
202
+ obtain ⟨g', rfl⟩ : ∃ g', g = g' + 1 := ⟨g - 1, by omega⟩
203
+ cases x with
204
+ | zero =>
205
+ rw [show xorF (g' + 1 + 1) 0 c = c by cases c <;> rfl, Nat.zero_div,
206
+ show xorF (g' + 1) 0 (c / 2) = c / 2 by cases (c / 2) <;> rfl]
207
+ omega
208
+ | succ x =>
209
+ cases c with
210
+ | zero =>
211
+ rw [show xorF (g' + 1 + 1) (x + 1) 0 = x + 1 from rfl, Nat.zero_div,
212
+ show xorF (g' + 1) ((x + 1) / 2) 0 = (x + 1) / 2 by cases ((x + 1) / 2) <;> rfl]
213
+ omega
214
+ | succ c =>
215
+ show (if (x + 1) % 2 == (c + 1) % 2 then 0 else 1) + 2 * xorF (g' + 1) ((x + 1) / 2) ((c + 1) / 2) = _
216
+ rw [the_xor_of_two_bits_is_their_sum_mod_two]
217
+
218
+ theorem xor_undoes_itself_when_the_fuel_suffices :
219
+ ∀ f a b g : Nat, (a < f ∨ b < f) → b < g → xorF g (xorF f a b) b = a := by
220
+ intro f
221
+ induction f with
222
+ | zero => intro a b g h; rcases h with h | h <;> exact absurd h (Nat.not_lt_zero _)
223
+ | succ f ih =>
224
+ intro a b g h hg
225
+ cases a with
226
+ | zero =>
227
+ rw [show xorF (f + 1) 0 b = b by cases b <;> rfl]
228
+ exact a_number_xored_with_itself_is_zero_at_every_fuel g b
229
+ | succ a =>
230
+ cases b with
231
+ | zero =>
232
+ obtain ⟨g', rfl⟩ : ∃ g', g = g' + 1 := ⟨g - 1, by omega⟩
233
+ rfl
234
+ | succ b =>
235
+ obtain ⟨g', rfl⟩ : ∃ g', g = g' + 1 := ⟨g - 1, by omega⟩
236
+ have hf : (a + 1) / 2 < f ∨ (b + 1) / 2 < f := by
237
+ rcases h with h | h
238
+ · exact Or.inl (by omega)
239
+ · exact Or.inr (by omega)
240
+ have ih' := ih ((a + 1) / 2) ((b + 1) / 2) g' hf (by omega)
241
+ rw [xor_splits_off_its_lowest_bit g' _ _ (by omega)]
242
+ rw [show xorF (f + 1) (a + 1) (b + 1) = (if (a + 1) % 2 == (b + 1) % 2 then 0 else 1) +
243
+ 2 * xorF f ((a + 1) / 2) ((b + 1) / 2) from rfl, the_xor_of_two_bits_is_their_sum_mod_two]
244
+ generalize xorF f ((a + 1) / 2) ((b + 1) / 2) = y at ih' ⊢
245
+ have e : ((a + 1 + (b + 1)) % 2 + 2 * y) / 2 = y := by omega
246
+ rw [e, ih']
247
+ omega
248
+
249
+ theorem xor_is_commutative_for_every_a_b : ∀ a b : Nat, xorN a b = xorN b a := by
250
+ intro a b
251
+ unfold xorN
252
+ rw [Nat.add_comm a b, xor_commutes_at_every_fuel]
253
+
254
+ theorem xor_zero_is_identity_for_every_a : ∀ a : Nat, xorN a 0 = a := by
255
+ intro a
256
+ unfold xorN
257
+ cases a <;> rfl
258
+
259
+ theorem xor_is_its_own_inverse_for_every_a_b : ∀ a b : Nat, xorN (xorN a b) b = a := by
260
+ intro a b
261
+ rw [xor_reads_the_same_at_every_sufficient_fuel (b + 1) (xorN a b) b (Or.inr (by omega))]
262
+ unfold xorN
263
+ exact xor_undoes_itself_when_the_fuel_suffices (a + b + 1) a b (b + 1) (Or.inl (by omega)) (by omega)
264
+ theorem xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves :
265
+ ∀ a b : Nat, xorN a b = (a + b) % 2 + 2 * xorN (a / 2) (b / 2) := by
266
+ intro a b
267
+ rw [xor_reads_the_same_at_every_sufficient_fuel (a + b + 1 + 1) a b (Or.inl (by omega)),
268
+ xor_splits_off_its_lowest_bit (a + b + 1) a b (by omega),
269
+ ← xor_reads_the_same_at_every_sufficient_fuel (a + b + 1) (a / 2) (b / 2) (Or.inl (by omega))]
270
+
271
+ theorem xor_is_associative_below_every_bound :
272
+ ∀ n a b c : Nat, a + b + c ≤ n → xorN (xorN a b) c = xorN a (xorN b c) := by
273
+ intro n
274
+ induction n with
275
+ | zero =>
276
+ intro a b c h
277
+ have ha : a = 0 := by omega
278
+ have hb : b = 0 := by omega
279
+ have hc : c = 0 := by omega
280
+ subst ha hb hc
281
+ rfl
282
+ | succ n ih =>
283
+ intro a b c h
284
+ if hz : a + b + c = 0 then
285
+ have ha : a = 0 := by omega
286
+ have hb : b = 0 := by omega
287
+ have hc : c = 0 := by omega
288
+ subst ha hb hc
289
+ rfl
290
+ else
291
+ have ihh := ih (a / 2) (b / 2) (c / 2) (by omega)
292
+ have hab := xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves a b
293
+ have hbc := xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves b c
294
+ have hx2 : xorN a b / 2 = xorN (a / 2) (b / 2) := by omega
295
+ have hy2 : xorN b c / 2 = xorN (b / 2) (c / 2) := by omega
296
+ rw [xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves (xorN a b) c,
297
+ xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves a (xorN b c), hx2, hy2, ihh]
298
+ omega
299
+
300
+ theorem xor_is_associative_for_every_a_b_c : ∀ a b c : Nat, xorN (xorN a b) c = xorN a (xorN b c) := by
301
+ intro a b c
302
+ exact xor_is_associative_below_every_bound (a + b + c) a b c (Nat.le_refl _)
303
+
304
+ theorem the_nim_sum_is_a_gf2_vector_addition_for_every_a_b_c :
305
+ ∀ a b c : Nat, xorN a b = xorN b a ∧ xorN (xorN a b) c = xorN a (xorN b c) ∧
306
+ xorN (xorN a b) b = a ∧ xorN a 0 = a := by
307
+ intro a b c
308
+ exact ⟨xor_is_commutative_for_every_a_b a b, xor_is_associative_for_every_a_b_c a b c,
309
+ xor_is_its_own_inverse_for_every_a_b a b, xor_zero_is_identity_for_every_a a⟩
310
+
105
311
  end Nim
@@ -15856,5 +15856,95 @@
15856
15856
  "verdict": "UNVERIFIED",
15857
15857
  "ground": "no candidate in the current space — nothing to recompute",
15858
15858
  "receipt": "3b815427-42b8-8b8c-abf3-423b1e268af3"
15859
+ },
15860
+ {
15861
+ "key": "lean_nim_the_xor_of_two_bits_is_their_sum_mod_two",
15862
+ "verdict": "UNVERIFIED",
15863
+ "ground": "no candidate in the current space — nothing to recompute",
15864
+ "receipt": "322304d5-f000-8492-8e7f-69ce46520610"
15865
+ },
15866
+ {
15867
+ "key": "lean_nim_xor_commutes_at_every_fuel",
15868
+ "verdict": "UNVERIFIED",
15869
+ "ground": "no candidate in the current space — nothing to recompute",
15870
+ "receipt": "b091d5a8-4e4a-8116-93d8-199afc028903"
15871
+ },
15872
+ {
15873
+ "key": "lean_nim_one_more_step_of_fuel_changes_nothing_once_it_exceeds_an_argument",
15874
+ "verdict": "UNVERIFIED",
15875
+ "ground": "no candidate in the current space — nothing to recompute",
15876
+ "receipt": "adf2ef5a-ef44-84b9-adb7-2edf0437284f"
15877
+ },
15878
+ {
15879
+ "key": "lean_nim_more_fuel_changes_nothing_once_it_exceeds_an_argument",
15880
+ "verdict": "UNVERIFIED",
15881
+ "ground": "no candidate in the current space — nothing to recompute",
15882
+ "receipt": "961d94be-959c-80ff-b0c4-03079551178a"
15883
+ },
15884
+ {
15885
+ "key": "lean_nim_xor_reads_the_same_at_every_sufficient_fuel",
15886
+ "verdict": "UNVERIFIED",
15887
+ "ground": "no candidate in the current space — nothing to recompute",
15888
+ "receipt": "e04a45b5-8834-8bc4-bf6e-bff90869081f"
15889
+ },
15890
+ {
15891
+ "key": "lean_nim_a_number_xored_with_itself_is_zero_at_every_fuel",
15892
+ "verdict": "UNVERIFIED",
15893
+ "ground": "no candidate in the current space — nothing to recompute",
15894
+ "receipt": "409e78df-b565-83bb-b177-aa46813c1cb7"
15895
+ },
15896
+ {
15897
+ "key": "lean_nim_xor_splits_off_its_lowest_bit",
15898
+ "verdict": "UNVERIFIED",
15899
+ "ground": "no candidate in the current space — nothing to recompute",
15900
+ "receipt": "fa8f797f-95fa-80c6-9abc-4bd21309d53a"
15901
+ },
15902
+ {
15903
+ "key": "lean_nim_xor_undoes_itself_when_the_fuel_suffices",
15904
+ "verdict": "UNVERIFIED",
15905
+ "ground": "no candidate in the current space — nothing to recompute",
15906
+ "receipt": "ba799e13-9cb6-8fc8-ab55-3879eb845e7f"
15907
+ },
15908
+ {
15909
+ "key": "lean_nim_xor_is_commutative_for_every_a_b",
15910
+ "verdict": "UNVERIFIED",
15911
+ "ground": "no candidate in the current space — nothing to recompute",
15912
+ "receipt": "e62bc467-f90b-8bb2-844c-c44676d6fce0"
15913
+ },
15914
+ {
15915
+ "key": "lean_nim_xor_zero_is_identity_for_every_a",
15916
+ "verdict": "UNVERIFIED",
15917
+ "ground": "no candidate in the current space — nothing to recompute",
15918
+ "receipt": "667bd69d-51ea-88da-a48e-ce4a33c4f518"
15919
+ },
15920
+ {
15921
+ "key": "lean_nim_xor_is_its_own_inverse_for_every_a_b",
15922
+ "verdict": "UNVERIFIED",
15923
+ "ground": "no candidate in the current space — nothing to recompute",
15924
+ "receipt": "e2f6d0f1-2fa2-832e-b884-1ac9f13160a0"
15925
+ },
15926
+ {
15927
+ "key": "lean_nim_xor_is_the_sum_of_the_bits_plus_twice_the_xor_of_the_halves",
15928
+ "verdict": "UNVERIFIED",
15929
+ "ground": "no candidate in the current space — nothing to recompute",
15930
+ "receipt": "07c467d9-8226-81d4-93b2-612ebd433b2b"
15931
+ },
15932
+ {
15933
+ "key": "lean_nim_xor_is_associative_below_every_bound",
15934
+ "verdict": "UNVERIFIED",
15935
+ "ground": "no candidate in the current space — nothing to recompute",
15936
+ "receipt": "0c3ef805-2811-8035-a30b-cc03489171c1"
15937
+ },
15938
+ {
15939
+ "key": "lean_nim_xor_is_associative_for_every_a_b_c",
15940
+ "verdict": "UNVERIFIED",
15941
+ "ground": "no candidate in the current space — nothing to recompute",
15942
+ "receipt": "d2a922d9-f09d-82db-ae54-2f92149512c9"
15943
+ },
15944
+ {
15945
+ "key": "lean_nim_the_nim_sum_is_a_gf2_vector_addition_for_every_a_b_c",
15946
+ "verdict": "UNVERIFIED",
15947
+ "ground": "no candidate in the current space — nothing to recompute",
15948
+ "receipt": "caa5c327-62cf-8171-9507-6453cfdaed0c"
15859
15949
  }
15860
15950
  ]