@ceccec/millennium-solutions 0.1.1 → 9.0.4

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.
Files changed (91) hide show
  1. package/.zenodo.json +33 -9
  2. package/ACCOUNTING.md +7 -7
  3. package/AXIOMS.md +559 -0
  4. package/CHALLENGES.md +2181 -2479
  5. package/CITATION.cff +1 -1
  6. package/DEPLOY.md +2 -2
  7. package/DEVELOP.md +1 -1
  8. package/LICENSE +6 -5
  9. package/PRIOR-ART.md +149 -0
  10. package/README.md +221 -123
  11. package/SIGNATURE.md +2 -2
  12. package/TRIAL.md +69 -0
  13. package/WHITEPAPER.md +5 -5
  14. package/captain.md +2 -2
  15. package/compare.md +4 -4
  16. package/compute.md +9 -0
  17. package/dashboard.md +1 -1
  18. package/examples.md +5 -5
  19. package/forensic.md +67 -0
  20. package/guide.md +5 -5
  21. package/index.md +209 -139
  22. package/package.json +88 -9
  23. package/paper.md +7183 -0
  24. package/quantum.md +42 -0
  25. package/rights.md +39 -0
  26. package/solutions.md +7 -7
  27. package/speedup.md +4 -4
  28. package/src/0/index.ts +12 -2
  29. package/src/1/index.ts +1 -1
  30. package/src/2/frequency-scales.ts +13 -1
  31. package/src/2/index.ts +1 -1
  32. package/src/3/index.ts +1 -1
  33. package/src/4/index.ts +1 -1
  34. package/src/5/index.ts +1 -1
  35. package/src/6/index.ts +1 -1
  36. package/src/7/index.ts +1 -1
  37. package/src/9/funding.ts +2 -2
  38. package/src/api/gates.ts +117 -0
  39. package/src/api/index.ts +488 -0
  40. package/src/api/lanes.ts +81 -0
  41. package/src/demand/queries.json +1764 -0
  42. package/src/face/index.ts +100 -0
  43. package/src/html/index.ts +10 -0
  44. package/src/latex/index.ts +474 -0
  45. package/src/millennium/index.ts +53 -0
  46. package/src/proof/README.md +1 -1
  47. package/src/proof/address.lean +117 -0
  48. package/src/proof/coin.lean +148 -0
  49. package/src/proof/covered.json +9 -0
  50. package/src/proof/demand.lean +112 -0
  51. package/src/proof/demand2.lean +171 -0
  52. package/src/proof/demand3.lean +117 -0
  53. package/src/proof/discovered.json +10965 -1864
  54. package/src/proof/elementary.lean +393 -0
  55. package/src/proof/energy.lean +215 -0
  56. package/src/proof/families.lean +435 -0
  57. package/src/proof/fixtures/axiom-control.lean +39 -0
  58. package/src/proof/fnv.lean +99 -0
  59. package/src/proof/generated-theorems.json +207 -0
  60. package/src/proof/generated.lean +101 -0
  61. package/src/proof/imagined.lean +492 -0
  62. package/src/proof/index.lean +98 -18
  63. package/src/proof/index.ts +2 -2
  64. package/src/proof/involution.lean +90 -0
  65. package/src/proof/ledgerclaims.lean +84 -0
  66. package/src/proof/light.lean +135 -0
  67. package/src/proof/mechanical.lean +421 -0
  68. package/src/proof/merkaba.lean +89 -0
  69. package/src/proof/merkle.lean +132 -0
  70. package/src/proof/nim.lean +105 -0
  71. package/src/proof/phenomena.lean +90 -0
  72. package/src/proof/priorart.lean +189 -0
  73. package/src/proof/quantum.lean +161 -0
  74. package/src/proof/reach.lean +84 -0
  75. package/src/proof/recovered.lean +56 -0
  76. package/src/proof/reversal.lean +73 -0
  77. package/src/proof/rights.lean +157 -0
  78. package/src/proof/sequences.lean +105 -0
  79. package/src/proof/speed.lean +129 -0
  80. package/src/proof/split.lean +180 -0
  81. package/src/proof/theorems.lean +48 -1
  82. package/src/proof/trial-all.json +15260 -0
  83. package/src/proof/z9.lean +92 -0
  84. package/src/proof/z9plus.lean +208 -0
  85. package/src/proofs.lisp +3 -3
  86. package/src/prove/emit.ts +115 -0
  87. package/src/prove/index.ts +143 -0
  88. package/src/prove/translate.ts +638 -0
  89. package/src/publication/index.ts +363 -0
  90. package/src/quantum/field.ts +73 -0
  91. package/src/quantum/tree.ts +79 -0
@@ -0,0 +1,207 @@
1
+ [
2
+ {
3
+ "key": "powsum_zero_odd_exponents",
4
+ "name": "powsum0_k, quantified over its whole parameter set (9 ledger rows)",
5
+ "statement": "[1, 3, 5, 7, 9, 11, 13, 15, 17].all (fun k => (([1,2,4,5,7,8].map (fun u => (u ^ k) % 9)).foldl (· + ·) 0) % 9 == 0)",
6
+ "tactic": "decide",
7
+ "file": "generated.lean",
8
+ "principle": "The ring Z/9",
9
+ "skill": "z9-ring",
10
+ "lean": "theorem powsum_zero_odd_exponents :\n [1, 3, 5, 7, 9, 11, 13, 15, 17].all (fun k =>\n (([1,2,4,5,7,8].map (fun u => (u ^ k) % 9)).foldl (· + ·) 0) % 9 == 0) := by decide",
11
+ "address": "6c36a9ab-f72d-862c-8044-143fa126824a",
12
+ "subsumes": [
13
+ "powsum0_k_1",
14
+ "powsum0_k_3",
15
+ "powsum0_k_5",
16
+ "powsum0_k_7",
17
+ "powsum0_k_9",
18
+ "powsum0_k_11",
19
+ "powsum0_k_13",
20
+ "powsum0_k_15",
21
+ "powsum0_k_17"
22
+ ]
23
+ },
24
+ {
25
+ "key": "mulperm_iff_unit_all",
26
+ "name": "mulperm_k, quantified over its whole parameter set (5 ledger rows)",
27
+ "statement": "(List.range 9).all (fun k => (((([1,2,4,5,7,8].map (fun u => (k * u) % 9)).eraseDups).length) == 6) == ([1,2,4,5,7,8].contains k))",
28
+ "tactic": "decide",
29
+ "file": "generated.lean",
30
+ "principle": "The ring Z/9",
31
+ "skill": "z9-ring",
32
+ "lean": "theorem mulperm_iff_unit_all :\n (List.range 9).all (fun k =>\n (((([1,2,4,5,7,8].map (fun u => (k * u) % 9)).eraseDups).length) == 6) ==\n ([1,2,4,5,7,8].contains k)) := by decide",
33
+ "address": "528a962b-c690-848b-bc01-18d6b0b3bd72",
34
+ "subsumes": [
35
+ "mulperm_k_2",
36
+ "mulperm_k_4",
37
+ "mulperm_k_5",
38
+ "mulperm_k_7",
39
+ "mulperm_k_8"
40
+ ]
41
+ },
42
+ {
43
+ "key": "addgen_iff_coprime_all",
44
+ "name": "addgen_k, quantified over its whole parameter set (5 ledger rows)",
45
+ "statement": "(List.range 9).all (fun k => ((((List.range 9).map (fun i => (k * i) % 9)).eraseDups).length == 9) == ([1,2,4,5,7,8].contains k))",
46
+ "tactic": "decide",
47
+ "file": "generated.lean",
48
+ "principle": "The ring Z/9",
49
+ "skill": "z9-ring",
50
+ "lean": "theorem addgen_iff_coprime_all :\n (List.range 9).all (fun k =>\n ((((List.range 9).map (fun i => (k * i) % 9)).eraseDups).length == 9) ==\n ([1,2,4,5,7,8].contains k)) := by decide",
51
+ "address": "c70e4a08-4cfd-88c9-8014-f9d6481dcc27",
52
+ "subsumes": [
53
+ "addgen_k_2",
54
+ "addgen_k_4",
55
+ "addgen_k_5",
56
+ "addgen_k_7",
57
+ "addgen_k_8"
58
+ ]
59
+ },
60
+ {
61
+ "key": "hasinv_iff_unit_all",
62
+ "name": "hasinv_d, quantified over its whole parameter set (6 ledger rows)",
63
+ "statement": "(List.range 9).all (fun d => ((List.range 9).any (fun e => (d * e) % 9 == 1)) == ([1,2,4,5,7,8].contains d))",
64
+ "tactic": "decide",
65
+ "file": "generated.lean",
66
+ "principle": "The ring Z/9",
67
+ "skill": "z9-ring",
68
+ "lean": "theorem hasinv_iff_unit_all :\n (List.range 9).all (fun d =>\n ((List.range 9).any (fun e => (d * e) % 9 == 1)) == ([1,2,4,5,7,8].contains d)) := by decide",
69
+ "address": "a0c21f15-ebc9-8bfe-9bb2-867ee66c944a",
70
+ "subsumes": [
71
+ "hasinv_d_1",
72
+ "hasinv_d_2",
73
+ "hasinv_d_4",
74
+ "hasinv_d_5",
75
+ "hasinv_d_7",
76
+ "hasinv_d_8"
77
+ ]
78
+ },
79
+ {
80
+ "key": "demorgan_all_widths",
81
+ "name": "demorgan_nary_k, quantified over its whole parameter set (7 ledger rows)",
82
+ "statement": "(List.range' 2 7).all (fun k => (List.range (2 ^ k)).all (fun n => (!((List.range k).all (fun i => (n >>> i) % 2 == 1))) == ((List.range k).any (fun i => (n >>> i) % 2 == 0))))",
83
+ "tactic": "decide",
84
+ "file": "generated.lean",
85
+ "principle": "The boolean lattice",
86
+ "skill": "logic",
87
+ "lean": "theorem demorgan_all_widths :\n (List.range' 2 7).all (fun k =>\n (List.range (2 ^ k)).all (fun n =>\n (!((List.range k).all (fun i => (n >>> i) % 2 == 1))) ==\n ((List.range k).any (fun i => (n >>> i) % 2 == 0)))) := by decide",
88
+ "address": "ee6e7511-fdea-8b96-8612-a1b45adbfbf3",
89
+ "subsumes": [
90
+ "demorgan_nary_k_2",
91
+ "demorgan_nary_k_3",
92
+ "demorgan_nary_k_4",
93
+ "demorgan_nary_k_5",
94
+ "demorgan_nary_k_6",
95
+ "demorgan_nary_k_7",
96
+ "demorgan_nary_k_8"
97
+ ]
98
+ },
99
+ {
100
+ "key": "power_sum_closed_forms",
101
+ "name": "power_sum_k, quantified over its whole parameter set (5 ledger rows)",
102
+ "statement": "(List.range' 1 30).all (fun n => (((List.range' 1 n).foldl (· + ·) 0) * 2 == n * (n + 1)) ∧ (((List.range' 1 n).map (fun i => i * i)).foldl (· + ·) 0) * 6 == n * (n + 1) * (2 * n + 1))",
103
+ "tactic": "decide",
104
+ "file": "generated.lean",
105
+ "principle": "The closed forms",
106
+ "skill": "sums",
107
+ "lean": "theorem power_sum_closed_forms :\n (List.range' 1 30).all (fun n =>\n (((List.range' 1 n).foldl (· + ·) 0) * 2 == n * (n + 1))\n ∧ (((List.range' 1 n).map (fun i => i * i)).foldl (· + ·) 0) * 6 == n * (n + 1) * (2 * n + 1)) := by decide",
108
+ "address": "9caaf63f-ba3f-8651-931d-6c467aed46b3",
109
+ "subsumes": [
110
+ "power_sum_k_1",
111
+ "power_sum_k_2",
112
+ "power_sum_k_3",
113
+ "power_sum_k_4",
114
+ "power_sum_k_5"
115
+ ]
116
+ },
117
+ {
118
+ "key": "invpow_is_fifth_power_all_units",
119
+ "name": "invpow_u, quantified over its whole parameter set (6 ledger rows)",
120
+ "statement": "[1,2,4,5,7,8].all (fun u => (u * (u ^ 5)) % 9 == 1)",
121
+ "tactic": "decide",
122
+ "file": "generated.lean",
123
+ "principle": "The ring Z/9",
124
+ "skill": "z9-ring",
125
+ "lean": "theorem invpow_is_fifth_power_all_units :\n [1,2,4,5,7,8].all (fun u => (u * (u ^ 5)) % 9 == 1) := by decide",
126
+ "address": "79438c54-f6f5-8343-9d0b-027980876a1d",
127
+ "subsumes": [
128
+ "invpow_u_1",
129
+ "invpow_u_2",
130
+ "invpow_u_4",
131
+ "invpow_u_5",
132
+ "invpow_u_7",
133
+ "invpow_u_8"
134
+ ]
135
+ },
136
+ {
137
+ "key": "cyclic_units_have_a_primitive_root",
138
+ "name": "domain_cyclic_m, quantified over its whole parameter set (13 ledger rows)",
139
+ "statement": "[2,3,5,7,11,13].all (fun p => (List.range' 1 (p - 1)).any (fun g => (((List.range' 1 (p - 1)).map (fun k => (g ^ k) % p)).eraseDups).length == p - 1))",
140
+ "tactic": "decide",
141
+ "file": "generated.lean",
142
+ "principle": "The primes",
143
+ "skill": "number-theory",
144
+ "lean": "theorem cyclic_units_have_a_primitive_root :\n [2,3,5,7,11,13].all (fun p =>\n (List.range' 1 (p - 1)).any (fun g =>\n (((List.range' 1 (p - 1)).map (fun k => (g ^ k) % p)).eraseDups).length == p - 1)) := by decide",
145
+ "address": "4b2f765f-dd14-8805-9004-333d35ad4ca8",
146
+ "subsumes": [
147
+ "domain_cyclic_m_2",
148
+ "domain_cyclic_m_3",
149
+ "domain_cyclic_m_4",
150
+ "domain_cyclic_m_5",
151
+ "domain_cyclic_m_6",
152
+ "domain_cyclic_m_7",
153
+ "domain_cyclic_m_9",
154
+ "domain_cyclic_m_10",
155
+ "domain_cyclic_m_11",
156
+ "domain_cyclic_m_13",
157
+ "domain_cyclic_m_14",
158
+ "domain_cyclic_m_17",
159
+ "domain_cyclic_m_18"
160
+ ]
161
+ },
162
+ {
163
+ "key": "decimal_period_is_the_order_of_ten",
164
+ "name": "decimal_period_of_1_over, quantified over its whole parameter set (12 ledger rows)",
165
+ "statement": "[3,7,11,13,17,19,23,29].all (fun p => ((List.range' 1 (p - 1)).find? (fun k => ((List.range k).foldl (fun r _ => r * 10 % p) 1) == 1)).getD 0 == ((List.range' 1 (p - 1)).find? (fun k => (10 ^ k) % p == 1)).getD 0)",
166
+ "tactic": "decide",
167
+ "file": "generated.lean",
168
+ "principle": "The primes",
169
+ "skill": "number-theory",
170
+ "lean": "theorem decimal_period_is_the_order_of_ten :\n [3,7,11,13,17,19,23,29].all (fun p =>\n ((List.range' 1 (p - 1)).find? (fun k =>\n ((List.range k).foldl (fun r _ => r * 10 % p) 1) == 1)).getD 0 ==\n ((List.range' 1 (p - 1)).find? (fun k => (10 ^ k) % p == 1)).getD 0) := by decide",
171
+ "address": "dccd7de1-54b9-862c-8c82-4cca9a7a557f",
172
+ "subsumes": [
173
+ "decimal_period_of_1_over_3",
174
+ "decimal_period_of_1_over_7",
175
+ "decimal_period_of_1_over_11",
176
+ "decimal_period_of_1_over_13",
177
+ "decimal_period_of_1_over_17",
178
+ "decimal_period_of_1_over_19",
179
+ "decimal_period_of_1_over_23",
180
+ "decimal_period_of_1_over_29",
181
+ "decimal_period_of_1_over_31",
182
+ "decimal_period_of_1_over_37",
183
+ "decimal_period_of_1_over_41",
184
+ "decimal_period_of_1_over_43"
185
+ ]
186
+ },
187
+ {
188
+ "key": "primality_agrees_with_trial_division",
189
+ "name": "domain_prime_m, quantified over its whole parameter set (7 ledger rows)",
190
+ "statement": "(List.range' 2 40).all (fun n => ((List.range' 2 (n - 2)).all (fun d => n % d != 0)) == ([2,3,5,7,11,13,17,19,23,29,31,37,41].contains n))",
191
+ "tactic": "decide",
192
+ "file": "generated.lean",
193
+ "principle": "The primes",
194
+ "skill": "number-theory",
195
+ "lean": "theorem primality_agrees_with_trial_division :\n (List.range' 2 40).all (fun n =>\n ((List.range' 2 (n - 2)).all (fun d => n % d != 0)) ==\n ([2,3,5,7,11,13,17,19,23,29,31,37,41].contains n)) := by decide",
196
+ "address": "3039fdf6-363d-815a-baf9-8373b7e197b8",
197
+ "subsumes": [
198
+ "domain_prime_m_2",
199
+ "domain_prime_m_3",
200
+ "domain_prime_m_5",
201
+ "domain_prime_m_7",
202
+ "domain_prime_m_11",
203
+ "domain_prime_m_13",
204
+ "domain_prime_m_17"
205
+ ]
206
+ }
207
+ ]
@@ -0,0 +1,101 @@
1
+ set_option maxRecDepth 100000
2
+
3
+ -- title: Generated at scale
4
+ -- wing: the machine
5
+ -- prior_art: named
6
+ -- prior_art_domain: elementary number theory — the unit group of ℤ/9 and the doubling orbit
7
+ -- prior_art_note: the structure underneath is standard and is credited. The doubling orbit
8
+ -- 1 → 2 → 4 → 8 → 7 → 5 → 1 modulo 9 is the cyclic group generated by 2 in U(9), of order 6 because that
9
+ -- is the multiplicative order of 2 mod 9; the units are {1,2,4,5,7,8} and the non-units {0,3,6}. Textbook
10
+ -- abstract algebra, and treated directly in the literature on doubling maps modulo odd integers.
11
+ -- Bounded, so the credit stops where the earlier work does: what is NOT prior art is the generator that enumerates propositions over this ring and
12
+ -- discards the ones true of every sibling; that machinery is this deposit's own.
13
+ -- Verification by exhaustion in Lean is this deposit's contribution, and verification is not discovery.
14
+ -- prior_art_search: literature search performed 2026-09-05, terms "doubling sequence modulo 9 orbit
15
+ -- 1 2 4 8 7 5 cyclic group generator digital root"; prior art found and credited.
16
+ -- prior_art_pool: bounded
17
+ -- quantified ring arithmetic over Z/9; the underlying facts are classical and searchable.
18
+ -- BOUNDED means a search is well posed and simply has not been run — the row is unclassified because
19
+ -- nobody looked. UNBOUNDED means the subject is this artifact, so there is no pool to search and the
20
+ -- row will stay unclassified however much work is done. They look identical in a count and need
21
+ -- opposite responses, which is the distinction uuidna-49 asked for and nobody had drawn.
22
+ -- prior_art_own: this deposit's own generator over its own ring
23
+ -- Generated by scripts/lean-gen.ts — do not edit by hand; re-run the generator.
24
+ -- Each theorem below quantifies over a whole ledger family. Every one is compiled, audited for axioms, and
25
+ -- checked to compute what the ledger's own tests compute at every parameter of its family.
26
+
27
+ namespace Generated
28
+
29
+ -- powsum0_k: 9 ledger rows (params 1, 3, 5, 7, 9, 11, 13, 15, 17) → one quantified theorem
30
+ theorem powsum_zero_odd_exponents :
31
+ [1, 3, 5, 7, 9, 11, 13, 15, 17].all (fun k =>
32
+ (([1,2,4,5,7,8].map (fun u => (u ^ k) % 9)).foldl (· + ·) 0) % 9 == 0) := by decide
33
+
34
+ -- the boundary: where the property genuinely fails
35
+ theorem powsum_nonzero_at_even_exponents :
36
+ ¬ ([2, 4, 6].all (fun k =>
37
+ (([1,2,4,5,7,8].map (fun u => (u ^ k) % 9)).foldl (· + ·) 0) % 9 == 0)) := by decide
38
+
39
+ -- mulperm_k: 5 ledger rows (params 2, 4, 5, 7, 8) → one quantified theorem
40
+ theorem mulperm_iff_unit_all :
41
+ (List.range 9).all (fun k =>
42
+ (((([1,2,4,5,7,8].map (fun u => (k * u) % 9)).eraseDups).length) == 6) ==
43
+ ([1,2,4,5,7,8].contains k)) := by decide
44
+
45
+ -- the boundary: where the property genuinely fails
46
+ theorem mulperm_fails_at_the_triad :
47
+ ¬ ([0,3,6].any (fun k =>
48
+ ((([1,2,4,5,7,8].map (fun u => (k * u) % 9)).eraseDups).length) == 6)) := by decide
49
+
50
+ -- addgen_k: 5 ledger rows (params 2, 4, 5, 7, 8) → one quantified theorem
51
+ theorem addgen_iff_coprime_all :
52
+ (List.range 9).all (fun k =>
53
+ ((((List.range 9).map (fun i => (k * i) % 9)).eraseDups).length == 9) ==
54
+ ([1,2,4,5,7,8].contains k)) := by decide
55
+
56
+ -- hasinv_d: 6 ledger rows (params 1, 2, 4, 5, 7, 8) → one quantified theorem
57
+ theorem hasinv_iff_unit_all :
58
+ (List.range 9).all (fun d =>
59
+ ((List.range 9).any (fun e => (d * e) % 9 == 1)) == ([1,2,4,5,7,8].contains d)) := by decide
60
+
61
+ -- demorgan_nary_k: 7 ledger rows (params 2, 3, 4, 5, 6, 7, 8) → one quantified theorem
62
+ theorem demorgan_all_widths :
63
+ (List.range' 2 7).all (fun k =>
64
+ (List.range (2 ^ k)).all (fun n =>
65
+ (!((List.range k).all (fun i => (n >>> i) % 2 == 1))) ==
66
+ ((List.range k).any (fun i => (n >>> i) % 2 == 0)))) := by decide
67
+
68
+ -- power_sum_k: 5 ledger rows (params 1, 2, 3, 4, 5) → one quantified theorem
69
+ theorem power_sum_closed_forms :
70
+ (List.range' 1 30).all (fun n =>
71
+ (((List.range' 1 n).foldl (· + ·) 0) * 2 == n * (n + 1))
72
+ ∧ (((List.range' 1 n).map (fun i => i * i)).foldl (· + ·) 0) * 6 == n * (n + 1) * (2 * n + 1)) := by decide
73
+
74
+ -- invpow_u: 6 ledger rows (params 1, 2, 4, 5, 7, 8) → one quantified theorem
75
+ theorem invpow_is_fifth_power_all_units :
76
+ [1,2,4,5,7,8].all (fun u => (u * (u ^ 5)) % 9 == 1) := by decide
77
+
78
+ -- the boundary: where the property genuinely fails
79
+ theorem invpow_fails_off_the_units :
80
+ ¬ ([3, 6].any (fun t => (List.range 9).any (fun e => (t * e) % 9 == 1))) := by decide
81
+
82
+ -- domain_cyclic_m: 13 ledger rows (params 2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 17, 18) → one quantified theorem
83
+ theorem cyclic_units_have_a_primitive_root :
84
+ [2,3,5,7,11,13].all (fun p =>
85
+ (List.range' 1 (p - 1)).any (fun g =>
86
+ (((List.range' 1 (p - 1)).map (fun k => (g ^ k) % p)).eraseDups).length == p - 1)) := by decide
87
+
88
+ -- decimal_period_of_1_over: 12 ledger rows (params 3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43) → one quantified theorem
89
+ theorem decimal_period_is_the_order_of_ten :
90
+ [3,7,11,13,17,19,23,29].all (fun p =>
91
+ ((List.range' 1 (p - 1)).find? (fun k =>
92
+ ((List.range k).foldl (fun r _ => r * 10 % p) 1) == 1)).getD 0 ==
93
+ ((List.range' 1 (p - 1)).find? (fun k => (10 ^ k) % p == 1)).getD 0) := by decide
94
+
95
+ -- domain_prime_m: 7 ledger rows (params 2, 3, 5, 7, 11, 13, 17) → one quantified theorem
96
+ theorem primality_agrees_with_trial_division :
97
+ (List.range' 2 40).all (fun n =>
98
+ ((List.range' 2 (n - 2)).all (fun d => n % d != 0)) ==
99
+ ([2,3,5,7,11,13,17,19,23,29,31,37,41].contains n)) := by decide
100
+
101
+ end Generated