DunningKruger

A272032 proof

Jul 26th, 2026
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.62 KB | Source Code | 0 0
  1. import Mathlib
  2.  
  3. /-!
  4. A272032: arithmetic core of the implication
  5.  
  6. exact quotient prime -> exponent prime.
  7.  
  8. The quotient is represented by an explicit natural number `T` together with
  9.  
  10. (q + r) * T = q ^ n + r ^ n.
  11.  
  12. This is intentional: `Nat.div` is truncated division and would not express the
  13. OEIS condition that the rational quotient is an integer.
  14. -/
  15.  
  16. namespace A272032
  17.  
  18. /-- The exact natural-number quotient occurring in A272032. -/
  19. def ExactQuotient (n q r T : ℕ) : Prop :=
  20. (q + r) * T = q ^ n + r ^ n
  21.  
  22. private theorem odd_composite_case
  23. {n q r T : ℕ}
  24. (hn : 3 ≤ n)
  25. (hnOdd : Odd n)
  26. (hnComp : ¬ Nat.Prime n)
  27. (hqr : 0 < q + r)
  28. (hqOdd : Odd q)
  29. (hrOdd : Odd r)
  30. (hquot : ExactQuotient n q r T)
  31. (hT : Nat.Prime T) : False := by
  32. rcases (Nat.not_prime_iff_exists_mul_eq (by omega : 2 ≤ n)).mp hnComp with
  33. ⟨a, b, ha_lt, hb_lt, hab⟩
  34.  
  35. have ha0 : a ≠ 0 := by
  36. intro ha
  37. subst a
  38. simp at hab
  39. omega
  40. have ha1 : a ≠ 1 := by
  41. intro ha
  42. subst a
  43. simp at hab
  44. omega
  45. have hb0 : b ≠ 0 := by
  46. intro hb
  47. subst b
  48. simp at hab
  49. omega
  50. have hb1 : b ≠ 1 := by
  51. intro hb
  52. subst b
  53. simp at hab
  54. omega
  55. have ha2 : 2 ≤ a := by omega
  56. have hb2 : 2 ≤ b := by omega
  57.  
  58. have habOdd : Odd (a * b) := hab.symm ▸ hnOdd
  59. have haOdd : Odd a := Nat.Odd.of_mul_left habOdd
  60. have hbOdd : Odd b := Nat.Odd.of_mul_right habOdd
  61.  
  62. have hdivA : q + r ∣ q ^ a + r ^ a :=
  63. haOdd.nat_add_dvd_pow_add_pow q r
  64. rcases hdivA with ⟨A, hA⟩
  65.  
  66. have hdivB : q ^ a + r ^ a ∣ (q ^ a) ^ b + (r ^ a) ^ b :=
  67. hbOdd.nat_add_dvd_pow_add_pow (q ^ a) (r ^ a)
  68. rcases hdivB with ⟨B, hB⟩
  69.  
  70. have hnum : q ^ n + r ^ n = (q ^ a + r ^ a) * B := by
  71. calc
  72. q ^ n + r ^ n = q ^ (a * b) + r ^ (a * b) := by rw [hab]
  73. _ = (q ^ a) ^ b + (r ^ a) ^ b := by simp [pow_mul]
  74. _ = (q ^ a + r ^ a) * B := hB
  75.  
  76. have hfac0 : (q + r) * (A * B) = (q + r) * T := by
  77. calc
  78. (q + r) * (A * B) = ((q + r) * A) * B := by simp [mul_assoc]
  79. _ = (q ^ a + r ^ a) * B := by rw [← hA]
  80. _ = q ^ n + r ^ n := hnum.symm
  81. _ = (q + r) * T := hquot.symm
  82. have hfac : A * B = T := Nat.mul_left_cancel hqr hfac0
  83.  
  84. by_cases hones : q = 1 ∧ r = 1
  85. · rcases hones with ⟨rfl, rfl⟩
  86. simp [ExactQuotient] at hquot
  87. have hT1 : T = 1 := by omega
  88. exact hT.ne_one hT1
  89.  
  90. have hq1 : 1 ≤ q := by
  91. rcases hqOdd with ⟨k, hk⟩
  92. omega
  93. have hr1 : 1 ≤ r := by
  94. rcases hrOdd with ⟨k, hk⟩
  95. omega
  96. have hbig : 1 < q ∨ 1 < r := by
  97. by_contra h
  98. push Not at h
  99. apply hones
  100. constructor <;> omega
  101.  
  102. have hsumA : q + r < q ^ a + r ^ a := by
  103. rcases hbig with hq | hr
  104. · have hqa : q < q ^ a := by
  105. simpa using (Nat.pow_lt_pow_right hq (show 1 < a by omega))
  106. have hra : r ≤ r ^ a := le_self_pow hr1 ha0
  107. omega
  108. · have hqa : q ≤ q ^ a := le_self_pow hq1 ha0
  109. have hra : r < r ^ a := by
  110. simpa using (Nat.pow_lt_pow_right hr (show 1 < a by omega))
  111. omega
  112.  
  113. have hsumB : q ^ a + r ^ a < q ^ n + r ^ n := by
  114. rcases hbig with hq | hr
  115. · have hqpow : q ^ a < q ^ n :=
  116. Nat.pow_lt_pow_right hq ha_lt
  117. have hrpow : r ^ a ≤ r ^ n :=
  118. pow_le_pow_right' hr1 (Nat.le_of_lt ha_lt)
  119. omega
  120. · have hqpow : q ^ a ≤ q ^ n :=
  121. pow_le_pow_right' hq1 (Nat.le_of_lt ha_lt)
  122. have hrpow : r ^ a < r ^ n :=
  123. Nat.pow_lt_pow_right hr ha_lt
  124. omega
  125.  
  126. have hAne : A ≠ 1 := by
  127. intro hA1
  128. subst A
  129. simp at hA
  130. omega
  131. have hBne : B ≠ 1 := by
  132. intro hB1
  133. subst B
  134. simp at hnum
  135. omega
  136.  
  137. exact (Nat.not_prime_of_mul_eq hfac hAne hBne) hT
  138.  
  139. private theorem even_case
  140. {n q r T : ℕ}
  141. (hn : 3 ≤ n)
  142. (hnEven : Even n)
  143. (hqr : 0 < q + r)
  144. (hqEven : Even q)
  145. (hrEven : Even r)
  146. (hgap : q + r < 2 ^ (n - 1))
  147. (hquot : ExactQuotient n q r T)
  148. (hT : Nat.Prime T) : False := by
  149. have hn0 : n ≠ 0 := by omega
  150.  
  151. have h2q : 2 ^ n ∣ q ^ n :=
  152. pow_dvd_pow_of_dvd hqEven.two_dvd n
  153. have h2r : 2 ^ n ∣ r ^ n :=
  154. pow_dvd_pow_of_dvd hrEven.two_dvd n
  155. have h2sum : 2 ^ n ∣ q ^ n + r ^ n := h2q.add h2r
  156. have h2prod : 2 ^ n ∣ (q + r) * T := by
  157. rw [hquot]
  158. exact h2sum
  159.  
  160. have hnotOdd : ¬ Odd T := by
  161. intro hTodd
  162. have hcop : Nat.Coprime (2 ^ n) T :=
  163. (hTodd.coprime_two_left).pow_left n
  164. have h2den : 2 ^ n ∣ q + r :=
  165. hcop.dvd_of_dvd_mul_right h2prod
  166. have hpow_le : 2 ^ n ≤ q + r := Nat.le_of_dvd hqr h2den
  167. have hpow_lt : 2 ^ (n - 1) < 2 ^ n :=
  168. Nat.pow_lt_pow_right (by norm_num : 1 < (2 : ℕ)) (Nat.sub_one_lt hn0)
  169. omega
  170.  
  171. rcases hT.eq_two_or_odd' with hT2 | hTodd
  172. · have hqr2 : 2 ≤ q ∨ 2 ≤ r := by
  173. rcases (even_iff_exists_two_mul.mp hqEven) with ⟨q₀, hq⟩
  174. rcases (even_iff_exists_two_mul.mp hrEven) with ⟨r₀, hr⟩
  175. omega
  176.  
  177. have hlower : 2 ^ n ≤ q ^ n + r ^ n := by
  178. rcases hqr2 with hq2 | hr2
  179. · have hp : 2 ^ n ≤ q ^ n := Nat.pow_le_pow_left hq2 n
  180. omega
  181. · have hp : 2 ^ n ≤ r ^ n := Nat.pow_le_pow_left hr2 n
  182. omega
  183.  
  184. have hnumEq : q ^ n + r ^ n = 2 * (q + r) := by
  185. calc
  186. q ^ n + r ^ n = (q + r) * T := hquot.symm
  187. _ = (q + r) * 2 := by rw [hT2]
  188. _ = 2 * (q + r) := by omega
  189.  
  190. have hmulLt : 2 * (q + r) < 2 * 2 ^ (n - 1) :=
  191. Nat.mul_lt_mul_of_pos_left hgap (by norm_num)
  192.  
  193. have hpowEq : 2 * 2 ^ (n - 1) = 2 ^ n := by
  194. cases n with
  195. | zero => omega
  196. | succ k => simp [pow_succ, Nat.mul_comm]
  197.  
  198. have hupper : q ^ n + r ^ n < 2 ^ n := by
  199. calc
  200. q ^ n + r ^ n = 2 * (q + r) := hnumEq
  201. _ < 2 * 2 ^ (n - 1) := hmulLt
  202. _ = 2 ^ n := hpowEq
  203. omega
  204. · exact hnotOdd hTodd
  205.  
  206. /--
  207. Arithmetic core of the A272032 argument.
  208.  
  209. The three hypotheses `hodd_qr`, `heven_qr`, and `hgap` are exactly the local
  210. facts supplied by the immediately preceding/following primes:
  211.  
  212. * odd `n` gives odd `q,r`;
  213. * even `n` gives even `q,r`;
  214. * Bertrand's postulate gives `q+r < 2^(n-1)` for the relevant even case.
  215. -/
  216. theorem prime_exponent_of_prime_exactQuotient
  217. {n q r T : ℕ}
  218. (hn : 3 ≤ n)
  219. (hqr : 0 < q + r)
  220. (hodd_qr : Odd n → Odd q ∧ Odd r)
  221. (heven_qr : Even n → Even q ∧ Even r)
  222. (hgap : q + r < 2 ^ (n - 1))
  223. (hquot : ExactQuotient n q r T)
  224. (hT : Nat.Prime T) : Nat.Prime n := by
  225. by_contra hnComp
  226. rcases Nat.even_or_odd n with hnEven | hnOdd
  227. · rcases heven_qr hnEven with ⟨hqEven, hrEven⟩
  228. exact even_case hn hnEven hqr hqEven hrEven hgap hquot hT
  229. · rcases hodd_qr hnOdd with ⟨hqOdd, hrOdd⟩
  230. exact odd_composite_case hn hnOdd hnComp hqr hqOdd hrOdd hquot hT
  231.  
  232.  
  233. /-! ## End-to-end OEIS formulation -/
  234.  
  235. /-- `p` is the prime immediately preceding `n`. -/
  236. def IsPreviousPrime (p n : ℕ) : Prop :=
  237. Nat.Prime p ∧ p < n ∧
  238. ∀ ℓ : ℕ, Nat.Prime ℓ → ℓ < n → ℓ ≤ p
  239.  
  240. /-- `p` is the prime immediately following `n`. -/
  241. def IsNextPrime (p n : ℕ) : Prop :=
  242. Nat.Prime p ∧ n < p ∧
  243. ∀ ℓ : ℕ, Nat.Prime ℓ → n < ℓ → p ≤ ℓ
  244.  
  245. /--
  246. Full A272032 theorem with explicit neighboring primes and explicit values of
  247. `q` and `r`.
  248.  
  249. The hypotheses `hq` and `hr` say exactly that `q` and `r` count the composite
  250. integers between `n` and its neighboring primes. `hquot` says the quotient is
  251. an exact natural number, not a truncated `Nat.div`.
  252. -/
  253. theorem oeis_A272032_of_neighbors
  254. {n pminus pplus q r T : ℕ}
  255. (hn : 3 ≤ n)
  256. (hprev : IsPreviousPrime pminus n)
  257. (hnext : IsNextPrime pplus n)
  258. (hq : q = n - pminus - 1)
  259. (hr : r = pplus - n - 1)
  260. (hqr : 0 < q + r)
  261. (hquot : ExactQuotient n q r T)
  262. (hT : Nat.Prime T) :
  263. Nat.Prime n := by
  264. by_contra hnComp
  265.  
  266. rcases hprev with ⟨hpminusPrime, hpminus_lt, hpminus_max⟩
  267. rcases hnext with ⟨hpplusPrime, hn_lt_pplus, hpplus_min⟩
  268.  
  269. have hn_ne_three : n ≠ 3 := by
  270. intro hn3
  271. subst n
  272. exact hnComp Nat.prime_three
  273. have hn4 : 4 ≤ n := by omega
  274.  
  275. have hpminus_ne_two : pminus ≠ 2 := by
  276. intro hp2
  277. have hthree_le : 3 ≤ pminus :=
  278. hpminus_max 3 Nat.prime_three (by omega)
  279. omega
  280. have hpplus_ne_two : pplus ≠ 2 := by omega
  281.  
  282. have hpminusOdd : Odd pminus :=
  283. hpminusPrime.odd_of_ne_two hpminus_ne_two
  284. have hpplusOdd : Odd pplus :=
  285. hpplusPrime.odd_of_ne_two hpplus_ne_two
  286.  
  287. have hq_identity : pminus + q + 1 = n := by
  288. rw [hq]
  289. omega
  290. have hr_identity : n + r + 1 = pplus := by
  291. rw [hr]
  292. omega
  293.  
  294. /- Bertrand gives a prime `p` with `n < p ≤ 2n`; minimality of `pplus`
  295. then gives `pplus ≤ 2n`. -/
  296. rcases Nat.bertrand n (by omega : n ≠ 0) with
  297. ⟨p, hpPrime, hn_lt_p, hp_le_two_n⟩
  298. have hpplus_le_two_n : pplus ≤ 2 * n :=
  299. le_trans (hpplus_min p hpPrime hn_lt_p) hp_le_two_n
  300.  
  301. /- From the two gap identities, `pminus ≥ 2`, and `pplus ≤ 2n`, we get
  302. `q+r < 2(n-1)`. Mathlib's `Nat.mul_le_pow` then supplies
  303. `2(n-1) ≤ 2^(n-1)`. -/
  304. have hsmall : q + r < 2 * (n - 1) := by
  305. have hpminus_two : 2 ≤ pminus := hpminusPrime.two_le
  306. omega
  307. have hmul_pow : 2 * (n - 1) ≤ 2 ^ (n - 1) :=
  308. Nat.mul_le_pow (a := 2) (by norm_num) (n - 1)
  309. have hgap : q + r < 2 ^ (n - 1) :=
  310. lt_of_lt_of_le hsmall hmul_pow
  311.  
  312. rcases Nat.even_or_odd n with hnEven | hnOdd
  313. · have hqEven : Even q := by
  314. have hdiffOdd : Odd (n - pminus) :=
  315. Nat.Even.sub_odd (Nat.le_of_lt hpminus_lt) hnEven hpminusOdd
  316. rw [hq]
  317. exact Nat.Odd.sub_odd hdiffOdd odd_one
  318.  
  319. have hrEven : Even r := by
  320. have hdiffOdd : Odd (pplus - n) :=
  321. Nat.Odd.sub_even (Nat.le_of_lt hn_lt_pplus) hpplusOdd hnEven
  322. rw [hr]
  323. exact Nat.Odd.sub_odd hdiffOdd odd_one
  324.  
  325. exact even_case hn hnEven hqr hqEven hrEven hgap hquot hT
  326.  
  327. · have hqOdd : Odd q := by
  328. have hdiffEven : Even (n - pminus) :=
  329. Nat.Odd.sub_odd hnOdd hpminusOdd
  330. have hdiff_pos : 1 ≤ n - pminus := by omega
  331. rw [hq]
  332. exact Nat.Even.sub_odd hdiff_pos hdiffEven odd_one
  333.  
  334. have hrOdd : Odd r := by
  335. have hdiffEven : Even (pplus - n) :=
  336. Nat.Odd.sub_odd hpplusOdd hnOdd
  337. have hdiff_pos : 1 ≤ pplus - n := by omega
  338. rw [hr]
  339. exact Nat.Even.sub_odd hdiff_pos hdiffEven odd_one
  340.  
  341. exact odd_composite_case hn hnOdd hnComp hqr hqOdd hrOdd hquot hT
  342.  
  343. /--
  344. The direct form of the theorem, with
  345.  
  346. `q = n - pminus - 1` and `r = pplus - n - 1`
  347.  
  348. substituted into the statement.
  349. -/
  350. theorem oeis_A272032
  351. {n pminus pplus T : ℕ}
  352. (hn : 3 ≤ n)
  353. (hprev : IsPreviousPrime pminus n)
  354. (hnext : IsNextPrime pplus n)
  355. (hqr : 0 < (n - pminus - 1) + (pplus - n - 1))
  356. (hquot : ExactQuotient n
  357. (n - pminus - 1) (pplus - n - 1) T)
  358. (hT : Nat.Prime T) :
  359. Nat.Prime n := by
  360. exact oeis_A272032_of_neighbors
  361. hn hprev hnext rfl rfl hqr hquot hT
  362.  
  363. /-- Membership predicate corresponding to the mathematical definition of
  364. A272032 used in this file. -/
  365. def IsA272032Term (n : ℕ) : Prop :=
  366. ∃ pminus pplus T : ℕ,
  367. 3 ≤ n ∧
  368. IsPreviousPrime pminus n ∧
  369. IsNextPrime pplus n ∧
  370. 0 < (n - pminus - 1) + (pplus - n - 1) ∧
  371. ExactQuotient n (n - pminus - 1) (pplus - n - 1) T ∧
  372. Nat.Prime T
  373.  
  374. /-- Every term satisfying the A272032 definition is prime. -/
  375. theorem all_A272032_terms_are_prime {n : ℕ}
  376. (hn : IsA272032Term n) : Nat.Prime n := by
  377. rcases hn with
  378. ⟨pminus, pplus, T, hn3, hprev, hnext, hqr, hquot, hT⟩
  379. exact oeis_A272032 hn3 hprev hnext hqr hquot hT
  380.  
  381. #print axioms all_A272032_terms_are_prime
  382.  
  383. end A272032
  384.  
Tags: maths
Advertisement
Add Comment
Please, Sign In to add comment