@ceccec/millennium-solutions 9.1.1 → 9.1.2
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/AXIOMS.md +14 -12
- package/CHALLENGES.md +9 -3
- package/README.md +25 -25
- package/forensic.md +5 -5
- package/index.md +25 -25
- package/package.json +1 -1
- package/paper.md +621 -568
- package/src/proof/discovered.json +30 -0
- package/src/proof/elementary.lean +10 -2
- package/src/proof/energy.lean +11 -0
- package/src/proof/families.lean +17 -2
- package/src/proof/light.lean +6 -0
- package/src/proof/trial-all.json +36 -0
- package/src/proof/z9.lean +11 -2
|
@@ -18586,5 +18586,35 @@
|
|
|
18586
18586
|
"key": "lean_speed_hexbits_are_slower_and_the_ratio_multiplies_back",
|
|
18587
18587
|
"name": "lean speed.lean: hexbits_are_slower_and_the_ratio_multiplies_back — (List.range' 1 20).all (fun b => (List.range 400).all (fun a => (a / b) * b ≤ a && a < (a / b + 1) * b)) ∧ hexbitMs > hexMs ∧ hexbitMs * 10 / hexMs = 18 — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18588
18588
|
"receipt": "91a92ea5-bedd-8b9a-80b7-29130fbe5a93"
|
|
18589
|
+
},
|
|
18590
|
+
{
|
|
18591
|
+
"key": "lean_elementary_the_wythoff_sequences_partition_the_integers",
|
|
18592
|
+
"name": "lean elementary.lean: the_wythoff_sequences_partition_the_integers — (List.range' 1 50).all (fun m => ((List.range' 1 40).map lowerWythoff).count m + ((List.range' 1 40).map upperWythoff).count m == 1) — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18593
|
+
"receipt": "45729b78-1ded-8539-a2da-71459d8d4183"
|
|
18594
|
+
},
|
|
18595
|
+
{
|
|
18596
|
+
"key": "lean_energy_the_atoms_read_back_from_the_mass",
|
|
18597
|
+
"name": "lean energy.lean: the_atoms_read_back_from_the_mass — (List.range 10).all (fun h => (List.range 10).all (fun o => atomsOf (mass h o) == some (h, o))) ∧ atomsOf mgH2 = some (2, 0) ∧ atomsOf mgO2 = some (0, 2) ∧ atomsOf mgH2O = some (2, 1) — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18598
|
+
"receipt": "e49b5ab6-4f44-8b3c-aec8-b5b0a5f4d681"
|
|
18599
|
+
},
|
|
18600
|
+
{
|
|
18601
|
+
"key": "lean_families_invOf_is_an_inverse_and_an_involution_on_the_units",
|
|
18602
|
+
"name": "lean families.lean: invOf_is_an_inverse_and_an_involution_on_the_units — (List.range 9).all (fun d => match invOf d with | some e => d * e % 9 == 1 && invOf e == some d | none => gcd' d 9 != 1) — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18603
|
+
"receipt": "85ad9b47-1b45-8b65-9a6c-72779f4782b0"
|
|
18604
|
+
},
|
|
18605
|
+
{
|
|
18606
|
+
"key": "lean_families_choose_is_invariant_under_the_involution_k_to_n_minus_k",
|
|
18607
|
+
"name": "lean families.lean: choose_is_invariant_under_the_involution_k_to_n_minus_k — (List.range 13).all (fun n => (List.range (n + 1)).all (fun k => choose n k == choose n (n - k) && n - (n - k) == k)) — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18608
|
+
"receipt": "0affa1b0-91a0-8f5d-aa01-7f37496f2c87"
|
|
18609
|
+
},
|
|
18610
|
+
{
|
|
18611
|
+
"key": "lean_light_the_second_returns_from_the_metre_and_the_period",
|
|
18612
|
+
"name": "lean light.lean: the_second_returns_from_the_metre_and_the_period — (List.range 100).all (fun s => travel s / c == s && periods s / dNuCs == s) — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18613
|
+
"receipt": "04685db2-fda6-844b-8b36-5b7f858baaac"
|
|
18614
|
+
},
|
|
18615
|
+
{
|
|
18616
|
+
"key": "lean_z9_the_orbit_step_is_read_back_by_its_log",
|
|
18617
|
+
"name": "lean z9.lean: the_orbit_step_is_read_back_by_its_log — (List.range 6).all (fun k => logOrbit (orbit k) == some k) ∧ units.all (fun u => (logOrbit u).map orbit == some u) — decided by the Lean kernel over its whole finite domain, axiom-free",
|
|
18618
|
+
"receipt": "e29d831e-5bde-8104-95bd-fc374ac46155"
|
|
18589
18619
|
}
|
|
18590
18620
|
]
|
|
@@ -344,6 +344,14 @@ theorem a_knight_has_exactly_eight_leaps_and_every_one_flips_the_colour :
|
|
|
344
344
|
theorem the_golden_beatty_identity_holds_across_the_range :
|
|
345
345
|
(List.range' 1 40).all (fun n => upperWythoff n - lowerWythoff n == n) := by decide
|
|
346
346
|
|
|
347
|
+
-- ── and the two sequences PARTITION the positive integers: every m up to fifty is hit by exactly one of the
|
|
348
|
+
-- lower and upper Wythoff sequences, never both, never neither (Beatty's theorem, 1926, at φ and φ²). The
|
|
349
|
+
-- identity above says how the two are paired; this says the pairing loses and duplicates nothing ──
|
|
350
|
+
set_option maxRecDepth 2000000 in
|
|
351
|
+
theorem the_wythoff_sequences_partition_the_integers :
|
|
352
|
+
(List.range' 1 50).all (fun m =>
|
|
353
|
+
((List.range' 1 40).map lowerWythoff).count m + ((List.range' 1 40).map upperWythoff).count m == 1) := by decide
|
|
354
|
+
|
|
347
355
|
-- ── the partition numbers count the partitions, and the Bell numbers count the set partitions ───────────
|
|
348
356
|
-- Both are checked against an ENUMERATION of the objects rather than against another recurrence, which
|
|
349
357
|
-- is the difference between confirming a formula and confirming what it counts.
|
|
@@ -387,7 +395,7 @@ theorem the_unit_graph_is_complete_bipartite_between_the_two_tetrahedra :
|
|
|
387
395
|
(nbrs (unitsMod 9) d).all (fun y => x == y || !((nbrs (unitsMod 9) x).contains y)))) := by decide
|
|
388
396
|
|
|
389
397
|
-- ── what these settle ──
|
|
390
|
-
def settledHere : Nat :=
|
|
391
|
-
theorem elementary_settles_its_range : settledHere =
|
|
398
|
+
def settledHere : Nat := 32
|
|
399
|
+
theorem elementary_settles_its_range : settledHere = 32 := rfl
|
|
392
400
|
|
|
393
401
|
end Elementary
|
package/src/proof/energy.lean
CHANGED
|
@@ -261,4 +261,15 @@ theorem the_residue_ratio_is_the_same_at_every_volume :
|
|
|
261
261
|
(List.range' 1 200).all (fun l => residueMg l tdsSeawater == 700 * residueMg l tdsTapWater) ∧
|
|
262
262
|
residueMg 100 tdsSeawater / 1000 = 3500 ∧ residueMg 100 tdsTapWater / 1000 = 5 := by decide
|
|
263
263
|
|
|
264
|
+
-- ── 19 · THE MASS READS BACK ITS ATOMS. `mass` takes a molecule's hydrogens and oxygens to its molar mass;
|
|
265
|
+
-- `atomsOf` goes the other way, finding the counts whose mass it is. At every molecule of up to nine
|
|
266
|
+
-- of each, reading the atoms back from the mass returns exactly those atoms — so on this range the
|
|
267
|
+
-- mass names the molecule, and no two formulas share one. H₂, O₂ and H₂O are three of the hundred. ──
|
|
268
|
+
def atomsOf (m : Nat) : Option (Nat × Nat) :=
|
|
269
|
+
((List.range 10).flatMap (fun h => (List.range 10).map (fun o => (h, o)))).find? (fun p => mass p.1 p.2 == m)
|
|
270
|
+
|
|
271
|
+
theorem the_atoms_read_back_from_the_mass :
|
|
272
|
+
(List.range 10).all (fun h => (List.range 10).all (fun o => atomsOf (mass h o) == some (h, o))) ∧
|
|
273
|
+
atomsOf mgH2 = some (2, 0) ∧ atomsOf mgO2 = some (0, 2) ∧ atomsOf mgH2O = some (2, 1) := by decide
|
|
274
|
+
|
|
264
275
|
end Energy
|
package/src/proof/families.lean
CHANGED
|
@@ -428,8 +428,23 @@ set_option maxRecDepth 100000 in
|
|
|
428
428
|
theorem the_involutions_are_counted_by_the_telephone_numbers :
|
|
429
429
|
(List.range 6).all (fun n => ((permsN (List.range n)).filter isInvolution).length == telephone n) := by decide
|
|
430
430
|
|
|
431
|
+
-- ── the unit inverse, stated AS an inverse. That invOf finds something at exactly the units was proved above;
|
|
432
|
+
-- this proves what it finds: the residue multiplies back to one, and inverting twice returns the unit — so
|
|
433
|
+
-- invOf is an involution on the six units, and the non-units, where it finds nothing, are exactly the
|
|
434
|
+
-- residues sharing a factor with nine ──
|
|
435
|
+
theorem invOf_is_an_inverse_and_an_involution_on_the_units :
|
|
436
|
+
(List.range 9).all (fun d => match invOf d with
|
|
437
|
+
| some e => d * e % 9 == 1 && invOf e == some d
|
|
438
|
+
| none => gcd' d 9 != 1) := by decide
|
|
439
|
+
|
|
440
|
+
-- ── the binomial coefficient does not see the involution k ↦ n − k: choosing k is choosing the n − k left
|
|
441
|
+
-- behind, and applying the involution twice returns k, at every n to twelve and every k ──
|
|
442
|
+
theorem choose_is_invariant_under_the_involution_k_to_n_minus_k :
|
|
443
|
+
(List.range 13).all (fun n => (List.range (n + 1)).all (fun k =>
|
|
444
|
+
choose n k == choose n (n - k) && n - (n - k) == k)) := by decide
|
|
445
|
+
|
|
431
446
|
-- ── what these settle ──
|
|
432
|
-
def settledHere : Nat :=
|
|
433
|
-
theorem families_settle_their_ranges : settledHere =
|
|
447
|
+
def settledHere : Nat := 42
|
|
448
|
+
theorem families_settle_their_ranges : settledHere = 42 := rfl
|
|
434
449
|
|
|
435
450
|
end Families
|
package/src/proof/light.lean
CHANGED
|
@@ -53,6 +53,12 @@ def periods (seconds : Nat) : Nat := dNuCs * seconds -- caesium periods elapsed
|
|
|
53
53
|
|
|
54
54
|
theorem travel_at_one_returns_the_defined_constant : travel 1 = c := by decide
|
|
55
55
|
|
|
56
|
+
-- AND THE CHAIN RUNS BACK. Dividing the metres by c returns the seconds, and dividing the periods by ΔνCs
|
|
57
|
+
-- returns them too, at every whole second below a hundred: travel and periods are each undone by the
|
|
58
|
+
-- constant that defines them, so a length and a count of periods both read back the same duration.
|
|
59
|
+
theorem the_second_returns_from_the_metre_and_the_period :
|
|
60
|
+
(List.range 100).all (fun s => travel s / c == s && periods s / dNuCs == s) := by decide
|
|
61
|
+
|
|
56
62
|
-- ONE INTERVAL, TWO UNITS: the same second is 299792458 metres of light and 9192631770 caesium periods.
|
|
57
63
|
-- That is the SI's join between space and time, and it is an identity between two definitions rather than
|
|
58
64
|
-- a discovery about either.
|
package/src/proof/trial-all.json
CHANGED
|
@@ -15400,5 +15400,41 @@
|
|
|
15400
15400
|
"verdict": "UNVERIFIED",
|
|
15401
15401
|
"ground": "no candidate in the current space — nothing to recompute",
|
|
15402
15402
|
"receipt": "91a92ea5-bedd-8b9a-80b7-29130fbe5a93"
|
|
15403
|
+
},
|
|
15404
|
+
{
|
|
15405
|
+
"key": "lean_elementary_the_wythoff_sequences_partition_the_integers",
|
|
15406
|
+
"verdict": "UNVERIFIED",
|
|
15407
|
+
"ground": "no candidate in the current space — nothing to recompute",
|
|
15408
|
+
"receipt": "45729b78-1ded-8539-a2da-71459d8d4183"
|
|
15409
|
+
},
|
|
15410
|
+
{
|
|
15411
|
+
"key": "lean_energy_the_atoms_read_back_from_the_mass",
|
|
15412
|
+
"verdict": "UNVERIFIED",
|
|
15413
|
+
"ground": "no candidate in the current space — nothing to recompute",
|
|
15414
|
+
"receipt": "e49b5ab6-4f44-8b3c-aec8-b5b0a5f4d681"
|
|
15415
|
+
},
|
|
15416
|
+
{
|
|
15417
|
+
"key": "lean_families_invOf_is_an_inverse_and_an_involution_on_the_units",
|
|
15418
|
+
"verdict": "UNVERIFIED",
|
|
15419
|
+
"ground": "no candidate in the current space — nothing to recompute",
|
|
15420
|
+
"receipt": "85ad9b47-1b45-8b65-9a6c-72779f4782b0"
|
|
15421
|
+
},
|
|
15422
|
+
{
|
|
15423
|
+
"key": "lean_families_choose_is_invariant_under_the_involution_k_to_n_minus_k",
|
|
15424
|
+
"verdict": "UNVERIFIED",
|
|
15425
|
+
"ground": "no candidate in the current space — nothing to recompute",
|
|
15426
|
+
"receipt": "0affa1b0-91a0-8f5d-aa01-7f37496f2c87"
|
|
15427
|
+
},
|
|
15428
|
+
{
|
|
15429
|
+
"key": "lean_light_the_second_returns_from_the_metre_and_the_period",
|
|
15430
|
+
"verdict": "UNVERIFIED",
|
|
15431
|
+
"ground": "no candidate in the current space — nothing to recompute",
|
|
15432
|
+
"receipt": "04685db2-fda6-844b-8b36-5b7f858baaac"
|
|
15433
|
+
},
|
|
15434
|
+
{
|
|
15435
|
+
"key": "lean_z9_the_orbit_step_is_read_back_by_its_log",
|
|
15436
|
+
"verdict": "UNVERIFIED",
|
|
15437
|
+
"ground": "no candidate in the current space — nothing to recompute",
|
|
15438
|
+
"receipt": "e29d831e-5bde-8104-95bd-fc374ac46155"
|
|
15403
15439
|
}
|
|
15404
15440
|
]
|
package/src/proof/z9.lean
CHANGED
|
@@ -65,6 +65,15 @@ theorem orbit_closes : orbit 6 = orbit 0 := by decide
|
|
|
65
65
|
theorem orbit_distinct : ((List.range 6).map orbit).eraseDups.length = 6 := by decide
|
|
66
66
|
theorem orbit_covers_units : ((List.range 6).map orbit).eraseDups.length = units.length := by decide
|
|
67
67
|
|
|
68
|
+
-- ── the orbit read back: a discrete log along the doubling circuit. orbit takes a step to its residue;
|
|
69
|
+
-- logOrbit takes the residue back to its step. Every step below six returns itself, and every unit is
|
|
70
|
+
-- reached and re-reached — the circuit and its log are inverse, which is what "2 generates the units" means ──
|
|
71
|
+
def logOrbit (u : Nat) : Option Nat := (List.range 6).find? (fun k => orbit k == u)
|
|
72
|
+
|
|
73
|
+
theorem the_orbit_step_is_read_back_by_its_log :
|
|
74
|
+
(List.range 6).all (fun k => logOrbit (orbit k) == some k) ∧
|
|
75
|
+
units.all (fun u => (logOrbit u).map orbit == some u) := by decide
|
|
76
|
+
|
|
68
77
|
-- ── the triad {3,6,9} is off the circuit: no power of 3 or 6 ever reaches one ──
|
|
69
78
|
theorem triad_never_reaches_one :
|
|
70
79
|
¬ ((List.range 12).any (fun k => pow9 3 (k + 1) == 1 || pow9 6 (k + 1) == 1)) := by decide
|
|
@@ -86,7 +95,7 @@ theorem neg_involution : (List.range B).all (fun d => m9 (B - m9 (B - d)) == m9
|
|
|
86
95
|
-- The count is of declarations closing by EXHAUSTION, which is this deposit's definition of a theorem, so
|
|
87
96
|
-- the rfl declaration below is excluded from its own total. It read 21 until the count was recomputed
|
|
88
97
|
-- against the tree: it had been counting itself. A tautology is not one of the things settled here.
|
|
89
|
-
def settledHere : Nat :=
|
|
90
|
-
theorem z9_settles_its_domain_totally : settledHere =
|
|
98
|
+
def settledHere : Nat := 21
|
|
99
|
+
theorem z9_settles_its_domain_totally : settledHere = 21 := rfl
|
|
91
100
|
|
|
92
101
|
end Z9
|