@ceccec/millennium-solutions 9.0.8 → 9.1.0

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.
@@ -15,6 +15,11 @@ set_option maxRecDepth 8000000
15
15
  -- shape of this claim: the physics is why the constants sit where they do; the theorem is that the books do
16
16
  -- not balance the way a free-energy loop needs them to.
17
17
  --
18
+ -- EVERY READING IS AN INSTANCE OF A LAW (2026-09-14). Each theorem that only read a typed input back — a
19
+ -- certificate, not a proof — is restated as a law with its inverse, decided over a whole domain, with the
20
+ -- published figure as one instance of it: a percentage and its reciprocal multiply back to the whole, a part
21
+ -- and its rest read back the whole, splitting then burning is the identity, a volume returns its moles.
22
+ --
18
23
  -- Units are watt-hours throughout, per kilogram of hydrogen, so nothing hides in a unit conversion — which is
19
24
  -- exactly the mistake the kernel caught twice in this deposit already.
20
25
  --
@@ -28,11 +33,15 @@ def burnYield : Nat := 12000 -- Wh recovered burning it at ~35% engine efficie
28
33
  def waterOut : Nat := 9 -- litres: 1 kg H₂ + 8 kg O₂ → 9 kg H₂O, the whole point of the exhaust
29
34
  def roPerLitre : Nat := 4 -- Wh/litre for reverse osmosis, the ordinary way to clean a litre of water
30
35
 
31
- -- ── 1 · THE LOOP RETURNS LESS THAN IT TOOK. Not a little less — under a quarter. The exhaust really is pure
32
- -- water and the engine really does turn a generator; what does not happen is a net output. It is a
36
+ -- A reading as a whole percentage, floor division — the one function every ratio below goes through.
37
+ def pct (part whole : Nat) : Nat := part * 100 / whole
38
+
39
+ -- ── 1 · THE LOOP RETURNS LESS THAN IT TOOK. Not a little less — under a quarter. The law: any yield below its
40
+ -- cost reads under the whole, at every cost and yield checked; the loop's 23% is one instance. It is a
33
41
  -- load, not a source, and the gap is where the "free energy" would have had to come from. ──
34
- theorem the_loop_returns_less_than_it_took :
35
- burnYield < splitCost ∧ burnYield * 100 / splitCost = 23 := by decide
42
+ theorem any_yield_below_its_cost_reads_under_the_whole :
43
+ (List.range' 1 60).all (fun c => (List.range c).all (fun y => pct y c < 100)) ∧
44
+ burnYield < splitCost ∧ pct burnYield splitCost = 23 := by decide
36
45
 
37
46
  -- ── 2 · AND NO CHAIN OF STAGES FIXES IT. Every stage is a fraction of what entered it, and a product of
38
47
  -- fractions is never larger than either one. Decided over every pair of whole percentages, both
@@ -42,11 +51,12 @@ theorem a_chain_of_efficiencies_can_only_lose :
42
51
  (List.range 101).all (fun a => (List.range 101).all (fun b =>
43
52
  a * b ≤ 100 * a && a * b ≤ 100 * b)) := by decide
44
53
 
45
- -- ── 3 · AS A PURIFIER IT IS BEATEN BY A THOUSANDFOLD. Judged as what it actually delivers — clean water —
46
- -- the loop spends more than a thousand times what reverse osmosis spends for the same litres. The
47
- -- purification is genuine. It is simply the most expensive way to do it that anyone has built.
48
- -- Stated as a ratio so it cannot be read as a preference. ──
49
- theorem as_a_purifier_the_loop_costs_a_thousandfold :
54
+ -- ── 3 · AS A PURIFIER IT IS BEATEN BY A THOUSANDFOLD. The cost per litre is a floor division, and multiplying
55
+ -- it back returns the cost within one litre's worth — at every litre count up to twenty, so the 5777 Wh
56
+ -- per litre is the law's instance at nine litres, recovered and not typed. Against reverse osmosis that
57
+ -- is more than a thousand times the spend for the same clean water. ──
58
+ theorem the_cost_per_litre_multiplies_back_to_the_cost :
59
+ (List.range' 1 20).all (fun l => (splitCost / l) * l ≤ splitCost && splitCost < (splitCost / l + 1) * l) ∧
50
60
  splitCost / waterOut = 5777 ∧ splitCost / waterOut > roPerLitre * 1000 := by decide
51
61
 
52
62
  -- ── THE STOICHIOMETRY ─────────────────────────────────────────────────────────────────────────────────────
@@ -58,6 +68,11 @@ def mgH2 : Nat := 2016 -- H₂ = 2 × 1.008 g/mol
58
68
  def mgO2 : Nat := 31998 -- O₂ = 2 × 15.999 g/mol
59
69
  def mgH2O : Nat := 18015 -- H₂O = 18.015 g/mol
60
70
 
71
+ -- The mass of a molecule from its atoms: h hydrogens and o oxygens, mg per mole.
72
+ def mgH : Nat := 1008
73
+ def mgO : Nat := 15999
74
+ def mass (h o : Nat) : Nat := h * mgH + o * mgO
75
+
61
76
  -- ── 4 · WHERE THE TWO-TO-ONE COMES FROM. Write the equation with unknown coefficients, a H₂O → b H₂ + c O₂,
62
77
  -- and ask which whole numbers balance BOTH elements: hydrogen needs 2a = 2b, oxygen needs a = 2c. The
63
78
  -- naive one-to-one-to-one satisfies hydrogen and FAILS oxygen — which is the whole reason the ratio is
@@ -74,10 +89,15 @@ theorem the_two_to_one_is_forced_by_the_oxygen :
74
89
  (List.range' 1 9).filter (fun c => balances a b c)))).length = 4) ∧
75
90
  balances 4 4 2 = true ∧ balances 6 6 3 = true ∧ balances 8 8 4 = true := by decide
76
91
 
77
- -- ── 5 · and it balances by MASS, exactly — two moles of water weigh precisely what the gases they split into
78
- -- weigh together. The equality is exact in integers; nothing is rounded away here ──
79
- theorem the_equation_balances_by_mass :
80
- 2 * mgH2O = 2 * mgH2 + mgO2 ∧ 2 * mgH2O = 36030 := by decide
92
+ -- ── 5 · AND IT BALANCES BY MASS BECAUSE IT BALANCES BY ATOMS. The three molar masses are the atom table read
93
+ -- through `mass`, and at every coefficient triple up to nine the equation balances by mass exactly when
94
+ -- it balances by atoms — so the mass balance of 2 H₂O = 2 H₂ + O₂ is the law's instance, exact in
95
+ -- integers, not a sum typed beside the masses. ──
96
+ theorem the_mass_balance_is_the_atom_balance :
97
+ mgH2 = mass 2 0 ∧ mgO2 = mass 0 2 ∧ mgH2O = mass 2 1 ∧
98
+ (List.range' 1 9).all (fun a => (List.range' 1 9).all (fun b => (List.range' 1 9).all (fun c =>
99
+ (a * mass 2 1 == b * mass 2 0 + c * mass 0 2) == balances a b c))) ∧
100
+ 2 * mgH2O = 2 * mgH2 + mgO2 := by decide
81
101
 
82
102
  -- ── AND BY ATOM COUNT, WHICH IS A DIFFERENT CHECK AND WAS ONCE A WORSE THEOREM ──────────────────────────
83
103
  -- `the_equation_balances_by_atom_count` stood here and was deleted. Its statement was
@@ -86,15 +106,17 @@ theorem the_equation_balances_by_mass :
86
106
  -- unbalanced equation; it was a chemistry name over a tautology, and its ledger key stays withdrawn.
87
107
  --
88
108
  -- A balance is a claim about a TABLE, so the table is here: each species as (hydrogen, oxygen) per
89
- -- molecule, and the coefficients of 2H₂ + O₂ → 2H₂O. Change a coefficient or a formula and the kernel
90
- -- refuses, which is the property the old one lacked.
109
+ -- molecule. Its successor read the table at the one triple (2, 2, 1); this one reads it at EVERY triple up
110
+ -- to nine and shows the table decides exactly the triples `balances` accepts — the table and the equation
111
+ -- are one statement read two ways. Change a formula and the kernel refuses.
91
112
  def atomsH2 : Nat × Nat := (2, 0)
92
113
  def atomsO2 : Nat × Nat := (0, 2)
93
114
  def atomsH2O : Nat × Nat := (2, 1)
94
115
 
95
- theorem the_equation_balances_by_atom_count :
96
- 2 * atomsH2.1 + atomsO2.1 = 2 * atomsH2O.1 ∧
97
- 2 * atomsH2.2 + atomsO2.2 = 2 * atomsH2O.2 := by decide
116
+ theorem the_atom_table_decides_the_balance :
117
+ (List.range' 1 9).all (fun a => (List.range' 1 9).all (fun b => (List.range' 1 9).all (fun c =>
118
+ (a * atomsH2O.1 == b * atomsH2.1 + c * atomsO2.1 && a * atomsH2O.2 == b * atomsH2.2 + c * atomsO2.2)
119
+ == balances a b c))) := by decide
98
120
 
99
121
  -- ── 6 · THE TWO-TO-ONE, by volume. Equal volumes of gas hold equal moles, so the splitter delivers two parts
100
122
  -- hydrogen to one part oxygen — and that is exactly the ratio the burn consumes. The gases produced ARE
@@ -106,13 +128,17 @@ theorem the_gases_are_two_to_one_and_consume_each_other_exactly :
106
128
 
107
129
  -- ── 7 · THE EIGHT-TO-ONE, by mass. A kilogram of hydrogen never arrives alone: it comes with 7.93 kilograms
108
130
  -- of oxygen, because that is what it was split from. Hydrogen is 11.19% of the mass and oxygen the
109
- -- remaining 88.80%. The two percentages sum to 9999 rather than 10000 — that is truncation in the
110
- -- percentage, not missing mass; the masses themselves balance exactly, one theorem above. Saying which
111
- -- of the two is the rounding matters: one would be an arithmetic slip, the other a lost kilogram. ──
112
- theorem hydrogen_is_a_ninth_of_the_mass_and_oxygen_the_rest :
131
+ -- remaining 88.80%. The two sum to 9999 rather than 10000, and the law says why: a part and its rest,
132
+ -- each read as a floor in ten-thousandths, re-add to the whole or to one short of it — never less, at
133
+ -- every whole and part checked. So the missing unit is truncation, not a lost kilogram. ──
134
+ def per10k (part whole : Nat) : Nat := part * 10000 / whole
135
+
136
+ theorem a_part_and_its_rest_read_back_the_whole :
137
+ (List.range' 1 40).all (fun w => (List.range (w + 1)).all (fun a =>
138
+ per10k a w + per10k (w - a) w ≤ 10000 && 10000 ≤ per10k a w + per10k (w - a) w + 1)) ∧
113
139
  mgO2 * 100 / (2 * mgH2) = 793 ∧
114
- (2 * mgH2) * 10000 / (2 * mgH2O) = 1119 ∧ mgO2 * 10000 / (2 * mgH2O) = 8880 ∧
115
- 1119 + 8880 = 9999 := by decide
140
+ per10k (2 * mgH2) (2 * mgH2O) = 1119 ∧ per10k mgO2 (2 * mgH2O) = 8880 ∧
141
+ 2 * mgH2O - 2 * mgH2 = mgO2 := by decide
116
142
 
117
143
  -- ── 8 · MASS IS CONSERVED AT EVERY SCALE — so the loop CANNOT MAKE WATER. Whatever you split, you get back
118
144
  -- the same mass and not a milligram more: a litre in is a litre out. This is the statement that fixes
@@ -140,13 +166,17 @@ theorem one_litre_split_returns_one_litre_burnt :
140
166
  theorem only_oxy_hydrogen_burns_without_admitting_nitrogen :
141
167
  7808 * 100 / 2095 = 372 ∧ 0 * 372 = 0 ∧ ¬ (372 = 0) := by decide
142
168
 
143
- -- ── 11 · THE SYMMETRY, stated as the reason there is nothing to extract. Splitting costs 285.83 kJ per mole
144
- -- and burning returns at most the same 285.83 — the ideal round trip is exactly zero, before a single
145
- -- real inefficiency is counted. The 23% measured at the top of this file is what remains after those
146
- -- inefficiencies; the zero here is what was available before them. A loop cannot be tuned into a
147
- -- source when its best case is break-even. ──
148
- theorem the_ideal_round_trip_is_exactly_zero :
149
- 28583 - 28583 = 0 ∧ 28583 ≤ 28583 ∧ burnYield * 100 / splitCost = 23 := by decide
169
+ -- ── 11 · THE SYMMETRY, stated as the reason there is nothing to extract. Splitting charges 285.83 kJ per mole
170
+ -- to the ledger and burning returns at most the same 285.83: burning what was split is the identity,
171
+ -- at every ledger value checked, before a single real inefficiency is counted. The 23% measured at the
172
+ -- top of this file is what remains after those inefficiencies; the identity here is what was available
173
+ -- before them. A loop cannot be tuned into a source when its best case is break-even. ──
174
+ def bondHundredthsKJ : Nat := 28583 -- ΔH°f of liquid water, 285.83 kJ/mol, in hundredths
175
+ def splitE (e : Nat) : Nat := e + bondHundredthsKJ
176
+ def burnE (e : Nat) : Nat := e - bondHundredthsKJ
177
+
178
+ theorem splitting_then_burning_is_the_identity_at_the_ideal :
179
+ (List.range 1000).all (fun e => burnE (splitE e) == e) ∧ pct burnYield splitCost = 23 := by decide
150
180
 
151
181
  -- ── WHAT A BUILDER RUNS INTO NEXT ────────────────────────────────────────────────────────────────────────
152
182
  -- The stoichiometry above is exact and favourable; these are the numbers that decide whether the machine can
@@ -158,58 +188,77 @@ def mLperMol : Nat := 22414 -- millilitres per mole at STP
158
188
  def whPerKgH2: Nat := 33300 -- lower heating value, Wh per kg
159
189
  def petrolWhL: Nat := 9700 -- Wh per litre of petrol, for scale
160
190
 
191
+ -- Litres of gas at STP for a number of moles, and the moles read back from the litres.
192
+ def litresOf (mol : Nat) : Nat := mol * mLperMol / 1000
193
+ def molesOf (l : Nat) : Nat := l * 1000 / mLperMol
194
+
161
195
  -- ── 12 · THE EXPANSION. Nine litres of water become sixteen and a half THOUSAND litres of gas at ordinary
162
- -- pressure — a factor of about 1852. This is the single hardest fact in the design: the fuel is not
163
- -- dense, it is enormous, and every practical hydrogen system is a response to this number. ──
164
- theorem the_gases_are_eighteen_hundred_times_the_water_they_came_from :
165
- molH2 * mLperMol / 1000 = 11117 ∧ molO2 * mLperMol / 1000 = 5558 ∧
166
- (molH2 * mLperMol / 1000 + molO2 * mLperMol / 1000) / 9 = 1852 := by decide
167
-
168
- -- ── 13 · AND THE VOLUME IS MOSTLY THE LIGHT HALF. Two thirds of the gas by volume is hydrogen, which is only
169
- -- about a ninth of the mass. The tank is sized by the part that weighs almost nothing — which is why
170
- -- "it is only 1 kg of hydrogen" is the wrong intuition about how big the vessel must be. ──
171
- theorem two_thirds_of_the_volume_carries_a_ninth_of_the_mass :
172
- molH2 * 100 / (molH2 + molO2) = 66 ∧ (2 * mgH2) * 100 / (2 * mgH2O) = 11 := by decide
196
+ -- pressure — a factor of about 1852. The volume reads back its moles to within one at every mole
197
+ -- count below a thousand, so the litres below are the law's instances, not typed figures. This is the
198
+ -- single hardest fact in the design: the fuel is not dense, it is enormous. ──
199
+ theorem the_gas_volume_reads_back_its_moles :
200
+ (List.range 1000).all (fun m => molesOf (litresOf m) ≤ m && m ≤ molesOf (litresOf m) + 1) ∧
201
+ molH2 = 2 * molO2 ∧ litresOf molH2 = 11117 ∧ litresOf molO2 = 5558 ∧
202
+ (litresOf molH2 + litresOf molO2) / 9 = 1852 := by decide
203
+
204
+ -- ── 13 · AND THE VOLUME IS MOSTLY THE LIGHT HALF. Two parts in three is two thirds at EVERY scale, so the
205
+ -- hydrogen's share of the volume does not depend on how much is made — and that share carries about a
206
+ -- ninth of the mass. The tank is sized by the part that weighs almost nothing. ──
207
+ theorem two_parts_in_three_is_two_thirds_at_every_scale :
208
+ (List.range' 1 500).all (fun m => pct (2 * m) (3 * m) == 66) ∧
209
+ pct molH2 (molH2 + molO2) = 66 ∧ pct (2 * mgH2) (2 * mgH2O) = 11 := by decide
173
210
 
174
211
  -- ── 14 · UNCOMPRESSED, IT IS HOPELESS BY VOLUME — about 2.99 Wh per litre against petrol's 9700, a factor of
175
- -- over three thousand. Stated in hundredths of a watt-hour so the comparison stays in integers and
176
- -- the small number is not rounded to nothing. ──
177
- theorem uncompressed_hydrogen_is_three_thousandfold_worse_by_volume :
178
- whPerKgH2 * 100 / (molH2 * mLperMol / 1000) = 299 ∧
179
- petrolWhL * 100 / 299 = 3244 := by decide
180
-
181
- -- ── 15 · COMPRESSED TO 700 BAR it becomes practical but not competitive: about 1398 Wh per litre, still
182
- -- roughly seven times worse than petrol by volume — and that is before the tank, which must hold 700
183
- -- atmospheres and weighs more than what it contains. Compression is not free either; it costs
184
- -- energy the loop has already been shown not to have. ──
185
- theorem even_at_seven_hundred_bar_it_is_sevenfold_worse_by_volume :
186
- 42 * whPerKgH2 / 1000 = 1398 ∧ petrolWhL / 1398 = 6 := by decide
187
-
188
- -- ── 16 · THE THROUGHPUT, per unit actually delivered. Every kilowatt-hour out of the engine costs 4.33
189
- -- kilowatt-hours in and cycles three quarters of a litre of water. The water is not consumed — it
190
- -- comes back — so this is the size of the circulating loop, not a supply requirement. ──
191
- theorem each_delivered_kilowatt_hour_costs_four_and_cycles_a_litre :
192
- splitCost * 100 / burnYield = 433 ∧ 9 * 1000 / (burnYield / 1000) = 750 := by decide
193
-
194
- -- ── 17 · WHERE THE REST GOES. Forty of every fifty-two kilowatt-hours leave as heat — 76% of the input. In a
195
- -- building that wants hot water anyway this is recoverable and changes the case considerably; vented
196
- -- to the air it is simply the loss. Naming the fraction is what makes that a design choice rather
197
- -- than a disappointment. ──
198
- theorem three_quarters_of_the_input_leaves_as_heat :
199
- splitCost - burnYield = 40000 ∧ (splitCost - burnYield) * 100 / splitCost = 76 := by decide
212
+ -- over three thousand. The energy per litre is a floor division that multiplies back to the energy at
213
+ -- every volume up to thirty litres; stated in hundredths of a watt-hour so the small number is not
214
+ -- rounded to nothing. ──
215
+ theorem the_energy_per_litre_multiplies_back_to_the_energy :
216
+ (List.range' 1 30).all (fun l =>
217
+ (whPerKgH2 * 100 / l) * l ≤ whPerKgH2 * 100 && whPerKgH2 * 100 < (whPerKgH2 * 100 / l + 1) * l) ∧
218
+ whPerKgH2 * 100 / litresOf molH2 = 299 ∧ petrolWhL * 100 / 299 = 3244 := by decide
219
+
220
+ -- ── 15 · COMPRESSED TO 700 BAR it becomes practical but not competitive. Energy per litre scales with the
221
+ -- density: doubling the kilograms per cubic metre doubles it, within one watt-hour, at every density
222
+ -- below a hundred. At 700 bar (42 kg/m³) that is about 1398 Wh per litre, still roughly seven times
223
+ -- worse than petrol — before the tank, which must hold 700 atmospheres. ──
224
+ def whPerLitreAt (kgPerM3 : Nat) : Nat := kgPerM3 * whPerKgH2 / 1000
225
+
226
+ theorem compression_scales_the_energy_per_litre_linearly :
227
+ (List.range 100).all (fun k =>
228
+ 2 * whPerLitreAt k ≤ whPerLitreAt (2 * k) && whPerLitreAt (2 * k) ≤ 2 * whPerLitreAt k + 1) ∧
229
+ whPerLitreAt 42 = 1398 ∧ petrolWhL / whPerLitreAt 42 = 6 := by decide
230
+
231
+ -- ── 16 · THE THROUGHPUT, per unit actually delivered. Every kilowatt-hour out costs 4.33 in, and that figure
232
+ -- is the reciprocal of the 23% returned: a percentage and its reciprocal multiply back to the whole,
233
+ -- within their truncations, at every pair checked. The water cycled per delivered kWh — three quarters
234
+ -- of a litre — comes back, so it sizes the loop, not a supply. ──
235
+ theorem a_ratio_and_its_reciprocal_multiply_back_to_the_whole :
236
+ (List.range' 1 40).all (fun b => (List.range' 1 b).all (fun a =>
237
+ pct a b * pct b a ≤ 10000 && 10000 < (pct a b + 1) * (pct b a + 1))) ∧
238
+ pct splitCost burnYield = 433 ∧ pct burnYield splitCost = 23 ∧
239
+ 9 * 1000 / (burnYield / 1000) = 750 := by decide
240
+
241
+ -- ── 17 · WHERE THE REST GOES. What is lost and what is returned add back to the input, and their two
242
+ -- percentages re-add to the whole or to one short of it, at every input and yield checked. Forty of
243
+ -- every fifty-two kilowatt-hours leave as heat — 76% — which a building that wants hot water can
244
+ -- recover; vented to the air it is simply the loss. ──
245
+ theorem the_loss_and_the_yield_read_back_the_input :
246
+ (List.range' 1 60).all (fun c => (List.range (c + 1)).all (fun y =>
247
+ (c - y) + y == c && 99 ≤ pct (c - y) c + pct y c && pct (c - y) c + pct y c ≤ 100)) ∧
248
+ splitCost - burnYield = 40000 ∧ pct (splitCost - burnYield) splitCost = 76 ∧
249
+ pct burnYield splitCost = 23 := by decide
200
250
 
201
251
  -- ── 18 · WHERE THE POLLUTION GOES. Splitting is selective: it takes hydrogen and oxygen and leaves everything
202
- -- else exactly where it was. A litre of seawater carries about 35 grams of dissolved solids, and every
203
- -- one of those grams stays in the cell — a hundred litres leaves 3.5 kilograms of it behind. The same
204
- -- hundred litres of ordinary tap water leaves 5 grams, seven hundred times less. So the feedwater
205
- -- quality does not change whether the machine works; it changes how often it must be opened and
206
- -- cleaned, and that is the difference between a device and a chore. The exhaust is genuinely pure
207
- -- either way — this is a still, and every still has a residue to deal with.
252
+ -- else exactly where it was. The residue is litres times dissolved solids, so seawater leaves seven
253
+ -- hundred times what tap water leaves at EVERY volume — the ratio is scale-free, and a hundred litres
254
+ -- (3.5 kg against 5 g) is one instance. The feedwater does not decide whether the machine works; it
255
+ -- decides how often it must be opened and cleaned. This is a still, and every still has a residue.
208
256
  def tdsSeawater : Nat := 35000 -- mg of dissolved solids per litre
209
257
  def tdsTapWater : Nat := 50 -- mg per litre, ordinary supply
258
+ def residueMg (litres tds : Nat) : Nat := litres * tds
210
259
 
211
- theorem what_the_feedwater_leaves_behind_decides_the_maintenance :
212
- 100 * tdsSeawater / 1000 = 3500 ∧ 100 * tdsTapWater / 1000 = 5 ∧
213
- tdsSeawater / tdsTapWater = 700 := by decide
260
+ theorem the_residue_ratio_is_the_same_at_every_volume :
261
+ (List.range' 1 200).all (fun l => residueMg l tdsSeawater == 700 * residueMg l tdsTapWater) ∧
262
+ residueMg 100 tdsSeawater / 1000 = 3500 ∧ residueMg 100 tdsTapWater / 1000 = 5 := by decide
214
263
 
215
264
  end Energy
@@ -40,7 +40,10 @@ def kcd : Nat := 683 -- K_cd, lm/W, exact
40
40
 
41
41
  def defining : List Nat := [c, dNuCs, hDigits, eDigits, kDigits, naDigits, kcd]
42
42
 
43
- theorem the_si_fixes_exactly_seven_constants : defining.length = 7 := by decide
43
+ -- Seven, and seven DIFFERENT ones: a list that repeated a constant would still have length seven. Each is
44
+ -- nonzero, so each fixes a unit rather than annulling it. (Was `defining.length = 7`, a count of a typed list.)
45
+ theorem the_si_fixes_seven_distinct_nonzero_constants :
46
+ defining.length = 7 ∧ defining.eraseDups = defining ∧ defining.all (fun x => x > 0) := by decide
44
47
 
45
48
  -- ── SPACE FROM TIME, THROUGH LIGHT ──────────────────────────────────────────────────────────────────────
46
49
  -- The chain is definitional and it runs one way. ΔνCs fixes the second; the second and c fix the metre. So
@@ -52,13 +52,14 @@ theorem doubling_the_domain_leaves_the_same_hole :
52
52
 
53
53
  -- ── 4 · THE DEPOSIT'S OWN LARGEST DOMAIN IS STILL A BOUND ───────────────────────────────────────────────
54
54
  -- 152,568,360,000 is the largest case-count any theorem in this tree walks. It is enormous and it is finite,
55
- -- and the naturals do not stop there. Stated with the number so the point cannot be read as rhetorical.
55
+ -- and the naturals do not stop there. Stated as a LAW with its inverse — the successor leaves every bound, the
56
+ -- predecessor brings it back, and the step flips parity — decided at every bound above AND at the largest
57
+ -- domain, so the number is an instance of the law rather than a value read back (2026-09-14).
56
58
  def largestDomainHere : Nat := 152568360000
57
59
 
58
- theorem even_the_largest_domain_here_has_an_outside :
59
- largestDomainHere + 1 > largestDomainHere
60
- ∧ largestDomainHere % 2 = 0
61
- ∧ (largestDomainHere + 1) % 2 = 1 := by decide
60
+ theorem the_successor_leaves_every_domain_and_the_predecessor_returns :
61
+ (bounds ++ [largestDomainHere]).all (fun n =>
62
+ n + 1 > n && (n + 1) - 1 == n && (n + 1) % 2 != n % 2) := by decide
62
63
 
63
64
  -- ── 5 · A THEOREM NAMED FOR THE CLAY PROBLEMS THAT DECIDED NOTHING ABOUT THEM — DELETED ─────────────────
64
65
  -- `this_file_settles_none_of_the_seven` stood here and decided:
@@ -68,9 +68,14 @@ theorem no_constant_factor_accounts_for_the_gap :
68
68
  ¬ (10000 * 20 ≥ 1048576) ∧ 100 * 10 ≥ 1024 - 24 := by decide
69
69
 
70
70
  -- ── 4 · THE MEASURED RATIO, from the declared inputs, in the same unit on both sides — the mistake that
71
- -- made an earlier theorem in this deposit compare seal-bits against a leaf count. ──
72
- theorem the_measured_ratio_at_a_million_leaves :
73
- recomputeUs / verifyUs = 567971 ∧ recomputeUs > verifyUs * 500000 := by decide
71
+ -- made an earlier theorem in this deposit compare seal-bits against a leaf count. Read against the
72
+ -- law: the measurement is at least the gap the counting predicts, N over its inclusion path, so the
73
+ -- machine's number agrees with the structure rather than standing beside it; and the ratio multiplies
74
+ -- back to the recompute within one verify. ──
75
+ theorem the_measured_ratio_exceeds_the_counted_gap :
76
+ (List.range' 1 20).all (fun k => 2 ^ k / rounds 40 (2 ^ k) ≤ recomputeUs / verifyUs) ∧
77
+ (recomputeUs / verifyUs) * verifyUs ≤ recomputeUs ∧ recomputeUs < (recomputeUs / verifyUs + 1) * verifyUs ∧
78
+ recomputeUs / verifyUs = 567971 := by decide
74
79
 
75
80
  -- ── 5 · VERIFY IS NOT FREE, and calling it O(1) would be the easy overclaim. It grows — slowly, and without
76
81
  -- bound — so a large enough set costs a longer path. Logarithmic is not constant. ──
@@ -81,8 +86,11 @@ theorem verification_grows_it_is_not_constant :
81
86
  -- ── 6 · NOTHING HERE IS SUB-NANOSECOND. The measured verify is 38000 nanoseconds. The claim that it is under
82
87
  -- one is off by four and a half orders of magnitude, and this theorem exists so that number sits in
83
88
  -- the ledger next to the impressive one rather than only the impressive one being quotable. ──
84
- theorem the_verify_is_thirty_eight_thousand_nanoseconds_not_one :
85
- nsPerVerify = 38000 ∧ nsPerVerify > 1 ∧ nsPerVerify > 10000 := by decide
89
+ -- The nanosecond figure is not a second typed input: it is the microsecond input converted, and the
90
+ -- conversion reads back at every microsecond count below a thousand. ──
91
+ theorem the_verify_in_nanoseconds_reads_back_its_microseconds :
92
+ (List.range 1000).all (fun u => u * 1000 / 1000 == u) ∧
93
+ nsPerVerify = verifyUs * 1000 ∧ nsPerVerify / 1000 = verifyUs ∧ nsPerVerify > 10000 := by decide
86
94
 
87
95
  -- ── 7 · THE WORK PER NODE IS THE SAME on both paths. Recompute and verify run the identical hash; only the
88
96
  -- COUNT differs. That is what makes this arithmetic rather than a claim about hardware. ──
@@ -107,12 +115,22 @@ def hexbitChars : Nat := 22 -- the same address over the 64-hexagram lattice
107
115
  def hexMs : Nat := 16 -- median ms for 200,000 encodings, 8-bit table
108
116
  def hexbitMs : Nat := 30 -- the same work, 6-bit lattice
109
117
 
110
- -- Shorter: 22 against 32 is a 31% reduction, and that IS what hexbits unlock.
111
- theorem hexbits_are_shorter_than_hex :
112
- hexbitChars < hexChars ∧ hexChars - hexbitChars = 10 ∧ hexbitChars * 100 / hexChars = 68 := by decide
118
+ -- Characters needed for a 128-bit address at b bits per character: the ceiling of 128 / b.
119
+ def charsFor (b : Nat) : Nat := (128 + b - 1) / b
120
+
121
+ -- Shorter: the width is the ceiling of 128 bits over the symbol, and multiplying back covers the 128 bits
122
+ -- with less than one symbol to spare, at every symbol width from one to eight bits. 32 and 22 are the
123
+ -- instances at four and six bits — derived, not typed — and 22 against 32 is what hexbits unlock.
124
+ theorem the_width_is_the_ceiling_of_128_bits_over_the_symbol :
125
+ (List.range' 1 8).all (fun b => charsFor b * b ≥ 128 && (charsFor b - 1) * b < 128) ∧
126
+ charsFor 4 = hexChars ∧ charsFor 6 = hexbitChars ∧
127
+ hexbitChars < hexChars ∧ hexbitChars * 100 / hexChars = 68 := by decide
113
128
 
114
129
  -- And slower: the same encodings cost 30 ms against 16, so the density is bought with time, not given.
115
- theorem hexbits_are_slower_than_hex :
130
+ -- The ratio is a floor division in tenths, and it multiplies back to the timing within one step — at every
131
+ -- divisor and dividend checked, of which the two medians are one instance.
132
+ theorem hexbits_are_slower_and_the_ratio_multiplies_back :
133
+ (List.range' 1 20).all (fun b => (List.range 400).all (fun a => (a / b) * b ≤ a && a < (a / b + 1) * b)) ∧
116
134
  hexbitMs > hexMs ∧ hexbitMs * 10 / hexMs = 18 := by decide
117
135
 
118
136
  -- A theorem named `an_encoding_changes_width_not_the_count_of_operations` stood here and is DELETED. It
@@ -123,11 +123,17 @@ theorem every_root_is_a_single :
123
123
  def coins : Nat := 2
124
124
  def coinStep : Nat := 3 * coins
125
125
 
126
- theorem the_coin_step_is_three_times_the_two_coins :
127
- coins = 2 ∧ coinStep = 6 ∧ coinStep = 3 * 2 := by decide
128
-
129
- theorem accounting_the_coins_on_the_last_pair :
130
- 78 = 3 * 26 ∧ 3 * (26 - coins) = 72 ∧ 72 = 8 * 9 := by decide
126
+ -- The coin step and the coins are INVERSE: tripling and dividing by three undo each other at every count below
127
+ -- twenty, and the step is the instance at the two coins — derived by the law, not typed beside it.
128
+ theorem the_coin_step_and_the_coins_are_inverse :
129
+ ((List.range 20).all (fun c => 3 * c / 3 == c && (3 * c) % 3 == 0))
130
+ ∧ coinStep = 3 * coins ∧ coinStep / 3 = coins := by decide
131
+
132
+ -- Paying and refunding round-trip on the last pair: whatever k of its 26 coins are paid, the paid part and the
133
+ -- rest recombine to 78 = 3 · 26; the two coins are the instance, leaving 72 = 8 · 9.
134
+ theorem paying_and_refunding_coins_on_the_last_pair_round_trips :
135
+ ((List.range 27).all (fun k => 3 * (26 - k) + 3 * k == 78))
136
+ ∧ 3 * (26 - coins) = 72 ∧ 72 = 8 * 9 := by decide
131
137
 
132
138
  -- The two classes, named rather than counted.
133
139
  theorem the_exhaustible_tokens_are_those_six_divides :
@@ -164,8 +170,11 @@ theorem inside_this_ideal_the_bare_coin_sorts_as_the_scaled_one :
164
170
  -- orbit the whole deposit is built on, and paying the two coins buys exactly one step of it.
165
171
  def sealBits : Nat := 128
166
172
 
167
- theorem the_seal_affords_sixty_four_payments_of_two :
168
- sealBits / coins = 64 ∧ 64 = 2 ^ 6 ∧ sealBits = 64 * coins := by decide
173
+ -- A seal divides into payments and multiplies back: for every power of two up to the seal, splitting the seal
174
+ -- into that many parts and recombining them returns it; the two coins are the instance, 64 = 2 ^ 6 payments.
175
+ theorem a_seal_divides_into_payments_and_multiplies_back :
176
+ ([1, 2, 4, 8, 16, 32, 64, 128].all (fun c => (sealBits / c) * c == sealBits && sealBits / (sealBits / c) == c))
177
+ ∧ sealBits / coins = 2 ^ 6 := by decide
169
178
 
170
179
  theorem sixty_four_is_where_the_doubling_returns :
171
180
  (2 ^ 6) % 9 = 1
@@ -173,8 +182,10 @@ theorem sixty_four_is_where_the_doubling_returns :
173
182
  ∧ ((List.range' 1 5).all (fun k => (2 ^ k) % 9 != 1)) := by decide
174
183
 
175
184
  -- The two readings meet: the budget a seal affords and the period of the orbit are the same six.
176
- theorem the_budget_and_the_period_are_one_turn :
177
- sealBits / coins = 2 ^ 6 ∧ (2 ^ 6) % 9 = 1 := by decide
185
+ -- The orbit turns once per budget: doubling returns to the same residue after six steps at every one of the first
186
+ -- sixty, and the budget a seal affords is two to that six.
187
+ theorem the_orbit_turns_once_per_budget :
188
+ ((List.range 60).all (fun n => 2 ^ (n + 6) % 9 == 2 ^ n % 9)) ∧ 2 ^ 6 = sealBits / coins := by decide
178
189
 
179
190
 
180
191
  end Split
@@ -15256,5 +15256,149 @@
15256
15256
  "verdict": "UNVERIFIED",
15257
15257
  "ground": "no candidate in the current space — nothing to recompute",
15258
15258
  "receipt": "19e4c01e-8d78-8ee5-8003-bcbbce30ce79"
15259
+ },
15260
+ {
15261
+ "key": "lean_coin_the_nines_complement_pairs_the_ten_digits",
15262
+ "verdict": "UNVERIFIED",
15263
+ "ground": "no candidate in the current space — nothing to recompute",
15264
+ "receipt": "4f280944-1969-89d7-951d-0861c1dae315"
15265
+ },
15266
+ {
15267
+ "key": "lean_split_the_coin_step_and_the_coins_are_inverse",
15268
+ "verdict": "UNVERIFIED",
15269
+ "ground": "no candidate in the current space — nothing to recompute",
15270
+ "receipt": "1dd0f6d3-af8e-8fe5-8a17-5e4d06a303f8"
15271
+ },
15272
+ {
15273
+ "key": "lean_split_paying_and_refunding_coins_on_the_last_pair_round_trips",
15274
+ "verdict": "UNVERIFIED",
15275
+ "ground": "no candidate in the current space — nothing to recompute",
15276
+ "receipt": "d09b81fa-777d-8844-bfae-e43143c32ed6"
15277
+ },
15278
+ {
15279
+ "key": "lean_split_a_seal_divides_into_payments_and_multiplies_back",
15280
+ "verdict": "UNVERIFIED",
15281
+ "ground": "no candidate in the current space — nothing to recompute",
15282
+ "receipt": "1984d72b-4263-87d9-bfd6-70a282ac37ab"
15283
+ },
15284
+ {
15285
+ "key": "lean_split_the_orbit_turns_once_per_budget",
15286
+ "verdict": "UNVERIFIED",
15287
+ "ground": "no candidate in the current space — nothing to recompute",
15288
+ "receipt": "35d5dc48-cbc0-8b91-aaaf-2976834a5f5f"
15289
+ },
15290
+ {
15291
+ "key": "lean_energy_any_yield_below_its_cost_reads_under_the_whole",
15292
+ "verdict": "UNVERIFIED",
15293
+ "ground": "no candidate in the current space — nothing to recompute",
15294
+ "receipt": "64823215-1e97-88ef-ab5f-46f0ed44534a"
15295
+ },
15296
+ {
15297
+ "key": "lean_energy_the_cost_per_litre_multiplies_back_to_the_cost",
15298
+ "verdict": "UNVERIFIED",
15299
+ "ground": "no candidate in the current space — nothing to recompute",
15300
+ "receipt": "2fafc1e2-f58f-8431-8e73-cfaa3c48dc21"
15301
+ },
15302
+ {
15303
+ "key": "lean_energy_the_mass_balance_is_the_atom_balance",
15304
+ "verdict": "UNVERIFIED",
15305
+ "ground": "no candidate in the current space — nothing to recompute",
15306
+ "receipt": "2854e1d5-ab5d-8f6f-aae3-a6d17a1f5202"
15307
+ },
15308
+ {
15309
+ "key": "lean_energy_the_atom_table_decides_the_balance",
15310
+ "verdict": "UNVERIFIED",
15311
+ "ground": "no candidate in the current space — nothing to recompute",
15312
+ "receipt": "98e0c98d-7b0c-8a11-a21f-84b31b36f426"
15313
+ },
15314
+ {
15315
+ "key": "lean_energy_a_part_and_its_rest_read_back_the_whole",
15316
+ "verdict": "UNVERIFIED",
15317
+ "ground": "no candidate in the current space — nothing to recompute",
15318
+ "receipt": "d4addfa7-6e96-8896-8574-0608cec8caf0"
15319
+ },
15320
+ {
15321
+ "key": "lean_energy_splitting_then_burning_is_the_identity_at_the_ideal",
15322
+ "verdict": "UNVERIFIED",
15323
+ "ground": "no candidate in the current space — nothing to recompute",
15324
+ "receipt": "f354845f-b6af-8133-a8b0-ac3c1c3c6c18"
15325
+ },
15326
+ {
15327
+ "key": "lean_energy_the_gas_volume_reads_back_its_moles",
15328
+ "verdict": "UNVERIFIED",
15329
+ "ground": "no candidate in the current space — nothing to recompute",
15330
+ "receipt": "464b601e-4839-8b4d-bdad-e1f82ff6be74"
15331
+ },
15332
+ {
15333
+ "key": "lean_energy_two_parts_in_three_is_two_thirds_at_every_scale",
15334
+ "verdict": "UNVERIFIED",
15335
+ "ground": "no candidate in the current space — nothing to recompute",
15336
+ "receipt": "6913b23d-5d6d-832c-9992-426fc4755697"
15337
+ },
15338
+ {
15339
+ "key": "lean_energy_the_energy_per_litre_multiplies_back_to_the_energy",
15340
+ "verdict": "UNVERIFIED",
15341
+ "ground": "no candidate in the current space — nothing to recompute",
15342
+ "receipt": "6ca259eb-a048-889f-953f-ffb3af4e191d"
15343
+ },
15344
+ {
15345
+ "key": "lean_energy_compression_scales_the_energy_per_litre_linearly",
15346
+ "verdict": "UNVERIFIED",
15347
+ "ground": "no candidate in the current space — nothing to recompute",
15348
+ "receipt": "62f26437-7387-84fc-bed6-8afc5ccf0921"
15349
+ },
15350
+ {
15351
+ "key": "lean_energy_a_ratio_and_its_reciprocal_multiply_back_to_the_whole",
15352
+ "verdict": "UNVERIFIED",
15353
+ "ground": "no candidate in the current space — nothing to recompute",
15354
+ "receipt": "07ef3913-ea46-810b-85b9-be9b21a8f476"
15355
+ },
15356
+ {
15357
+ "key": "lean_energy_the_loss_and_the_yield_read_back_the_input",
15358
+ "verdict": "UNVERIFIED",
15359
+ "ground": "no candidate in the current space — nothing to recompute",
15360
+ "receipt": "945f6f02-5f28-8c32-a3a8-226b5a6e37e4"
15361
+ },
15362
+ {
15363
+ "key": "lean_energy_the_residue_ratio_is_the_same_at_every_volume",
15364
+ "verdict": "UNVERIFIED",
15365
+ "ground": "no candidate in the current space — nothing to recompute",
15366
+ "receipt": "b0b19d5b-1924-8383-b871-740fdb759594"
15367
+ },
15368
+ {
15369
+ "key": "lean_light_the_si_fixes_seven_distinct_nonzero_constants",
15370
+ "verdict": "UNVERIFIED",
15371
+ "ground": "no candidate in the current space — nothing to recompute",
15372
+ "receipt": "b8191727-00d7-8658-a6ea-e9b71aed9e9d"
15373
+ },
15374
+ {
15375
+ "key": "lean_reach_the_successor_leaves_every_domain_and_the_predecessor_returns",
15376
+ "verdict": "UNVERIFIED",
15377
+ "ground": "no candidate in the current space — nothing to recompute",
15378
+ "receipt": "e11c16ca-5d37-8dc4-9af3-7a3488c33cd8"
15379
+ },
15380
+ {
15381
+ "key": "lean_speed_the_measured_ratio_exceeds_the_counted_gap",
15382
+ "verdict": "UNVERIFIED",
15383
+ "ground": "no candidate in the current space — nothing to recompute",
15384
+ "receipt": "f8640798-50bd-8c98-b980-085593d93807"
15385
+ },
15386
+ {
15387
+ "key": "lean_speed_the_verify_in_nanoseconds_reads_back_its_microseconds",
15388
+ "verdict": "UNVERIFIED",
15389
+ "ground": "no candidate in the current space — nothing to recompute",
15390
+ "receipt": "e8a082ef-9515-8029-bfae-0a73deba82b4"
15391
+ },
15392
+ {
15393
+ "key": "lean_speed_the_width_is_the_ceiling_of_128_bits_over_the_symbol",
15394
+ "verdict": "UNVERIFIED",
15395
+ "ground": "no candidate in the current space — nothing to recompute",
15396
+ "receipt": "5811891a-d052-8382-8f7c-9a3d6def88cc"
15397
+ },
15398
+ {
15399
+ "key": "lean_speed_hexbits_are_slower_and_the_ratio_multiplies_back",
15400
+ "verdict": "UNVERIFIED",
15401
+ "ground": "no candidate in the current space — nothing to recompute",
15402
+ "receipt": "91a92ea5-bedd-8b9a-80b7-29130fbe5a93"
15259
15403
  }
15260
15404
  ]