| {"name": "putnam_1964_a4", "proof_length": 1769, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Set Function\n\n\n", "signature": "theorem putnam_1964_a4\n(u : β β β€)\n(boundedu : β B T : β€, β n : β, B β€ u n β§ u n β€ T)\n(hu : β n β₯ 4, u n = ((u (n - 1) + u (n - 2) + u (n - 3) * u (n - 4)) : β) / (u (n - 1) * u (n - 2) + u (n - 3) + u (n - 4)) β§ (u (n - 1) * u (n - 2) + u (n - 3) + u (n - 4)) β 0)\n: (β N c : β, c > 0 β§ β n β₯ N, u (n + c) = u n)", "src": "theorem putnam_1964_a4\n(u : β β β€)\n(boundedu : β B T : β€, β n : β, B β€ u n β§ u n β€ T)\n(hu : β n β₯ 4, u n = ((u (n - 1) + u (n - 2) + u (n - 3) * u (n - 4)) : β) / (u (n - 1) * u (n - 2) + u (n - 3) + u (n - 4)) β§ (u (n - 1) * u (n - 2) + u (n - 3) + u (n - 4)) β 0)\n: (β N c : β, c > 0 β§ β n β₯ N, u (n + c) = u n) := by \n have h_main : β (i j : β), i < j β§ (u i = u j β§ u (i + 1) = u (j + 1) β§ u (i + 2) = u (j + 2) β§ u (i + 3) = u (j + 3)) := by\n obtain β¨B, T, hBβ© := boundedu\n have hβ : β (i j : β), i < j β§ (u i = u j β§ u (i + 1) = u (j + 1) β§ u (i + 2) = u (j + 2) β§ u (i + 3) = u (j + 3)) := by\n \n classical\n \n let f : β β (β€ Γ β€ Γ β€ Γ β€) := fun n => (u n, u (n + 1), u (n + 2), u (n + 3))\n have hβ : Set.Finite (Set.range f) := by\n have hβ : Set.range f β Set.Icc (B, B, B, B) (T, T, T, T) := by\n intro x hx\n rcases hx with β¨n, rflβ©\n have hβ := hB n\n have hβ
:= hB (n + 1)\n have hβ := hB (n + 2)\n have hβ := hB (n + 3)\n simp only [Set.mem_Icc, Prod.le_def] at hβ hβ
hβ hβ β’\n constructor <;>\n (try constructor) <;>\n (try constructor) <;>\n (try constructor) <;>\n (try simp_all [f]) <;>\n (try nlinarith)\n \n have hβ : Set.Finite (Set.Icc (B, B, B, B) (T, T, T, T)) := by\n apply Set.Finite.subset (Set.finite_mem_finset (Finset.Icc (B, B, B, B) (T, T, T, T)))\n intro x hx\n simp_all [Set.mem_Icc]\n <;>\n (try aesop)\n exact Set.Finite.subset hβ hβ\n \n have hβ : β (i j : β), i < j β§ f i = f j := by\n by_contra! hβ\n have hβ
: Function.Injective f := by\n intro i j hβ\n by_cases hβ : i = j\n Β· exact hβ\n Β· have hβ : i < j β¨ j < i := by omega\n cases hβ with\n | inl hβ =>\n have hβ := hβ i j hβ\n simp_all\n | inr hβ =>\n have hβ := hβ j i hβ\n simp_all\n have hβ : Set.Infinite (Set.range f) := Set.infinite_range_of_injective hβ
\n exact Set.not_infinite.mpr hβ hβ\n \n obtain β¨i, j, hβ, hβ
β© := hβ\n refine' β¨i, j, hβ, _β©\n simp [f] at hβ
β’\n <;>\n (try simp_all [Prod.ext_iff]) <;>\n (try omega) <;>\n (try aesop)\n exact hβ\n \n have h_periodic : β N c : β, c > 0 β§ β n β₯ N, u (n + c) = u n := by\n obtain β¨i, j, hij, h_eqβ© := h_main\n have hβ : β m : β, u (i + m) = u (j + m) := by\n intro m\n have hβ : β m : β, u (i + m) = u (j + m) := by\n intro m\n induction m using Nat.strong_induction_on with\n | h m ih =>\n match m with\n | 0 =>\n have hβ := h_eq.1\n simp at hβ β’\n <;> simp_all [add_assoc]\n | 1 =>\n have hβ := h_eq.2.1\n simp at hβ β’\n <;> simp_all [add_assoc]\n <;> ring_nf at *\n <;> omega\n | 2 =>\n have hβ := h_eq.2.2.1\n simp at hβ β’\n <;> simp_all [add_assoc]\n <;> ring_nf at *\n <;> omega\n | 3 =>\n have hβ := h_eq.2.2.2\n simp at hβ β’\n <;> simp_all [add_assoc]\n <;> ring_nf at *\n <;> omega\n | m + 4 =>\n have hβ : i + (m + 4) β₯ 4 := by\n have hβ : i β₯ 0 := by linarith\n omega\n have hβ : u (i + (m + 4)) = ((u (i + (m + 4) - 1) + u (i + (m + 4) - 2) + u (i + (m + 4) - 3) * u (i + (m + 4) - 4)) : β) / (u (i + (m + 4) - 1) * u (i + (m + 4) - 2) + u (i + (m + 4) - 3) + u (i + (m + 4) - 4)) := by\n have hβ
:= hu (i + (m + 4)) (by omega)\n have hβ := hβ
.1\n norm_cast at hβ β’\n <;> simp_all [add_assoc]\n <;> ring_nf at *\n <;> norm_num at *\n <;> linarith\n have hβ
: u (j + (m + 4)) = ((u (j + (m + 4) - 1) + u (j + (m + 4) - 2) + u (j + (m + 4) - 3) * u (j + (m + 4) - 4)) : β) / (u (j + (m + 4) - 1) * u (j + (m + 4) - 2) + u (j + (m + 4) - 3) + u (j + (m + 4) - 4)) := by\n have hβ := hu (j + (m + 4)) (by\n have hβ : j β₯ i + 1 := by omega\n omega\n )\n have hβ := hβ.1\n norm_cast at hβ β’\n <;> simp_all [add_assoc]\n <;> ring_nf at *\n <;> norm_num at *\n <;> linarith\n have hβ : (i + (m + 4) - 1 : β) = i + (m + 3) := by\n omega\n have hβ : (i + (m + 4) - 2 : β) = i + (m + 2) := by\n omega\n have hβ : (i + (m + 4) - 3 : β) = i + (m + 1) := by\n omega\n have hβ : (i + (m + 4) - 4 : β) = i + m := by\n omega\n have hββ : (j + (m + 4) - 1 : β) = j + (m + 3) := by\n omega\n have hββ : (j + (m + 4) - 2 : β) = j + (m + 2) := by\n omega\n have hββ : (j + (m + 4) - 3 : β) = j + (m + 1) := by\n omega\n have hββ : (j + (m + 4) - 4 : β) = j + m := by\n omega\n have hββ : u (i + (m + 3)) = u (j + (m + 3)) := by\n have hββ
:= ih (m + 3) (by omega)\n simp [add_assoc] at hββ
β’\n <;> omega\n have hββ
: u (i + (m + 2)) = u (j + (m + 2)) := by\n have hββ := ih (m + 2) (by omega)\n simp [add_assoc] at hββ β’\n <;> omega\n have hββ : u (i + (m + 1)) = u (j + (m + 1)) := by\n have hββ := ih (m + 1) (by omega)\n simp [add_assoc] at hββ β’\n <;> omega\n have hββ : u (i + m) = u (j + m) := by\n have hββ := ih m (by omega)\n simp [add_assoc] at hββ β’\n <;> omega\n have hββ : (u (i + (m + 4)) : β) = (u (j + (m + 4)) : β) := by\n rw [hβ, hβ
]\n simp [hβ, hβ, hβ, hβ, hββ, hββ, hββ, hββ] at *\n norm_cast at *\n <;>\n (try simp_all [hββ, hββ
, hββ, hββ]) <;>\n (try ring_nf at *) <;>\n (try field_simp at *) <;>\n (try norm_cast at *) <;>\n (try linarith)\n norm_cast at hββ β’\n <;>\n (try simp_all) <;>\n (try linarith)\n exact hβ m\n have hβ : β N c : β, c > 0 β§ β n β₯ N, u (n + c) = u n := by\n use i, (j - i)\n have hβ : j - i > 0 := by\n omega\n constructor\n Β· exact hβ\n Β· intro n hn\n have hβ : u (n + (j - i)) = u n := by\n have hβ
: u (i + (n - i)) = u (j + (n - i)) := by\n have hβ := hβ (n - i)\n simp [add_assoc] at hβ β’\n <;> omega\n have hβ : i + (n - i) = n := by\n omega\n have hβ : j + (n - i) = n + (j - i) := by\n omega\n rw [hβ] at hβ
\n rw [hβ] at hβ
\n linarith\n exact hβ\n exact hβ\n \n exact h_periodic"} |
| {"name": "putnam_1995_a3", "proof_length": 4085, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Filter Topology Real\n\n\n", "signature": "theorem putnam_1995_a3\n(relation : (Fin 9 β β€) β (Fin 9 β β€) β Prop)\n(digits_to_num : (Fin 9 β β€) β β€)\n(hdigits_to_num : digits_to_num = fun dig => β i : Fin 9, (dig i) * 10^i.1)\n(hrelation : β d e : (Fin 9 β β€), relation d e β (β i : Fin 9, d i < 10 β§ d i β₯ 0 β§ e i < 10 β§ e i β₯ 0) β§ (β i : Fin 9, 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then e j else d j))))\n: β d e f : (Fin 9 β β€), ((relation d e) β§ (relation e f)) β (β i : Fin 9, 7 β£ d i - f i)", "src": "theorem putnam_1995_a3\n(relation : (Fin 9 β β€) β (Fin 9 β β€) β Prop)\n(digits_to_num : (Fin 9 β β€) β β€)\n(hdigits_to_num : digits_to_num = fun dig => β i : Fin 9, (dig i) * 10^i.1)\n(hrelation : β d e : (Fin 9 β β€), relation d e β (β i : Fin 9, d i < 10 β§ d i β₯ 0 β§ e i < 10 β§ e i β₯ 0) β§ (β i : Fin 9, 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then e j else d j))))\n: β d e f : (Fin 9 β β€), ((relation d e) β§ (relation e f)) β (β i : Fin 9, 7 β£ d i - f i) := by \n have h_main : β (d e f : (Fin 9 β β€)), ((relation d e) β§ (relation e f)) β (β i : Fin 9, 7 β£ d i - f i) := by\n intro d e f h\n have hβ : relation d e := h.1\n have hβ : relation e f := h.2\n have hβ : β (i : Fin 9), 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then e j else d j)) := by\n have hβ : (β i : Fin 9, 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then e j else d j))) := (hrelation d e).mp hβ |>.2\n exact hβ\n have hβ : β (i : Fin 9), 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then f j else e j)) := by\n have hβ
: (β i : Fin 9, 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then f j else e j))) := (hrelation e f).mp hβ |>.2\n exact hβ
\n \n have hβ
: β (i : Fin 9), 7 β£ (e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d := by\n intro i\n have hβ : 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then e j else d j)) := hβ i\n have hβ : (digits_to_num (fun j : Fin 9 => if j = i then e j else d j)) = digits_to_num d + (e i - d i) * (10 : β€) ^ (i : β) := by\n calc\n (digits_to_num (fun j : Fin 9 => if j = i then e j else d j)) = β j : Fin 9, (if j = i then e j else d j) * (10 : β€) ^ (j : β) := by\n simp [hdigits_to_num]\n <;>\n rfl\n _ = β j : Fin 9, (if j = i then e j else d j) * (10 : β€) ^ (j : β) := rfl\n _ = (β j : Fin 9, d j * (10 : β€) ^ (j : β)) + (e i - d i) * (10 : β€) ^ (i : β) := by\n calc\n (β j : Fin 9, (if j = i then e j else d j) * (10 : β€) ^ (j : β)) = β j : Fin 9, (d j * (10 : β€) ^ (j : β) + (if j = i then (e j - d j) else 0) * (10 : β€) ^ (j : β)) := by\n apply Finset.sum_congr rfl\n intro j _\n by_cases h : j = i\n Β· simp [h]\n <;> ring\n Β· simp [h]\n <;> ring\n _ = (β j : Fin 9, d j * (10 : β€) ^ (j : β)) + β j : Fin 9, (if j = i then (e j - d j) else 0) * (10 : β€) ^ (j : β) := by\n rw [Finset.sum_add_distrib]\n _ = (β j : Fin 9, d j * (10 : β€) ^ (j : β)) + (e i - d i) * (10 : β€) ^ (i : β) := by\n have hβ : β j : Fin 9, (if j = i then (e j - d j) else 0) * (10 : β€) ^ (j : β) = (e i - d i) * (10 : β€) ^ (i : β) := by\n calc\n _ = β j : Fin 9, (if j = i then (e j - d j) else 0) * (10 : β€) ^ (j : β) := rfl\n _ = (if i = i then (e i - d i) else 0) * (10 : β€) ^ (i : β) := by\n \n simp [Finset.sum_ite_eq', Finset.mem_univ, i.is_lt]\n _ = (e i - d i) * (10 : β€) ^ (i : β) := by simp\n rw [hβ]\n <;> simp [hdigits_to_num]\n <;>\n rfl\n _ = digits_to_num d + (e i - d i) * (10 : β€) ^ (i : β) := by\n simp [hdigits_to_num]\n <;>\n rfl\n have hβ : 7 β£ digits_to_num d + (e i - d i) * (10 : β€) ^ (i : β) := by\n rw [hβ] at hβ\n exact hβ\n \n have hβ : 7 β£ (e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d := by\n \n have hββ : (e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d = digits_to_num d + (e i - d i) * (10 : β€) ^ (i : β) := by ring\n rw [hββ]\n exact hβ\n exact hβ\n \n have hβ : β (i : Fin 9), 7 β£ (f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e := by\n intro i\n have hβ : 7 β£ (digits_to_num (fun j : Fin 9 => if j = i then f j else e j)) := hβ i\n have hβ : (digits_to_num (fun j : Fin 9 => if j = i then f j else e j)) = digits_to_num e + (f i - e i) * (10 : β€) ^ (i : β) := by\n calc\n (digits_to_num (fun j : Fin 9 => if j = i then f j else e j)) = β j : Fin 9, (if j = i then f j else e j) * (10 : β€) ^ (j : β) := by\n simp [hdigits_to_num]\n <;>\n rfl\n _ = β j : Fin 9, (if j = i then f j else e j) * (10 : β€) ^ (j : β) := rfl\n _ = (β j : Fin 9, e j * (10 : β€) ^ (j : β)) + (f i - e i) * (10 : β€) ^ (i : β) := by\n calc\n (β j : Fin 9, (if j = i then f j else e j) * (10 : β€) ^ (j : β)) = β j : Fin 9, (e j * (10 : β€) ^ (j : β) + (if j = i then (f j - e j) else 0) * (10 : β€) ^ (j : β)) := by\n apply Finset.sum_congr rfl\n intro j _\n by_cases h : j = i\n Β· simp [h]\n <;> ring\n Β· simp [h]\n <;> ring\n _ = (β j : Fin 9, e j * (10 : β€) ^ (j : β)) + β j : Fin 9, (if j = i then (f j - e j) else 0) * (10 : β€) ^ (j : β) := by\n rw [Finset.sum_add_distrib]\n _ = (β j : Fin 9, e j * (10 : β€) ^ (j : β)) + (f i - e i) * (10 : β€) ^ (i : β) := by\n have hβ : β j : Fin 9, (if j = i then (f j - e j) else 0) * (10 : β€) ^ (j : β) = (f i - e i) * (10 : β€) ^ (i : β) := by\n calc\n _ = β j : Fin 9, (if j = i then (f j - e j) else 0) * (10 : β€) ^ (j : β) := rfl\n _ = (if i = i then (f i - e i) else 0) * (10 : β€) ^ (i : β) := by\n \n simp [Finset.sum_ite_eq', Finset.mem_univ, i.is_lt]\n _ = (f i - e i) * (10 : β€) ^ (i : β) := by simp\n rw [hβ]\n <;> simp [hdigits_to_num]\n <;>\n rfl\n _ = digits_to_num e + (f i - e i) * (10 : β€) ^ (i : β) := by\n simp [hdigits_to_num]\n <;>\n rfl\n have hβ : 7 β£ digits_to_num e + (f i - e i) * (10 : β€) ^ (i : β) := by\n rw [hβ] at hβ\n exact hβ\n \n have hββ : 7 β£ (f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e := by\n \n have hββ : (f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e = digits_to_num e + (f i - e i) * (10 : β€) ^ (i : β) := by ring\n rw [hββ]\n exact hβ\n exact hββ\n \n have hβ : 7 β£ digits_to_num e + digits_to_num d := by\n have hβ : digits_to_num e = digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n calc\n digits_to_num e = β i : Fin 9, e i * (10 : β€) ^ (i : β) := by simp [hdigits_to_num]\n _ = β i : Fin 9, (d i + (e i - d i)) * (10 : β€) ^ (i : β) := by\n apply Finset.sum_congr rfl\n intro i _\n ring\n _ = β i : Fin 9, (d i * (10 : β€) ^ (i : β) + (e i - d i) * (10 : β€) ^ (i : β)) := by\n apply Finset.sum_congr rfl\n intro i _\n ring\n _ = (β i : Fin 9, d i * (10 : β€) ^ (i : β)) + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n rw [Finset.sum_add_distrib]\n _ = digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n simp [hdigits_to_num]\n <;>\n rfl\n have hβ : β i : Fin 9, 7 β£ (e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d := hβ
\n have hββ : 7 β£ β i : Fin 9, ((e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d) := by\n apply Finset.dvd_sum\n intro i _\n exact hβ i\n have hββ : β i : Fin 9, ((e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d) = β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) + 9 * digits_to_num d := by\n calc\n β i : Fin 9, ((e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d) = β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) + β i : Fin 9, digits_to_num d := by\n rw [Finset.sum_add_distrib]\n _ = β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) + 9 * digits_to_num d := by\n simp [Finset.sum_const, Finset.card_fin]\n <;> ring\n <;> norm_num\n have hββ : 7 β£ β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) + 9 * digits_to_num d := by\n rw [hββ] at hββ\n exact hββ\n have hββ : 7 β£ digits_to_num e + digits_to_num d := by\n have hββ : digits_to_num e + digits_to_num d = 2 * digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n linarith\n rw [hββ]\n have hββ
: 7 β£ 2 * digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n have hββ : 7 β£ β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) + 9 * digits_to_num d := hββ\n have hββ : 7 β£ 2 * digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n \n have hββ : (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) + 9 * digits_to_num d) = (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 9 * digits_to_num d := by ring\n rw [hββ] at hββ\n \n \n \n \n \n \n have hββ : 7 β£ (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 2 * digits_to_num d := by\n \n \n \n have hββ : 7 β£ (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 9 * digits_to_num d := hββ\n have hββ : 7 β£ 7 * digits_to_num d := by\n use digits_to_num d\n <;> ring\n have hββ : 7 β£ (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 2 * digits_to_num d := by\n \n have hββ : (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 2 * digits_to_num d = ((β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 9 * digits_to_num d) - 7 * digits_to_num d := by ring\n rw [hββ]\n exact dvd_sub hββ hββ\n exact hββ\n \n have hββ : 7 β£ 2 * digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) := by\n \n have hββ : 2 * digits_to_num d + β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β) = (β i : Fin 9, (e i - d i) * (10 : β€) ^ (i : β)) + 2 * digits_to_num d := by ring\n rw [hββ]\n exact hββ\n exact hββ\n exact hββ\n exact hββ
\n exact hββ\n \n have hβ : β (i : Fin 9), 7 β£ (f i - d i) * (10 : β€) ^ (i : β) := by\n intro i\n have hβ : 7 β£ (f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e := hβ i\n have hββ : 7 β£ (e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d := hβ
i\n have hββ : 7 β£ digits_to_num e + digits_to_num d := hβ\n \n have hββ : 7 β£ (f i - e i) * (10 : β€) ^ (i : β) - digits_to_num d := by\n \n \n have hββ : 7 β£ (f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e := hβ i\n have hββ : 7 β£ digits_to_num e + digits_to_num d := hβ\n \n have hββ
: 7 β£ ((f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e) - (digits_to_num e + digits_to_num d) := by\n exact dvd_sub hββ hββ\n \n have hββ : ((f i - e i) * (10 : β€) ^ (i : β) + digits_to_num e) - (digits_to_num e + digits_to_num d) = (f i - e i) * (10 : β€) ^ (i : β) - digits_to_num d := by\n ring\n rw [hββ] at hββ
\n exact hββ
\n \n have hββ : 7 β£ (f i - d i) * (10 : β€) ^ (i : β) := by\n have hββ : 7 β£ (f i - e i) * (10 : β€) ^ (i : β) - digits_to_num d := hββ\n have hββ
: 7 β£ (e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d := hβ
i\n \n have hββ : 7 β£ ((f i - e i) * (10 : β€) ^ (i : β) - digits_to_num d) + ((e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d) := by\n exact dvd_add hββ hββ
\n \n have hββ : ((f i - e i) * (10 : β€) ^ (i : β) - digits_to_num d) + ((e i - d i) * (10 : β€) ^ (i : β) + digits_to_num d) = (f i - d i) * (10 : β€) ^ (i : β) := by\n ring\n rw [hββ] at hββ\n exact hββ\n exact hββ\n \n have hβ : β (i : Fin 9), 7 β£ d i - f i := by\n intro i\n have hββ : 7 β£ (f i - d i) * (10 : β€) ^ (i : β) := hβ i\n have hββ : 7 β£ (f i - d i) := by\n \n have hββ : (7 : β€) β£ (f i - d i) * (10 : β€) ^ (i : β) := hββ\n \n have hββ : (7 : β).Prime := by decide\n have hββ : Β¬(7 : β€) β£ (10 : β€) ^ (i : β) := by\n \n intro h\n have hββ
: (7 : β) β£ (10 : β) ^ (i : β) := by\n norm_cast at h β’\n <;> simpa [Int.coe_nat_dvd_left] using h\n have hββ : (7 : β) β£ 10 := by\n \n exact Nat.Prime.dvd_of_dvd_pow hββ hββ
\n norm_num at hββ\n <;> contradiction\n \n have hββ
: (7 : β€) β£ (f i - d i) := by\n \n have hββ : (7 : β€) β£ (f i - d i) * (10 : β€) ^ (i : β) := hββ\n have hββ : Β¬(7 : β€) β£ (10 : β€) ^ (i : β) := hββ\n \n have hββ : (7 : β€) β£ (f i - d i) := by\n \n have hββ : (7 : β€) β£ (f i - d i) * (10 : β€) ^ (i : β) := hββ\n have hββ : (7 : β).Prime := by decide\n have hββ : (7 : β€) β£ (f i - d i) β¨ (7 : β€) β£ (10 : β€) ^ (i : β) := by\n \n have hββ : (7 : β€) β£ (f i - d i) * (10 : β€) ^ (i : β) := hββ\n have hββ : (7 : β€) β£ (f i - d i) β¨ (7 : β€) β£ (10 : β€) ^ (i : β) := by\n \n apply (Int.prime_iff_natAbs_prime.mpr (by decide)).dvd_mul.mp\n exact hββ\n exact hββ\n cases hββ with\n | inl hββ =>\n exact hββ\n | inr hββ =>\n exfalso\n exact hββ hββ\n exact hββ\n exact hββ
\n \n have hββ : 7 β£ d i - f i := by\n have hββ : 7 β£ (f i - d i) := hββ\n have hββ : 7 β£ -(f i - d i) := by\n exact dvd_neg.mpr hββ\n have hββ
: -(f i - d i) = d i - f i := by ring\n rw [hββ
] at hββ\n exact hββ\n exact hββ\n \n intro i\n have hββ : 7 β£ d i - f i := hβ i\n exact hββ\n exact h_main"} |
| {"name": "putnam_1988_a2", "proof_length": 2161, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Set\n\n\n\n", "signature": "theorem putnam_1988_a2\n (f : β β β)\n (hf : f = fun x β¦ Real.exp (x ^ 2)) :\n ((True) : Prop ) β\n (β a b : β,\n a < b β§\n β g : β β β,\n (β x β Ioo a b, g x β 0) β§\n DifferentiableOn β g (Ioo a b) β§\n β x β Ioo a b, deriv (fun y β¦ f y * g y) x = (deriv f x) * (deriv g x))", "src": "theorem putnam_1988_a2\n (f : β β β)\n (hf : f = fun x β¦ Real.exp (x ^ 2)) :\n ((True) : Prop ) β\n (β a b : β,\n a < b β§\n β g : β β β,\n (β x β Ioo a b, g x β 0) β§\n DifferentiableOn β g (Ioo a b) β§\n β x β Ioo a b, deriv (fun y β¦ f y * g y) x = (deriv f x) * (deriv g x)) :=\n by \n have h_main : (β (a b : β), a < b β§ β (g : β β β), (β x β Set.Ioo a b, g x β 0) β§ DifferentiableOn β g (Set.Ioo a b) β§ β x β Set.Ioo a b, deriv (fun y β¦ f y * g y) x = (deriv f x) * (deriv g x)) := by\n use 1, 2\n constructor\n Β· norm_num\n Β· \n use fun x => Real.exp x * Real.sqrt (2 * x - 1)\n constructor\n Β· \n use 3 / 2\n constructor\n Β· \n norm_num [Set.mem_Ioo]\n Β· \n have hβ : Real.exp (3 / 2 : β) > 0 := Real.exp_pos _\n have hβ : Real.sqrt (2 * (3 / 2 : β) - 1) > 0 := by\n apply Real.sqrt_pos_of_pos\n norm_num\n have hβ : Real.exp (3 / 2 : β) * Real.sqrt (2 * (3 / 2 : β) - 1) > 0 := by positivity\n intro hβ\n linarith\n Β· constructor\n Β· \n have hβ : DifferentiableOn β (fun x : β => Real.exp x * Real.sqrt (2 * x - 1)) (Set.Ioo 1 2) := by\n apply DifferentiableOn.mul\n Β· exact DifferentiableOn.exp (differentiableOn_id)\n Β· apply DifferentiableOn.sqrt\n Β· \n have hβ : DifferentiableOn β (fun x : β => (2 : β) * x - 1) (Set.Ioo 1 2) := by\n apply DifferentiableOn.sub\n Β· apply DifferentiableOn.const_mul\n exact differentiableOn_id\n Β· exact differentiableOn_const _\n exact hβ\n Β· \n intro x hx\n have hβ : 1 < x := hx.1\n have hβ : x < 2 := hx.2\n have hβ
: (2 : β) * x - 1 > 0 := by linarith\n linarith\n exact hβ\n Β· \n intro x hx\n have hβ : x β Set.Ioo 1 2 := hx\n have hβ : 1 < x := hβ.1\n have hβ : x < 2 := hβ.2\n have hβ : (2 : β) * x - 1 > 0 := by linarith\n have hβ
: Real.sqrt (2 * x - 1) > 0 := Real.sqrt_pos.mpr hβ\n have hβ : HasDerivAt (fun x : β => Real.exp x * Real.sqrt (2 * x - 1)) (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) x := by\n \n have hβ : HasDerivAt (fun x : β => Real.exp x) (Real.exp x) x := Real.hasDerivAt_exp x\n have hβ : HasDerivAt (fun x : β => Real.sqrt (2 * x - 1)) (1 / Real.sqrt (2 * x - 1)) x := by\n have hβ : HasDerivAt (fun x : β => (2 : β) * x - 1) 2 x := by\n simpa using (hasDerivAt_id x).const_mul 2 |>.sub_const 1\n have hββ : HasDerivAt (fun x : β => Real.sqrt (2 * x - 1)) (1 / Real.sqrt (2 * x - 1)) x := by\n convert HasDerivAt.sqrt hβ (by positivity) using 1 <;>\n field_simp [hβ.ne'] <;>\n ring_nf <;>\n field_simp [hβ.ne'] <;>\n ring\n exact hββ\n have hββ : HasDerivAt (fun x : β => Real.exp x * Real.sqrt (2 * x - 1)) (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) x := by\n convert hβ.mul hβ using 1 <;>\n field_simp [hβ.ne'] <;>\n ring_nf <;>\n field_simp [hβ.ne'] <;>\n ring\n exact hββ\n have hβ : deriv (fun x : β => Real.exp x * Real.sqrt (2 * x - 1)) x = Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1) := by\n apply HasDerivAt.deriv\n exact hβ\n \n have hβ : f = fun x => Real.exp (x ^ 2) := hf\n have hβ : deriv f x = 2 * x * Real.exp (x ^ 2) := by\n rw [hβ]\n \n have hββ : HasDerivAt (fun x : β => Real.exp (x ^ 2)) (2 * x * Real.exp (x ^ 2)) x := by\n have hββ : HasDerivAt (fun x : β => x ^ 2) (2 * x) x := by\n simpa using (hasDerivAt_pow 2 x)\n have hββ : HasDerivAt (fun x : β => Real.exp (x ^ 2)) (Real.exp (x ^ 2) * (2 * x)) x := by\n apply HasDerivAt.exp\n exact hββ\n convert hββ using 1 <;> ring\n have hββ : deriv (fun x : β => Real.exp (x ^ 2)) x = 2 * x * Real.exp (x ^ 2) := by\n apply HasDerivAt.deriv\n exact hββ\n exact hββ\n have hββ : deriv (fun y : β => f y * (Real.exp y * Real.sqrt (2 * y - 1))) x = (deriv f x) * (deriv (fun y : β => Real.exp y * Real.sqrt (2 * y - 1)) x) := by\n \n have hββ : deriv (fun y : β => f y * (Real.exp y * Real.sqrt (2 * y - 1))) x = deriv f x * (Real.exp x * Real.sqrt (2 * x - 1)) + f x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) := by\n \n have hββ : HasDerivAt (fun y : β => f y * (Real.exp y * Real.sqrt (2 * y - 1))) (deriv f x * (Real.exp x * Real.sqrt (2 * x - 1)) + f x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1))) x := by\n have hββ : HasDerivAt f (deriv f x) x := by\n have hββ : DifferentiableAt β f x := by\n rw [hβ]\n apply DifferentiableAt.exp\n apply DifferentiableAt.pow\n exact differentiableAt_id\n exact hββ.hasDerivAt\n have hββ : HasDerivAt (fun y : β => Real.exp y * Real.sqrt (2 * y - 1)) (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) x := by\n convert hβ using 1\n have hββ
: HasDerivAt (fun y : β => f y * (Real.exp y * Real.sqrt (2 * y - 1))) (deriv f x * (Real.exp x * Real.sqrt (2 * x - 1)) + f x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1))) x := by\n convert hββ.mul hββ using 1 <;>\n simp [hβ, hβ, mul_assoc]\n <;>\n ring_nf\n <;>\n field_simp [hβ.ne']\n <;>\n ring\n exact hββ
\n have hββ : deriv (fun y : β => f y * (Real.exp y * Real.sqrt (2 * y - 1))) x = deriv f x * (Real.exp x * Real.sqrt (2 * x - 1)) + f x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) := by\n apply HasDerivAt.deriv\n exact hββ\n exact hββ\n have hββ : deriv f x * (Real.exp x * Real.sqrt (2 * x - 1)) + f x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) = (deriv f x) * (deriv (fun y : β => Real.exp y * Real.sqrt (2 * y - 1)) x) := by\n \n have hββ : deriv f x = 2 * x * Real.exp (x ^ 2) := hβ\n have hββ : f x = Real.exp (x ^ 2) := by\n rw [hβ]\n <;> simp\n have hββ : deriv (fun y : β => Real.exp y * Real.sqrt (2 * y - 1)) x = Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1) := hβ\n have hββ : 2 * x * (Real.exp x * Real.sqrt (2 * x - 1)) + (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) = 2 * x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) := by\n \n have hββ : Real.exp x > 0 := Real.exp_pos x\n have hββ : Real.sqrt (2 * x - 1) > 0 := Real.sqrt_pos.mpr (by linarith)\n field_simp [hββ.ne', hββ.ne']\n <;>\n nlinarith [Real.sq_sqrt (show 0 β€ 2 * x - 1 by linarith)]\n calc\n deriv f x * (Real.exp x * Real.sqrt (2 * x - 1)) + f x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) = (2 * x * Real.exp (x ^ 2)) * (Real.exp x * Real.sqrt (2 * x - 1)) + Real.exp (x ^ 2) * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) := by\n rw [hββ, hββ]\n _ = Real.exp (x ^ 2) * (2 * x * (Real.exp x * Real.sqrt (2 * x - 1)) + (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1))) := by\n ring_nf\n <;>\n field_simp [Real.exp_ne_zero]\n <;>\n ring_nf\n _ = Real.exp (x ^ 2) * (2 * x * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1))) := by\n rw [hββ]\n <;>\n ring_nf\n _ = (2 * x * Real.exp (x ^ 2)) * (Real.exp x * Real.sqrt (2 * x - 1) + Real.exp x / Real.sqrt (2 * x - 1)) := by\n ring_nf\n _ = (deriv f x) * (deriv (fun y : β => Real.exp y * Real.sqrt (2 * y - 1)) x) := by\n rw [hββ, hββ]\n <;>\n ring_nf\n <;>\n field_simp [Real.exp_ne_zero]\n <;>\n ring_nf\n rw [hββ]\n rw [hββ]\n \n have hββ : deriv (fun y : β => f y * (Real.exp y * Real.sqrt (2 * y - 1))) x = (deriv f x) * (deriv (fun y : β => Real.exp y * Real.sqrt (2 * y - 1)) x) := hββ\n simpa [hβ] using hββ\n \n have h_final : ((True) : Prop ) β (β a b : β, a < b β§ β g : β β β, (β x β Set.Ioo a b, g x β 0) β§ DifferentiableOn β g (Set.Ioo a b) β§ β x β Set.Ioo a b, deriv (fun y β¦ f y * g y) x = (deriv f x) * (deriv g x)) := by\n constructor\n Β· intro _\n exact h_main\n Β· intro h\n trivial\n \n exact h_final"} |
| {"name": "putnam_2001_b1", "proof_length": 3178, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Topology Filter Polynomial Set\n\n\n", "signature": "theorem putnam_2001_b1\n (n : β)\n (hn : n > 0) (hn' : Even n)\n (nums : Fin n β Fin n β β€)\n (colors : Fin n β Fin n β Fin 2)\n (hnums : β k l, nums k l = k * n + l + 1)\n (hcolorsrows : β k, (β l, (if (colors k l = 0) then 1 else 0)) = n / 2)\n (hcolorscols : β l, (β k, (if (colors k l = 0) then 1 else 0)) = n / 2) :\n (β k, β l, (if (colors k l = 0) then (nums k l) else 0)) = (β k, β l, (if (colors k l = 1) then (nums k l) else 0))", "src": "theorem putnam_2001_b1\n (n : β)\n (hn : n > 0) (hn' : Even n)\n (nums : Fin n β Fin n β β€)\n (colors : Fin n β Fin n β Fin 2)\n (hnums : β k l, nums k l = k * n + l + 1)\n (hcolorsrows : β k, (β l, (if (colors k l = 0) then 1 else 0)) = n / 2)\n (hcolorscols : β l, (β k, (if (colors k l = 0) then 1 else 0)) = n / 2) :\n (β k, β l, (if (colors k l = 0) then (nums k l) else 0)) = (β k, β l, (if (colors k l = 1) then (nums k l) else 0)) := by \n have hrow_sum_zero : β (k : Fin n), (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = 0 := by\n intro k\n have h1 : (β l : Fin n, (if colors k l = 0 then (1 : β€) else 0)) = n / 2 := by\n norm_cast at hcolorsrows β’\n simpa using hcolorsrows k\n have h2 : (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = 0 := by\n calc\n (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0))) - β l : Fin n, (1 : β€) := by\n rw [Finset.sum_sub_distrib]\n _ = 2 * (β l : Fin n, (if colors k l = 0 then (1 : β€) else 0)) - β l : Fin n, (1 : β€) := by\n rw [Finset.mul_sum]\n _ = 2 * (n / 2 : β€) - n := by\n rw [h1]\n simp [Finset.sum_const, Finset.card_fin]\n <;> norm_cast\n <;> simp [nsmul_eq_mul]\n <;> ring_nf\n <;> simp_all [Nat.cast_inj]\n <;> omega\n _ = 0 := by\n have h3 : (n : β€) % 2 = 0 := by\n have h4 : Even n := hn'\n rw [even_iff_two_dvd] at h4\n obtain β¨m, hmβ© := h4\n norm_cast at hm β’\n omega\n have h4 : (n : β€) / 2 * 2 = n := by\n have h5 : (n : β€) % 2 = 0 := h3\n have h6 : (n : β€) = 2 * ((n : β€) / 2) := by\n omega\n linarith\n ring_nf at *\n <;> omega\n exact h2\n \n have hcol_sum_zero : β (l : Fin n), (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = 0 := by\n intro l\n have h1 : (β k : Fin n, (if colors k l = 0 then (1 : β€) else 0)) = n / 2 := by\n norm_cast at hcolorscols β’\n simpa using hcolorscols l\n have h2 : (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = 0 := by\n calc\n (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0))) - β k : Fin n, (1 : β€) := by\n rw [Finset.sum_sub_distrib]\n _ = 2 * (β k : Fin n, (if colors k l = 0 then (1 : β€) else 0)) - β k : Fin n, (1 : β€) := by\n rw [Finset.mul_sum]\n _ = 2 * (n / 2 : β€) - n := by\n rw [h1]\n simp [Finset.sum_const, Finset.card_fin]\n <;> norm_cast\n <;> simp [nsmul_eq_mul]\n <;> ring_nf\n <;> simp_all [Nat.cast_inj]\n <;> omega\n _ = 0 := by\n have h3 : (n : β€) % 2 = 0 := by\n have h4 : Even n := hn'\n rw [even_iff_two_dvd] at h4\n obtain β¨m, hmβ© := h4\n norm_cast at hm β’\n omega\n have h4 : (n : β€) / 2 * 2 = n := by\n have h5 : (n : β€) % 2 = 0 := h3\n have h6 : (n : β€) = 2 * ((n : β€) / 2) := by\n omega\n linarith\n ring_nf at *\n <;> omega\n exact h2\n \n have hsum_diff : (β k : Fin n, β l : Fin n, (if colors k l = 0 then (nums k l : β€) else 0)) - (β k : Fin n, β l : Fin n, (if colors k l = 1 then (nums k l : β€) else 0)) = β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * (nums k l : β€) := by\n have hβ : (β k : Fin n, β l : Fin n, (if colors k l = 0 then (nums k l : β€) else 0)) - (β k : Fin n, β l : Fin n, (if colors k l = 1 then (nums k l : β€) else 0)) = β k : Fin n, β l : Fin n, ((if colors k l = 0 then (nums k l : β€) else 0) - (if colors k l = 1 then (nums k l : β€) else 0)) := by\n simp [Finset.sum_sub_distrib, Finset.sum_add_distrib]\n <;>\n simp_all [Finset.sum_sub_distrib]\n <;>\n rfl\n have hβ : β (k : Fin n) (l : Fin n), ((if colors k l = 0 then (nums k l : β€) else 0) - (if colors k l = 1 then (nums k l : β€) else 0)) = (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * (nums k l : β€) := by\n intro k l\n have hβ : colors k l = 0 β¨ colors k l = 1 := by\n have hβ : colors k l = 0 β¨ colors k l = 1 := by\n have hβ
: colors k l = 0 β¨ colors k l = 1 := by\n have : colors k l = 0 β¨ colors k l = 1 := by\n have hβ : (colors k l : β) < 2 := by\n have : (colors k l : β) < 2 := by\n simp [Fin.is_lt]\n exact this\n omega\n exact this\n exact hβ
\n exact hβ\n rcases hβ with (hβ | hβ)\n Β· \n simp [hβ]\n <;>\n (try norm_num) <;>\n (try ring_nf) <;>\n (try simp_all)\n <;>\n (try omega)\n Β· \n simp [hβ]\n <;>\n (try norm_num) <;>\n (try ring_nf) <;>\n (try simp_all)\n <;>\n (try omega)\n calc\n (β k : Fin n, β l : Fin n, (if colors k l = 0 then (nums k l : β€) else 0)) - (β k : Fin n, β l : Fin n, (if colors k l = 1 then (nums k l : β€) else 0)) = β k : Fin n, β l : Fin n, ((if colors k l = 0 then (nums k l : β€) else 0) - (if colors k l = 1 then (nums k l : β€) else 0)) := by rw [hβ]\n _ = β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * (nums k l : β€) := by\n apply Finset.sum_congr rfl\n intro k _\n apply Finset.sum_congr rfl\n intro l _\n rw [hβ k l]\n \n have hsum_split_zero : (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * (nums k l : β€)) = 0 := by\n have hβ : (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * (nums k l : β€)) = β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n + (l : β€) + 1) := by\n apply Finset.sum_congr rfl\n intro k _\n apply Finset.sum_congr rfl\n intro l _\n rw [hnums]\n <;> simp [Fin.val_mk]\n <;> norm_cast\n <;> ring_nf\n rw [hβ]\n have hβ : (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n + (l : β€) + 1)) = (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) + (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1)) := by\n calc\n (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n + (l : β€) + 1)) = β k : Fin n, β l : Fin n, ((2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n) + (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1)) := by\n apply Finset.sum_congr rfl\n intro k _\n apply Finset.sum_congr rfl\n intro l _\n ring_nf\n _ = (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) + (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1)) := by\n simp [Finset.sum_add_distrib]\n rw [hβ]\n have hβ : (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) = 0 := by\n have hβ : β (k : Fin n), (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) = 0 := by\n intro k\n have hβ
: (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = 0 := hrow_sum_zero k\n calc\n (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) = β l : Fin n, ((k : β€) * n) * (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) := by\n apply Finset.sum_congr rfl\n intro l _\n ring_nf\n _ = ((k : β€) * n) * β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) := by\n rw [Finset.mul_sum]\n _ = ((k : β€) * n) * 0 := by rw [hβ
]\n _ = 0 := by ring\n calc\n (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) = β k : Fin n, (β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((k : β€) * n)) := by simp [Finset.sum_sigma']\n _ = β k : Fin n, 0 := by\n apply Finset.sum_congr rfl\n intro k _\n rw [hβ k]\n _ = 0 := by simp\n have hβ : (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1)) = 0 := by\n have hβ
: β (l : Fin n), (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) = 0 := by\n intro l\n exact hcol_sum_zero l\n calc\n (β k : Fin n, β l : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1)) = β l : Fin n, β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1) := by\n rw [Finset.sum_comm]\n _ = β l : Fin n, ((l : β€) + 1) * (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1)) := by\n apply Finset.sum_congr rfl\n intro l _\n calc\n (β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) * ((l : β€) + 1)) = β k : Fin n, ((l : β€) + 1) * (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) := by\n apply Finset.sum_congr rfl\n intro k _\n ring_nf\n _ = ((l : β€) + 1) * β k : Fin n, (2 * (if colors k l = 0 then (1 : β€) else 0) - 1) := by\n rw [Finset.mul_sum]\n _ = β l : Fin n, ((l : β€) + 1) * 0 := by\n apply Finset.sum_congr rfl\n intro l _\n rw [hβ
l]\n _ = β l : Fin n, 0 := by\n apply Finset.sum_congr rfl\n intro l _\n ring_nf\n _ = 0 := by simp\n rw [hβ, hβ]\n <;> simp\n \n have hfinal : (β k, β l, (if (colors k l = 0) then (nums k l) else 0)) = (β k, β l, (if (colors k l = 1) then (nums k l) else 0)) := by\n have hβ : (β k : Fin n, β l : Fin n, (if colors k l = 0 then (nums k l : β€) else 0)) - (β k : Fin n, β l : Fin n, (if colors k l = 1 then (nums k l : β€) else 0)) = 0 := by\n rw [hsum_diff]\n rw [hsum_split_zero]\n have hβ : (β k : Fin n, β l : Fin n, (if colors k l = 0 then (nums k l : β€) else 0)) = (β k : Fin n, β l : Fin n, (if colors k l = 1 then (nums k l : β€) else 0)) := by\n linarith\n simpa using hβ\n \n exact hfinal"} |
| {"name": "putnam_1964_b2", "proof_length": 1754, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Set Function Filter Topology\n\n\n", "signature": "theorem putnam_1964_b2\n(S : Type*) [Fintype S] [Nonempty S]\n(P : Finset (Set S))\n(hPP : β T β P, β U β P, T β© U β β
)\n(hPS : Β¬β T : Set S, T β P β§ (β U β P, T β© U β β
))\n: (P.card = 2 ^ (Fintype.card S - 1))", "src": "theorem putnam_1964_b2\n(S : Type*) [Fintype S] [Nonempty S]\n(P : Finset (Set S))\n(hPP : β T β P, β U β P, T β© U β β
)\n(hPS : Β¬β T : Set S, T β P β§ (β U β P, T β© U β β
))\n: (P.card = 2 ^ (Fintype.card S - 1)) := by \n have h_no_empty : β (T : Set S), T β P β T.Nonempty := by\n intro T hT\n have hβ : T β© T β β
:= hPP T hT T hT\n have hβ : T β© T = T := by simp [Set.ext_iff]\n rw [hβ] at hβ\n exact Set.nonempty_iff_ne_empty.mpr hβ\n \n have h_subset_or_compl : β (A : Set S), A β P β¨ AαΆ β P := by\n intro A\n by_contra! h\n have hβ : A β P := h.1\n have hβ : AαΆ β P := h.2\n \n have hβ : β (U : Set S), U β P β§ A β© U = β
:= by\n have hβ : Β¬(A β P β§ β (U : Set S), U β P β A β© U β β
) := by\n intro hβ
\n have hβ : β (T : Set S), T β P β§ (β U β P, T β© U β β
) := by\n refine' β¨A, _β©\n constructor\n Β· exact hβ
.1\n Β· intro U hU\n have hβ := hβ
.2 U hU\n have hβ : A β© U β β
:= hβ\n have hβ : A β© U = U β© A := by\n ext x\n simp [Set.mem_inter_iff]\n <;> tauto\n have hββ : U β© A β β
:= by\n intro hββ\n apply hβ\n simp_all [Set.ext_iff]\n <;> aesop\n simpa [Set.inter_comm] using hββ\n exact hPS hβ\n by_cases hβ
: A β P\n Β· have hβ : Β¬(β (U : Set S), U β P β A β© U β β
) := by\n intro hβ\n exact hβ β¨hβ
, hββ©\n push_neg at hβ\n obtain β¨U, hU, hββ© := hβ\n refine' β¨U, hU, _β©\n have hβ : A β© U = β
:= by\n by_contra hββ\n have hββ : A β© U β β
:= hββ\n simp_all [Set.ext_iff]\n <;> aesop\n exact hβ\n Β· exfalso\n simp_all\n \n have hβ : β (V : Set S), V β P β§ AαΆ β© V = β
:= by\n have hβ
: Β¬(AαΆ β P β§ β (U : Set S), U β P β AαΆ β© U β β
) := by\n intro hβ\n have hβ : β (T : Set S), T β P β§ (β U β P, T β© U β β
) := by\n refine' β¨AαΆ, _β©\n constructor\n Β· exact hβ.1\n Β· intro U hU\n have hβ := hβ.2 U hU\n have hβ : AαΆ β© U β β
:= hβ\n have hββ : AαΆ β© U = U β© AαΆ := by\n ext x\n simp [Set.mem_inter_iff]\n <;> tauto\n have hββ : U β© AαΆ β β
:= by\n intro hββ\n apply hβ\n simp_all [Set.ext_iff]\n <;> aesop\n simpa [Set.inter_comm] using hββ\n exact hPS hβ\n by_cases hβ : AαΆ β P\n Β· have hβ : Β¬(β (U : Set S), U β P β AαΆ β© U β β
) := by\n intro hβ\n exact hβ
β¨hβ, hββ©\n push_neg at hβ\n obtain β¨V, hV, hββ© := hβ\n refine' β¨V, hV, _β©\n have hβ : AαΆ β© V = β
:= by\n by_contra hββ\n have hββ : AαΆ β© V β β
:= hββ\n simp_all [Set.ext_iff]\n <;> aesop\n exact hβ\n Β· exfalso\n simp_all\n \n obtain β¨U, hU, hU'β© := hβ\n obtain β¨V, hV, hV'β© := hβ\n \n have hβ
: U β AαΆ := by\n intro x hx\n by_contra hβ\n have hβ : x β A := by simp_all [Set.mem_compl_iff]\n have hβ : x β A β© U := Set.mem_inter hβ hx\n rw [hU'] at hβ\n simp at hβ\n <;> aesop\n have hβ : V β A := by\n intro x hx\n by_contra hβ\n have hβ : x β AαΆ := by simp_all [Set.mem_compl_iff]\n have hβ : x β AαΆ β© V := Set.mem_inter hβ hx\n rw [hV'] at hβ\n simp at hβ\n <;> aesop\n \n have hβ : U β© V = β
:= by\n apply Set.eq_empty_of_forall_not_mem\n intro x hx\n have hβ : x β U := Set.mem_of_mem_inter_left hx\n have hβ : x β V := Set.mem_of_mem_inter_right hx\n have hββ : x β AαΆ := hβ
hβ\n have hββ : x β A := hβ hβ\n simp_all [Set.mem_compl_iff]\n <;> aesop\n \n have hβ : U β© V β β
:= hPP U hU V hV\n simp_all [Set.ext_iff]\n <;> aesop\n \n have h_not_both : β (A : Set S), A β P β AαΆ β P := by\n intro A hA\n by_contra h\n have hβ : AαΆ β P := h\n have hβ : A β© AαΆ = β
:= by\n ext x\n simp [Set.mem_inter_iff]\n <;> tauto\n have hβ : A β© AαΆ β β
:= hPP A hA AαΆ hβ\n rw [hβ] at hβ\n contradiction\n \n have h_card : P.card = 2 ^ (Fintype.card S - 1) := by\n classical\n \n let Q : Finset (Set S) := (Finset.univ : Finset (Set S)) \\ P\n \n have hβ : P.card = Q.card := by\n \n have hβ : β (A : Set S), A β P β AαΆ β Q := by\n intro A hA\n have hβ : AαΆ β (Finset.univ : Finset (Set S)) := Finset.mem_univ _\n have hβ : AαΆ β P := h_not_both A hA\n simp only [Q, Finset.mem_sdiff] at *\n tauto\n have hβ : β (A : Set S), A β Q β AαΆ β P := by\n intro A hA\n have hβ : A β (Finset.univ : Finset (Set S)) := by\n simp only [Q, Finset.mem_sdiff] at hA\n tauto\n have hβ
: A β P := by\n simp only [Q, Finset.mem_sdiff] at hA\n tauto\n have hβ : A β (Finset.univ : Finset (Set S)) := by tauto\n have hβ : A β P β¨ AαΆ β P := h_subset_or_compl A\n cases hβ with\n | inl hβ =>\n exfalso\n tauto\n | inr hβ =>\n exact hβ\n \n have hβ : P.card = Q.card := by\n \n have hβ
: P.card = Q.card := by\n \n have hβ : β (A : Set S), A β P β AαΆ β Q := hβ\n have hβ : β (A : Set S), A β Q β AαΆ β P := hβ\n \n have hβ : P.card = Q.card := by\n \n apply Finset.card_bij' (fun A _ => AαΆ) (fun A _ => AαΆ)\n <;> simp_all [Set.ext_iff]\n <;>\n (try\n {\n aesop\n })\n <;>\n (try\n {\n tauto\n })\n <;>\n (try\n {\n intros\n <;>\n simp_all [Set.ext_iff]\n <;>\n tauto\n })\n <;>\n (try\n {\n intros\n <;>\n simp_all [Set.ext_iff]\n <;>\n tauto\n })\n exact hβ\n exact hβ
\n exact hβ\n \n have hβ : P.card + Q.card = 2 ^ Fintype.card S := by\n have hβ : P.card + Q.card = (Finset.univ : Finset (Set S)).card := by\n have hβ : Disjoint P Q := by\n rw [Finset.disjoint_left]\n intro A hA hA'\n simp only [Q, Finset.mem_sdiff] at hA'\n tauto\n have hβ
: P βͺ Q = (Finset.univ : Finset (Set S)) := by\n apply Finset.ext\n intro A\n simp only [Q, Finset.mem_union, Finset.mem_sdiff, Finset.mem_univ, true_and]\n <;>\n by_cases hβ : A β P <;> simp_all [h_subset_or_compl]\n <;>\n (try tauto)\n <;>\n (try\n {\n have hβ := h_subset_or_compl A\n cases hβ with\n | inl hβ => tauto\n | inr hβ =>\n have hβ : AαΆ β P := hβ\n have hββ : A β P β¨ AαΆ β P := by tauto\n tauto\n })\n have hβ : P.card + Q.card = (P βͺ Q).card := by\n rw [β Finset.card_union_add_card_inter P Q]\n have hβ : P β© Q = β
:= Finset.disjoint_iff_inter_eq_empty.mp hβ\n rw [hβ]\n simp\n rw [hβ
] at hβ\n exact hβ\n have hβ : (Finset.univ : Finset (Set S)).card = 2 ^ Fintype.card S := by\n simp [Fintype.card_fun]\n <;>\n simp_all [Fintype.card_fun]\n <;>\n ring_nf\n <;>\n simp_all [Fintype.card_fun]\n <;>\n norm_num\n <;>\n aesop\n linarith\n \n have hβ : P.card * 2 = 2 ^ Fintype.card S := by\n have hβ : P.card + Q.card = 2 ^ Fintype.card S := hβ\n have hβ
: P.card = Q.card := hβ\n linarith\n \n have hβ : Fintype.card S β₯ 1 := by\n have hβ
: Nonempty S := inferInstance\n have hβ : 0 < Fintype.card S := by\n apply Fintype.card_pos_iff.mpr\n exact β¨Classical.choice hβ
β©\n omega\n have hβ
: P.card = 2 ^ (Fintype.card S - 1) := by\n have hβ : P.card * 2 = 2 ^ Fintype.card S := hβ\n have hβ : Fintype.card S β₯ 1 := hβ\n have hβ : 2 ^ (Fintype.card S - 1) * 2 = 2 ^ Fintype.card S := by\n have hβ : Fintype.card S - 1 + 1 = Fintype.card S := by\n have hββ : Fintype.card S β₯ 1 := hβ\n omega\n calc\n 2 ^ (Fintype.card S - 1) * 2 = 2 ^ (Fintype.card S - 1) * 2 ^ 1 := by norm_num\n _ = 2 ^ ((Fintype.card S - 1) + 1) := by\n rw [β pow_add]\n _ = 2 ^ Fintype.card S := by\n rw [hβ]\n <;> simp [add_comm]\n have hβ : P.card = 2 ^ (Fintype.card S - 1) := by\n have hββ : P.card * 2 = 2 ^ Fintype.card S := hβ\n have hββ : 2 ^ (Fintype.card S - 1) * 2 = 2 ^ Fintype.card S := hβ\n have hββ : P.card = 2 ^ (Fintype.card S - 1) := by\n nlinarith\n exact hββ\n exact hβ\n exact hβ
\n \n exact h_card"} |
| {"name": "putnam_2007_a1", "proof_length": 5463, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\n\n\n\n", "signature": "theorem putnam_2007_a1\n (P : (β β β) β Prop)\n (P_def : β f, P f β β x y, f x = y β§ f y = x β§ deriv f x * deriv f y = 1)\n (Ξ± : β) :\n P (fun t β¦ Ξ± * t ^ 2 + Ξ± * t + 1 / 24) β Ξ± β (({2 / 3, 3 / 2, (13 + β601) / 12, (13 - β601) / 12}) : Set β )", "src": "theorem putnam_2007_a1\n (P : (β β β) β Prop)\n (P_def : β f, P f β β x y, f x = y β§ f y = x β§ deriv f x * deriv f y = 1)\n (Ξ± : β) :\n P (fun t β¦ Ξ± * t ^ 2 + Ξ± * t + 1 / 24) β Ξ± β (({2 / 3, 3 / 2, (13 + β601) / 12, (13 - β601) / 12}) : Set β ) :=\n by \n have h_main : P (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) β Ξ± = 2 / 3 β¨ Ξ± = 3 / 2 β¨ Ξ± = (13 + Real.sqrt 601) / 12 β¨ Ξ± = (13 - Real.sqrt 601) / 12 := by\n have hβ : P (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) β β (x y : β), (Ξ± * x ^ 2 + Ξ± * x + 1 / 24 : β) = y β§ (Ξ± * y ^ 2 + Ξ± * y + 1 / 24 : β) = x β§ (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := by\n have hβ : P (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) β β x y, (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) x = y β§ (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) y = x β§ deriv (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) x * deriv (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) y = 1 := by\n rw [P_def]\n <;> simp\n rw [hβ]\n have hβ : β (x : β), deriv (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) x = 2 * Ξ± * x + Ξ± := by\n intro x\n \n have hβ : deriv (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) x = deriv (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) x := rfl\n rw [hβ]\n \n have hβ
: HasDerivAt (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) (2 * Ξ± * x + Ξ±) x := by\n \n have hβ : HasDerivAt (fun t : β => Ξ± * t ^ 2) (2 * Ξ± * x) x := by\n \n have hβ : HasDerivAt (fun t : β => t ^ 2) (2 * x) x := by\n simpa using (hasDerivAt_pow 2 x)\n have hβ : HasDerivAt (fun t : β => Ξ± * t ^ 2) (Ξ± * (2 * x)) x := by\n convert HasDerivAt.const_mul Ξ± hβ using 1 <;> ring\n convert hβ using 1 <;> ring\n have hβ : HasDerivAt (fun t : β => Ξ± * t) Ξ± x := by\n \n have hββ : HasDerivAt (fun t : β => t) 1 x := by\n simpa using hasDerivAt_id x\n have hββ : HasDerivAt (fun t : β => Ξ± * t) (Ξ± * 1) x := by\n convert HasDerivAt.const_mul Ξ± hββ using 1 <;> ring\n convert hββ using 1 <;> ring\n have hββ : HasDerivAt (fun t : β => (1 : β) / 24) 0 x := by\n \n simpa using hasDerivAt_const x (1 / 24 : β)\n \n have hββ : HasDerivAt (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) (2 * Ξ± * x + Ξ±) x := by\n convert hβ.add hβ |>.add hββ using 1 <;> ring\n exact hββ\n \n have hββ : deriv (fun t : β => Ξ± * t ^ 2 + Ξ± * t + 1 / 24) x = 2 * Ξ± * x + Ξ± := by\n apply HasDerivAt.deriv\n exact hβ
\n rw [hββ]\n \n constructor\n Β· intro h\n obtain β¨x, y, hββ
, hββ, hβββ© := h\n refine' β¨x, y, _, _, _β© <;>\n (try simp_all [hβ]) <;>\n (try ring_nf at * <;> simp_all) <;>\n (try nlinarith)\n Β· intro h\n obtain β¨x, y, hββ
, hββ, hβββ© := h\n refine' β¨x, y, _, _, _β© <;>\n (try simp_all [hβ]) <;>\n (try ring_nf at * <;> simp_all) <;>\n (try nlinarith)\n rw [hβ]\n constructor\n Β· \n intro h\n have hβ : β (x y : β), (Ξ± * x ^ 2 + Ξ± * x + 1 / 24 : β) = y β§ (Ξ± * y ^ 2 + Ξ± * y + 1 / 24 : β) = x β§ (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := h\n obtain β¨x, y, hβ, hβ, hβ
β© := hβ\n have hβ : (x - y) * (Ξ± * (x + y + 1) + 1) = 0 := by\n have hβ : Ξ± * x ^ 2 + Ξ± * x + 1 / 24 = y := hβ\n have hβ : Ξ± * y ^ 2 + Ξ± * y + 1 / 24 = x := hβ\n have hβ : Ξ± * (x ^ 2 - y ^ 2) + Ξ± * (x - y) = (y - x) := by\n linarith\n have hββ : Ξ± * (x - y) * (x + y) + Ξ± * (x - y) = -(x - y) := by\n linarith\n have hββ : (x - y) * (Ξ± * (x + y) + Ξ± + 1) = 0 := by\n linarith\n have hββ : (x - y) * (Ξ± * (x + y + 1) + 1) = 0 := by\n linarith\n exact hββ\n by_cases hβ : x = y\n Β· \n have hβ : Ξ± * x ^ 2 + Ξ± * x + 1 / 24 = x := by\n linarith\n have hβ : (2 * Ξ± * x + Ξ±) * (2 * Ξ± * x + Ξ±) = 1 := by\n have hββ : (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := hβ
\n have hββ : (2 * Ξ± * x + Ξ±) * (2 * Ξ± * x + Ξ±) = 1 := by\n simpa [hβ] using hββ\n exact hββ\n have hββ : (2 * Ξ± * x + Ξ±) = 1 β¨ (2 * Ξ± * x + Ξ±) = -1 := by\n have hββ : (2 * Ξ± * x + Ξ±) ^ 2 = 1 := by\n nlinarith\n have hββ : (2 * Ξ± * x + Ξ±) = 1 β¨ (2 * Ξ± * x + Ξ±) = -1 := by\n apply or_iff_not_imp_left.mpr\n intro hββ\n apply eq_of_sub_eq_zero\n apply mul_left_cancelβ (sub_ne_zero.mpr hββ)\n nlinarith\n exact hββ\n cases hββ with\n | inl hββ =>\n \n have hββ : 2 * Ξ± * x + Ξ± = 1 := hββ\n have hββ : Ξ± β 0 := by\n by_contra hββ\n rw [hββ] at hββ\n norm_num at hββ\n <;> linarith\n have hββ : x = (1 - Ξ±) / (2 * Ξ±) := by\n have hββ : 2 * Ξ± * x + Ξ± = 1 := hββ\n field_simp at hββ β’\n nlinarith\n have hββ : Ξ± * x ^ 2 + (Ξ± - 1) * x + 1 / 24 = 0 := by\n have hββ
: Ξ± * x ^ 2 + Ξ± * x + 1 / 24 = x := hβ\n linarith\n rw [hββ] at hββ\n have hββ
: Ξ± * ((1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := hββ\n have hββ : 6 * Ξ± ^ 2 - 13 * Ξ± + 6 = 0 := by\n field_simp at hββ
\n ring_nf at hββ
β’\n nlinarith [sq_pos_of_ne_zero hββ]\n have hββ : Ξ± = 2 / 3 β¨ Ξ± = 3 / 2 := by\n have hββ : (Ξ± - 2 / 3) * (Ξ± - 3 / 2) = 0 := by\n nlinarith\n have hββ : Ξ± - 2 / 3 = 0 β¨ Ξ± - 3 / 2 = 0 := by\n apply eq_zero_or_eq_zero_of_mul_eq_zero hββ\n cases hββ with\n | inl hββ =>\n have hββ : Ξ± = 2 / 3 := by linarith\n exact Or.inl hββ\n | inr hββ =>\n have hββ : Ξ± = 3 / 2 := by linarith\n exact Or.inr hββ\n cases hββ with\n | inl hββ =>\n exact Or.inl hββ\n | inr hββ =>\n exact Or.inr (Or.inl hββ)\n | inr hββ =>\n \n have hββ : 2 * Ξ± * x + Ξ± = -1 := hββ\n have hββ : Ξ± β 0 := by\n by_contra hββ\n rw [hββ] at hββ\n norm_num at hββ\n <;> linarith\n have hββ : x = (-1 - Ξ±) / (2 * Ξ±) := by\n have hββ : 2 * Ξ± * x + Ξ± = -1 := hββ\n field_simp at hββ β’\n nlinarith\n have hββ : Ξ± * x ^ 2 + (Ξ± - 1) * x + 1 / 24 = 0 := by\n have hββ
: Ξ± * x ^ 2 + Ξ± * x + 1 / 24 = x := hβ\n linarith\n rw [hββ] at hββ\n have hββ
: Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := hββ\n have hββ : 6 * Ξ± ^ 2 - 13 * Ξ± - 18 = 0 := by\n field_simp at hββ
\n ring_nf at hββ
β’\n nlinarith [sq_pos_of_ne_zero hββ]\n have hββ : Ξ± = (13 + Real.sqrt 601) / 12 β¨ Ξ± = (13 - Real.sqrt 601) / 12 := by\n have hββ : Ξ± = (13 + Real.sqrt 601) / 12 β¨ Ξ± = (13 - Real.sqrt 601) / 12 := by\n have hββ : Ξ± = (13 + Real.sqrt 601) / 12 β¨ Ξ± = (13 - Real.sqrt 601) / 12 := by\n have hββ : (Ξ± - (13 + Real.sqrt 601) / 12) * (Ξ± - (13 - Real.sqrt 601) / 12) = 0 := by\n have hββ : Real.sqrt 601 β₯ 0 := Real.sqrt_nonneg _\n nlinarith [Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n have hββ : Ξ± - (13 + Real.sqrt 601) / 12 = 0 β¨ Ξ± - (13 - Real.sqrt 601) / 12 = 0 := by\n apply eq_zero_or_eq_zero_of_mul_eq_zero hββ\n cases hββ with\n | inl hββ =>\n have hββ : Ξ± = (13 + Real.sqrt 601) / 12 := by linarith\n exact Or.inl hββ\n | inr hββ =>\n have hββ : Ξ± = (13 - Real.sqrt 601) / 12 := by linarith\n exact Or.inr hββ\n exact hββ\n exact hββ\n cases hββ with\n | inl hββ =>\n exact Or.inr (Or.inr (Or.inl hββ))\n | inr hββ =>\n exact Or.inr (Or.inr (Or.inr hββ))\n Β· \n have hβ : Ξ± * (x + y + 1) + 1 = 0 := by\n apply mul_left_cancelβ (sub_ne_zero.mpr hβ)\n nlinarith\n have hβ : (2 * Ξ± * x + Ξ±) + (2 * Ξ± * y + Ξ±) = -2 := by\n have hββ : Ξ± * (x + y + 1) + 1 = 0 := hβ\n have hββ : Ξ± * (x + y + 1) = -1 := by linarith\n have hββ : 2 * Ξ± * (x + y + 1) = -2 := by linarith\n have hββ : 2 * Ξ± * x + 2 * Ξ± * y + 2 * Ξ± = -2 := by linarith\n linarith\n have hββ : (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := hβ
\n have hββ : (2 * Ξ± * x + Ξ±) = -1 := by\n have hββ : (2 * Ξ± * x + Ξ±) + (2 * Ξ± * y + Ξ±) = -2 := hβ\n have hββ : (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := hββ\n have hββ : (2 * Ξ± * x + Ξ±) = -1 := by\n nlinarith [sq_nonneg ((2 * Ξ± * x + Ξ±) - (2 * Ξ± * y + Ξ±))]\n exact hββ\n have hββ : (2 * Ξ± * y + Ξ±) = -1 := by\n have hββ : (2 * Ξ± * x + Ξ±) + (2 * Ξ± * y + Ξ±) = -2 := hβ\n have hββ : (2 * Ξ± * x + Ξ±) = -1 := hββ\n linarith\n have hββ : 2 * Ξ± * x + Ξ± = -1 := hββ\n have hββ : 2 * Ξ± * y + Ξ± = -1 := hββ\n have hββ
: x = y := by\n have hββ : 2 * Ξ± * x + Ξ± = 2 * Ξ± * y + Ξ± := by linarith\n have hββ : 2 * Ξ± * x = 2 * Ξ± * y := by linarith\n by_cases hββ : Ξ± = 0\n Β· have hββ : Ξ± = 0 := hββ\n rw [hββ] at hββ\n norm_num at hββ\n <;> linarith\n Β· have hββ : Ξ± β 0 := hββ\n have hββ : x = y := by\n apply mul_left_cancelβ (show (2 : β) * Ξ± β 0 by\n intro hββ\n apply hββ\n linarith)\n linarith\n exact hββ\n contradiction\n Β· \n intro h\n have hβ : Ξ± = 2 / 3 β¨ Ξ± = 3 / 2 β¨ Ξ± = (13 + Real.sqrt 601) / 12 β¨ Ξ± = (13 - Real.sqrt 601) / 12 := h\n cases hβ with\n | inl hβ =>\n \n have hβ : Ξ± = 2 / 3 := hβ\n have hβ : β (x y : β), (Ξ± * x ^ 2 + Ξ± * x + 1 / 24 : β) = y β§ (Ξ± * y ^ 2 + Ξ± * y + 1 / 24 : β) = x β§ (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := by\n use 1 / 4, 1 / 4\n rw [hβ]\n norm_num\n <;>\n (try ring_nf) <;>\n (try norm_num) <;>\n (try linarith)\n exact hβ\n | inr hβ =>\n cases hβ with\n | inl hβ =>\n \n have hβ : Ξ± = 3 / 2 := hβ\n have hβ : β (x y : β), (Ξ± * x ^ 2 + Ξ± * x + 1 / 24 : β) = y β§ (Ξ± * y ^ 2 + Ξ± * y + 1 / 24 : β) = x β§ (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := by\n use -1 / 6, -1 / 6\n rw [hβ]\n norm_num\n <;>\n (try ring_nf) <;>\n (try norm_num) <;>\n (try linarith)\n exact hβ\n | inr hβ =>\n cases hβ with\n | inl hβ =>\n \n have hβ : Ξ± = (13 + Real.sqrt 601) / 12 := hβ\n have hβ : β (x y : β), (Ξ± * x ^ 2 + Ξ± * x + 1 / 24 : β) = y β§ (Ξ± * y ^ 2 + Ξ± * y + 1 / 24 : β) = x β§ (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := by\n have hβ
: Ξ± β 0 := by\n rw [hβ]\n nlinarith [Real.sqrt_nonneg 601, Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n use (-1 - Ξ±) / (2 * Ξ±), (-1 - Ξ±) / (2 * Ξ±)\n constructor\n Β· \n have hβ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hβ : Ξ± β 0 := hβ
\n have hβ : 6 * Ξ± ^ 2 - 13 * Ξ± - 18 = 0 := by\n rw [hβ]\n nlinarith [Real.sq_sqrt (show (0 : β) β€ 601 by norm_num)]\n have hβ : (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 = 0 := by\n have hββ : 6 * Ξ± ^ 2 = 13 * Ξ± + 18 := by linarith\n field_simp [hβ]\n nlinarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 := by\n field_simp [hβ]\n <;> ring_nf\n <;> field_simp [hβ]\n <;> ring_nf\n rw [hββ]\n linarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := hββ\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n linarith\n exact hββ\n exact hββ\n exact hβ\n Β· constructor\n Β· \n have hβ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hβ : Ξ± β 0 := hβ
\n have hβ : 6 * Ξ± ^ 2 - 13 * Ξ± - 18 = 0 := by\n rw [hβ]\n nlinarith [Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n have hβ : (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 = 0 := by\n have hββ : 6 * Ξ± ^ 2 = 13 * Ξ± + 18 := by linarith\n field_simp [hβ]\n nlinarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 := by\n field_simp [hβ]\n <;> ring_nf\n <;> field_simp [hβ]\n <;> ring_nf\n rw [hββ]\n linarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := hββ\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n linarith\n exact hββ\n exact hββ\n linarith\n Β· \n have hβ : (2 * Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + Ξ±) * (2 * Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + Ξ±) = 1 := by\n have hβ : Ξ± β 0 := hβ
\n field_simp [hβ]\n <;> ring_nf\n <;> nlinarith [Real.sqrt_nonneg 601, Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n exact hβ\n exact hβ\n | inr hβ =>\n \n have hβ : Ξ± = (13 - Real.sqrt 601) / 12 := hβ\n have hβ : β (x y : β), (Ξ± * x ^ 2 + Ξ± * x + 1 / 24 : β) = y β§ (Ξ± * y ^ 2 + Ξ± * y + 1 / 24 : β) = x β§ (2 * Ξ± * x + Ξ±) * (2 * Ξ± * y + Ξ±) = 1 := by\n have hβ
: Ξ± β 0 := by\n rw [hβ]\n nlinarith [Real.sqrt_nonneg 601, Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n use (-1 - Ξ±) / (2 * Ξ±), (-1 - Ξ±) / (2 * Ξ±)\n constructor\n Β· \n have hβ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hβ : Ξ± β 0 := hβ
\n have hβ : 6 * Ξ± ^ 2 - 13 * Ξ± - 18 = 0 := by\n rw [hβ]\n nlinarith [Real.sq_sqrt (show (0 : β) β€ 601 by norm_num)]\n have hβ : (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 = 0 := by\n have hββ : 6 * Ξ± ^ 2 = 13 * Ξ± + 18 := by linarith\n field_simp [hβ]\n nlinarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 := by\n field_simp [hβ]\n <;> ring_nf\n <;> field_simp [hβ]\n <;> ring_nf\n rw [hββ]\n linarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := hββ\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n linarith\n exact hββ\n exact hββ\n exact hβ\n Β· constructor\n Β· \n have hβ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hβ : Ξ± β 0 := hβ
\n have hβ : 6 * Ξ± ^ 2 - 13 * Ξ± - 18 = 0 := by\n rw [hβ]\n nlinarith [Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n have hβ : (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 = 0 := by\n have hββ : 6 * Ξ± ^ 2 = 13 * Ξ± + 18 := by linarith\n field_simp [hβ]\n nlinarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (3 + 2 * Ξ± - Ξ± ^ 2) / (4 * Ξ±) + 1 / 24 := by\n field_simp [hβ]\n <;> ring_nf\n <;> field_simp [hβ]\n <;> ring_nf\n rw [hββ]\n linarith\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + (Ξ± - 1) * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = 0 := hββ\n have hββ : (Ξ± : β) * ((-1 - Ξ±) / (2 * Ξ±)) ^ 2 + Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + 1 / 24 = (-1 - Ξ±) / (2 * Ξ±) := by\n linarith\n exact hββ\n exact hββ\n linarith\n Β· \n have hβ : (2 * Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + Ξ±) * (2 * Ξ± * ((-1 - Ξ±) / (2 * Ξ±)) + Ξ±) = 1 := by\n have hβ : Ξ± β 0 := hβ
\n field_simp [hβ]\n <;> ring_nf\n <;> nlinarith [Real.sqrt_nonneg 601, Real.sq_sqrt (show 0 β€ 601 by norm_num)]\n exact hβ\n exact hβ\n \n have h_final : (Ξ± = 2 / 3 β¨ Ξ± = 3 / 2 β¨ Ξ± = (13 + Real.sqrt 601) / 12 β¨ Ξ± = (13 - Real.sqrt 601) / 12) β Ξ± β (({2 / 3, 3 / 2, (13 + β601) / 12, (13 - β601) / 12}) : Set β) := by\n constructor\n Β· \n intro h\n simp only [Set.mem_insert_iff, Set.mem_singleton_iff]\n tauto\n Β· \n intro h\n simp only [Set.mem_insert_iff, Set.mem_singleton_iff] at h\n tauto\n \n have h_result : P (fun t β¦ Ξ± * t ^ 2 + Ξ± * t + 1 / 24) β Ξ± β (({2 / 3, 3 / 2, (13 + β601) / 12, (13 - β601) / 12}) : Set β) := by\n rw [h_main]\n rw [h_final]\n <;>\n simp_all\n <;>\n tauto\n \n exact h_result"} |
| {"name": "putnam_1970_b5", "proof_length": 2134, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Metric Set EuclideanGeometry Filter Topology\n\n\n", "signature": "theorem putnam_1970_b5\n(ramp : β€ β (β β β))\n(ramp_def : ramp = fun (n : β€) => (fun (x : β) => if x β€ -n then (-n : β) else (if -n < x β§ x β€ n then x else (n : β))))\n(F : β β β)\n: Continuous F β (β n : β, Continuous ((ramp n) β F))", "src": "theorem putnam_1970_b5\n(ramp : β€ β (β β β))\n(ramp_def : ramp = fun (n : β€) => (fun (x : β) => if x β€ -n then (-n : β) else (if -n < x β§ x β€ n then x else (n : β))))\n(F : β β β)\n: Continuous F β (β n : β, Continuous ((ramp n) β F)) := by \n have h_ramp_def : β (n : β€) (x : β), ramp n x = if x β€ -n then (-n : β) else (if -n < x β§ x β€ n then x else (n : β)) := by\n intro n x\n rw [ramp_def]\n <;> simp [n]\n <;> aesop\n \n have h_imp : Continuous F β (β n : β, Continuous ((ramp n) β F)) := by\n intro hF\n intro n\n have hβ : Continuous (ramp n) := by\n have hβ : Continuous (fun x : β => min (max x (-(n : β))) (n : β)) := by\n continuity\n have hβ : (ramp n) = (fun x : β => min (max x (-(n : β))) (n : β)) := by\n funext x\n have hβ : ramp n x = if x β€ (-(n : β)) then (-(n : β)) else (if (-(n : β) : β) < x β§ x β€ (n : β) then x else (n : β)) := by\n have hβ
:= h_ramp_def (n : β€) x\n simp [Int.cast_neg, Int.cast_ofNat] at hβ
β’\n <;>\n (try norm_num at hβ
β’) <;>\n (try ring_nf at hβ
β’) <;>\n (try simp_all) <;>\n (try linarith)\n <;>\n (try\n {\n split_ifs at hβ
β’ <;>\n simp_all [Int.cast_neg, Int.cast_ofNat] <;>\n norm_num at * <;>\n (try linarith)\n })\n rw [hβ]\n split_ifs <;>\n (try {\n simp_all [max_eq_left, max_eq_right, min_eq_left, min_eq_right, le_of_lt]\n <;>\n (try { nlinarith }) <;>\n (try { linarith })\n }) <;>\n (try {\n cases' le_total x (n : β) with hβ hβ <;>\n simp_all [max_eq_left, max_eq_right, min_eq_left, min_eq_right, le_of_lt] <;>\n (try { nlinarith }) <;>\n (try { linarith })\n })\n rw [hβ]\n exact hβ\n \n exact hβ.comp hF\n \n have h_conv : (β n : β, Continuous ((ramp n) β F)) β Continuous F := by\n intro h\n have hβ : Continuous F := by\n have hβ : β (xβ : β), ContinuousAt F xβ := by\n intro xβ\n \n have hβ : β (Ξ΅ : β), Ξ΅ > 0 β (β (Ξ΄ : β), Ξ΄ > 0 β§ β (x : β), |x - xβ| < Ξ΄ β |F x - F xβ| < Ξ΅) := by\n intro Ξ΅ Ξ΅pos\n \n have hβ : β (n : β), (n : β) > |F xβ| + Ξ΅ := by\n obtain β¨n, hnβ© := exists_nat_gt (|F xβ| + Ξ΅)\n refine' β¨n, _β©\n exact_mod_cast hn\n obtain β¨n, hnβ© := hβ\n have hβ
: (n : β) > |F xβ| + Ξ΅ := hn\n have hβ : Continuous ((ramp n) β F) := h n\n have hβ : ContinuousAt ((ramp n) β F) xβ := hβ.continuousAt\n \n have hβ : β (Ξ΅ : β), Ξ΅ > 0 β (β (Ξ΄ : β), Ξ΄ > 0 β§ β (x : β), |x - xβ| < Ξ΄ β |(ramp n β F) x - (ramp n β F) xβ| < Ξ΅) := by\n intro Ξ΅ Ξ΅pos\n have hβ : ContinuousAt ((ramp n) β F) xβ := hβ\n exact Metric.continuousAt_iff.mp hβ Ξ΅ Ξ΅pos\n have hβ : β (Ξ΄ : β), Ξ΄ > 0 β§ β (x : β), |x - xβ| < Ξ΄ β |(ramp n β F) x - (ramp n β F) xβ| < Ξ΅ := hβ Ξ΅ Ξ΅pos\n obtain β¨Ξ΄, Ξ΄pos, hΞ΄β© := hβ\n use Ξ΄\n constructor\n Β· exact Ξ΄pos\n Β· intro x hx\n have hββ : |(ramp n β F) x - (ramp n β F) xβ| < Ξ΅ := hΞ΄ x hx\n have hββ : (ramp n β F) x = ramp n (F x) := rfl\n have hββ : (ramp n β F) xβ = ramp n (F xβ) := rfl\n rw [hββ, hββ] at hββ\n \n have hββ : ramp n (F xβ) = F xβ := by\n have hββ : (F xβ : β) β€ (n : β) := by\n have hββ
: |F xβ| + Ξ΅ < (n : β) := by linarith\n have hββ : |F xβ| < (n : β) := by linarith\n have hββ : F xβ β€ |F xβ| := by\n cases' abs_cases (F xβ) with hββ hββ <;> linarith\n linarith\n have hββ
: (F xβ : β) > (-(n : β)) := by\n have hββ : |F xβ| + Ξ΅ < (n : β) := by linarith\n have hββ : |F xβ| < (n : β) := by linarith\n have hββ : - (n : β) < F xβ := by\n cases' abs_cases (F xβ) with hββ hββ <;> linarith\n linarith\n have hββ : (F xβ : β) > (-(n : β)) β§ (F xβ : β) β€ (n : β) := β¨hββ
, hβββ©\n have hββ : ramp n (F xβ) = (F xβ : β) := by\n have hββ : ramp n (F xβ) = if (F xβ : β) β€ (-(n : β)) then (-(n : β)) else (if (-(n : β)) < (F xβ : β) β§ (F xβ : β) β€ (n : β) then (F xβ : β) else (n : β)) := by\n rw [h_ramp_def]\n <;> simp [Int.cast_neg, Int.cast_ofNat]\n <;> norm_num\n <;>\n (try\n {\n ring_nf\n <;>\n norm_cast\n })\n <;>\n (try\n {\n simp_all [Int.cast_neg, Int.cast_ofNat]\n <;>\n norm_num\n <;>\n linarith\n })\n rw [hββ]\n have hββ : Β¬((F xβ : β) β€ (-(n : β))) := by\n intro hββ\n have hββ : (F xβ : β) β€ (-(n : β)) := hββ\n have hββ : (-(n : β)) < (F xβ : β) := by\n have hββ : |F xβ| + Ξ΅ < (n : β) := by linarith\n have hββ : |F xβ| < (n : β) := by linarith\n cases' abs_cases (F xβ) with hββ
hββ
<;> linarith\n linarith\n have hββ : (-(n : β)) < (F xβ : β) β§ (F xβ : β) β€ (n : β) := hββ\n split_ifs at * <;> simp_all [hββ] <;>\n (try { contradiction }) <;>\n (try { linarith })\n rw [hββ]\n have hββ : ramp n (F x) = F x := by\n by_contra hββ
\n have hββ : ramp n (F x) β F x := hββ
\n have hββ : ramp n (F x) = (-(n : β)) β¨ ramp n (F x) = (n : β) := by\n have hββ : ramp n (F x) = if (F x : β) β€ (-(n : β)) then (-(n : β)) else (if (-(n : β)) < (F x : β) β§ (F x : β) β€ (n : β) then (F x : β) else (n : β)) := by\n rw [h_ramp_def]\n <;> simp [Int.cast_neg, Int.cast_ofNat]\n <;> norm_num\n <;>\n (try\n {\n ring_nf\n <;>\n norm_cast\n })\n <;>\n (try\n {\n simp_all [Int.cast_neg, Int.cast_ofNat]\n <;>\n norm_num\n <;>\n linarith\n })\n rw [hββ] at *\n split_ifs at * <;>\n (try { simp_all }) <;>\n (try {\n left\n <;>\n linarith\n }) <;>\n (try {\n right\n <;>\n linarith\n }) <;>\n (try {\n exfalso\n apply hββ\n <;>\n simp_all\n })\n cases hββ with\n | inl hββ =>\n have hββ : ramp n (F x) = (-(n : β)) := hββ\n have hββ : |(ramp n (F x) : β) - (ramp n (F xβ) : β)| < Ξ΅ := by simpa [hββ] using hββ\n have hββ : |(-(n : β) : β) - (F xβ : β)| < Ξ΅ := by simpa [hββ, hββ] using hββ\n have hββ : (n : β) > |F xβ| + Ξ΅ := by exact_mod_cast hn\n have hββ : |(-(n : β) : β) - (F xβ : β)| β₯ (n : β) - |F xβ| := by\n cases' abs_cases (F xβ) with hββ hββ <;>\n cases' abs_cases (-(n : β) - F xβ) with hββ hββ <;>\n linarith\n have hββ : (n : β) - |F xβ| > Ξ΅ := by linarith\n linarith\n | inr hββ =>\n have hββ : ramp n (F x) = (n : β) := hββ\n have hββ : |(ramp n (F x) : β) - (ramp n (F xβ) : β)| < Ξ΅ := by simpa [hββ] using hββ\n have hββ : |(n : β) - (F xβ : β)| < Ξ΅ := by simpa [hββ, hββ] using hββ\n have hββ : (n : β) > |F xβ| + Ξ΅ := by exact_mod_cast hn\n have hββ : |(n : β) - (F xβ : β)| β₯ (n : β) - |F xβ| := by\n cases' abs_cases (F xβ) with hββ hββ <;>\n cases' abs_cases ((n : β) - F xβ) with hββ hββ <;>\n linarith\n have hββ : (n : β) - |F xβ| > Ξ΅ := by linarith\n linarith\n have hββ
: |F x - F xβ| < Ξ΅ := by\n have hββ : ramp n (F x) = F x := hββ\n have hββ : ramp n (F xβ) = F xβ := hββ\n have hββ : |(ramp n (F x) : β) - (ramp n (F xβ) : β)| < Ξ΅ := by simpa [hββ, hββ] using hββ\n simpa [hββ, hββ] using hββ\n exact hββ
\n <;>\n simp_all [abs_lt]\n <;>\n linarith\n \n have hβ : ContinuousAt F xβ := by\n rw [Metric.continuousAt_iff]\n intro Ξ΅ Ξ΅pos\n obtain β¨Ξ΄, Ξ΄pos, hΞ΄β© := hβ Ξ΅ Ξ΅pos\n refine' β¨Ξ΄, Ξ΄pos, _β©\n intro x hx\n have hβ
: |F x - F xβ| < Ξ΅ := hΞ΄ x hx\n exact hβ
\n exact hβ\n \n exact continuous_iff_continuousAt.mpr hβ\n exact hβ\n \n constructor\n Β· intro h\n exact h_imp h\n Β· intro h\n exact h_conv h"} |
| {"name": "putnam_1968_a1", "proof_length": 1084, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\n\n", "signature": "theorem putnam_1968_a1\n: 22/7 - Real.pi = β« x in (0)..1, x^4 * (1 - x)^4 / (1 + x^2)", "src": "theorem putnam_1968_a1\n: 22/7 - Real.pi = β« x in (0)..1, x^4 * (1 - x)^4 / (1 + x^2) := by \n have h_main : (β« x in (0)..1, x^4 * (1 - x)^4 / (1 + x^2)) = 22/7 - Real.pi := by\n have hβ : (β« x in (0)..1, x^4 * (1 - x)^4 / (1 + x^2)) = (β« x in (0)..1, (x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β) - 4 / (1 + x^2)) := by\n have hββ : β (x : β), x^4 * (1 - x)^4 / (1 + x^2) = (x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β) - 4 / (1 + x^2) := by\n intro x\n have hββ : (1 + x^2 : β) β 0 := by nlinarith\n have hββ : x^4 * (1 - x)^4 = (x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β) * (1 + x^2) - 4 := by\n ring_nf\n <;>\n nlinarith [sq_nonneg (x ^ 2), sq_nonneg (x ^ 3), sq_nonneg (x - 1), sq_nonneg (x + 1)]\n have hββ : x^4 * (1 - x)^4 / (1 + x^2) = ((x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β) * (1 + x^2) - 4) / (1 + x^2) := by\n rw [hββ]\n rw [hββ]\n field_simp [hββ]\n <;> ring_nf\n <;> field_simp [hββ]\n <;> ring_nf\n \n congr\n ext x\n rw [hββ x]\n rw [hβ]\n \n have hβ : (β« x in (0)..1, (x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β) - 4 / (1 + x^2)) = (β« x in (0)..1, (x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β)) - (β« x in (0)..1, (4 : β) / (1 + x^2)) := by\n apply intervalIntegral.integral_sub\n Β· \n apply Continuous.intervalIntegrable\n continuity\n Β· \n apply Continuous.intervalIntegrable\n \n have hβ : Continuous (fun x : β => (4 : β) / (1 + x ^ 2)) := by\n apply Continuous.div\n Β· exact continuous_const\n Β· exact Continuous.add continuous_const (continuous_pow 2)\n Β· intro x\n have hβ : (1 + x ^ 2 : β) β 0 := by nlinarith\n exact hβ\n exact hβ\n rw [hβ]\n \n have hβ : (β« x in (0)..1, (x^6 - 4*x^5 + 5*x^4 - 4*x^2 + 4 : β)) = (22 / 7 : β) := by\n norm_num [integral_id, mul_comm]\n <;>\n ring_nf\n <;>\n norm_num\n <;>\n linarith [Real.pi_pos]\n \n have hβ : (β« x in (0)..1, (4 : β) / (1 + x^2)) = Real.pi := by\n have hββ : (β« x in (0)..1, (4 : β) / (1 + x ^ 2)) = 4 * (β« x in (0)..1, (1 : β) / (1 + x ^ 2)) := by\n \n have hββ : (β« x in (0)..1, (4 : β) / (1 + x ^ 2)) = (β« x in (0)..1, 4 * (1 : β) / (1 + x ^ 2)) := by\n congr\n ext x\n <;> ring_nf\n rw [hββ]\n have hββ : (β« x in (0)..1, 4 * (1 : β) / (1 + x ^ 2)) = 4 * (β« x in (0)..1, (1 : β) / (1 + x ^ 2)) := by\n \n simp [intervalIntegral.integral_comp_mul_left (fun x => (1 : β) / (1 + x ^ 2))]\n <;>\n norm_num\n <;>\n field_simp\n <;>\n ring_nf\n <;>\n norm_num\n <;>\n linarith [Real.pi_pos]\n rw [hββ]\n rw [hββ]\n have hββ : (β« x in (0)..1, (1 : β) / (1 + x ^ 2)) = Real.pi / 4 := by\n \n have hββ
: (β« x in (0)..1, (1 : β) / (1 + x ^ 2)) = Real.arctan 1 - Real.arctan 0 := by\n \n rw [integral_one_div_one_add_sq]\n <;>\n norm_num\n rw [hββ
]\n have hββ : Real.arctan 1 = Real.pi / 4 := by\n \n norm_num [Real.arctan_one]\n have hββ : Real.arctan 0 = 0 := by\n \n norm_num [Real.arctan_zero]\n rw [hββ, hββ]\n <;>\n ring_nf\n <;>\n norm_num\n rw [hββ]\n <;>\n ring_nf\n <;>\n norm_num\n \n rw [hβ, hβ]\n <;>\n ring_nf\n <;>\n norm_num\n \n have h_final : 22/7 - Real.pi = β« x in (0)..1, x^4 * (1 - x)^4 / (1 + x^2) := by\n rw [h_main]\n <;>\n linarith [Real.pi_pos]\n \n exact h_final"} |
| {"name": "putnam_1991_b1", "proof_length": 3313, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Filter Topology\n\n\n\n", "signature": "theorem putnam_1991_b1\n (m S : β€ β β€)\n (A : β€)\n (a : β β β€)\n (hm : β n, 0 β€ n β (m n) ^ 2 β€ n β§ (β m' : β€, m' ^ 2 β€ n β m' β€ m n))\n (hS : β n, 0 β€ n β S n = n - (m n) ^ 2)\n (ha : a 0 = A β§ (β k, a (k + 1) = a k + S (a k)))\n (hA : A > 0) :\n (β (K : β) (c : β), β k β₯ K, a k = c) β A β (({A : β€ | β x > 0, A = x ^ 2}) : Set β€ )", "src": "theorem putnam_1991_b1\n (m S : β€ β β€)\n (A : β€)\n (a : β β β€)\n (hm : β n, 0 β€ n β (m n) ^ 2 β€ n β§ (β m' : β€, m' ^ 2 β€ n β m' β€ m n))\n (hS : β n, 0 β€ n β S n = n - (m n) ^ 2)\n (ha : a 0 = A β§ (β k, a (k + 1) = a k + S (a k)))\n (hA : A > 0) :\n (β (K : β) (c : β), β k β₯ K, a k = c) β A β (({A : β€ | β x > 0, A = x ^ 2}) : Set β€ ) := by \n have h_nonneg : β (k : β), a k β₯ 0 := by\n intro k\n induction k with\n | zero =>\n have hβ : a 0 = A := ha.1\n linarith\n | succ k ih =>\n have hβ : a (k + 1) = a k + S (a k) := ha.2 k\n rw [hβ]\n have hβ : 0 β€ a k := ih\n have hβ : S (a k) = a k - (m (a k)) ^ 2 := hS (a k) hβ\n have hβ : (m (a k)) ^ 2 β€ a k := (hm (a k) hβ).1\n have hβ
: S (a k) β₯ 0 := by\n rw [hβ]\n linarith\n linarith\n \n have h_nondec : β k, a (k + 1) β₯ a k := by\n intro k\n have hβ : a (k + 1) = a k + S (a k) := (ha.2) k\n rw [hβ]\n have hβ : 0 β€ a k := h_nonneg k\n have hβ : S (a k) = a k - (m (a k)) ^ 2 := hS (a k) hβ\n have hβ : (m (a k)) ^ 2 β€ a k := (hm (a k) hβ).1\n have hβ
: S (a k) β₯ 0 := by\n rw [hβ]\n linarith\n linarith\n \n have h_S_pos : β (n : β€), 0 β€ n β (β (t : β€), n β t ^ 2) β S n β₯ 1 := by\n intro n hn hnotsquare\n have hβ : S n = n - (m n) ^ 2 := hS n hn\n rw [hβ]\n have hβ : (m n) ^ 2 β€ n := (hm n hn).1\n have hβ : β (m' : β€), m' ^ 2 β€ n β m' β€ m n := (hm n hn).2\n \n have hβ : n - (m n) ^ 2 β₯ 1 := by\n by_contra h\n \n have hβ
: n - (m n) ^ 2 β€ 0 := by\n linarith\n \n have hβ : (m n + 1 : β€) ^ 2 > n := by\n by_contra hβ\n have hβ : (m n + 1 : β€) ^ 2 β€ n := by linarith\n have hβ : m n + 1 β€ m n := hβ (m n + 1) hβ\n linarith\n \n have hβ : (m n : β€) ^ 2 β€ n := hβ\n have hβ : (m n + 1 : β€) ^ 2 > n := hβ\n have hβ : (m n + 1 : β€) ^ 2 > n := hβ\n \n \n \n \n \n \n \n have hββ : (m n : β€) ^ 2 = n := by\n nlinarith\n \n have hββ : β (t : β€), n = t ^ 2 := by\n refine' β¨m n, _β©\n linarith\n \n obtain β¨t, htβ© := hββ\n have hββ : n = t ^ 2 := ht\n have hββ : n β t ^ 2 := hnotsquare t\n contradiction\n \n linarith\n \n have h_no_new_squares : β (k : β), (β (t : β€), a k β t ^ 2) β (β (t : β€), a (k + 1) β t ^ 2) := by\n intro k hk\n intro t ht\n have hβ : a (k + 1) = a k + S (a k) := ha.2 k\n have hβ : 0 β€ a k := h_nonneg k\n have hβ : S (a k) = a k - (m (a k)) ^ 2 := hS (a k) hβ\n have hβ : a (k + 1) = a k + (a k - (m (a k)) ^ 2) := by\n rw [hβ, hβ]\n <;> ring\n have hβ
: a (k + 1) = 2 * a k - (m (a k)) ^ 2 := by\n linarith\n have hβ : a (k + 1) = t ^ 2 := ht\n have hβ : 2 * a k - (m (a k)) ^ 2 = t ^ 2 := by linarith\n have hβ : (m (a k)) ^ 2 β€ a k := (hm (a k) hβ).1\n have hβ : β (m' : β€), m' ^ 2 β€ a k β m' β€ m (a k) := (hm (a k) hβ).2\n have hββ : a k < (m (a k) + 1) ^ 2 := by\n by_contra h\n have hββ : (m (a k) + 1 : β€) ^ 2 β€ a k := by linarith\n have hββ : m (a k) + 1 β€ m (a k) := hβ (m (a k) + 1) hββ\n linarith\n \n \n \n have hββ : m (a k) β₯ 0 := by\n by_contra h\n have hββ : m (a k) < 0 := by linarith\n have hββ : (m (a k)) ^ 2 > 0 := by nlinarith\n have hββ : (m (a k) + 1 : β€) ^ 2 β€ a k := by\n nlinarith [hβ]\n have hββ
: m (a k) + 1 β€ m (a k) := hβ (m (a k) + 1) hββ\n linarith\n \n \n have hββ : t ^ 2 = 2 * a k - (m (a k)) ^ 2 := by linarith\n have hββ : (m (a k)) ^ 2 < t ^ 2 := by\n have hββ : (m (a k)) ^ 2 < a k := by\n by_contra hββ\n have hββ
: (m (a k)) ^ 2 β₯ a k := by linarith\n have hββ : (m (a k)) ^ 2 β€ a k := hβ\n have hββ : (m (a k)) ^ 2 = a k := by linarith\n have hββ : β (t : β€), a k = t ^ 2 := by\n refine' β¨m (a k), _β©\n linarith\n obtain β¨t', ht'β© := hββ\n have hββ : a k = t' ^ 2 := ht'\n have hββ : a k β t' ^ 2 := hk t'\n contradiction\n nlinarith\n have hββ : t ^ 2 < (m (a k) + 2) ^ 2 := by\n nlinarith [hββ]\n \n \n have hββ
: t = m (a k) + 1 β¨ t = -(m (a k) + 1) := by\n have hββ : m (a k) β₯ 0 := hββ\n have hββ : t ^ 2 < (m (a k) + 2) ^ 2 := hββ\n have hββ : (m (a k)) ^ 2 < t ^ 2 := hββ\n have hββ : t β€ m (a k) + 1 := by\n nlinarith\n have hββ : t β₯ -(m (a k) + 1) := by\n nlinarith\n have hββ : t β₯ m (a k) + 1 β¨ t β€ -(m (a k) + 1) := by\n by_contra! hββ\n have hββ : -(m (a k) + 1) < t := by linarith\n have hββ : t < m (a k) + 1 := by linarith\n have hββ
: t ^ 2 < (m (a k) + 1) ^ 2 := by\n nlinarith\n nlinarith\n cases hββ with\n | inl hββ =>\n have hββ : t = m (a k) + 1 := by\n nlinarith\n exact Or.inl hββ\n | inr hββ =>\n have hββ : t = -(m (a k) + 1) := by\n nlinarith\n exact Or.inr hββ\n \n cases hββ
with\n | inl hββ
=>\n have hββ : t = m (a k) + 1 := hββ
\n have hββ : t ^ 2 = (m (a k) + 1) ^ 2 := by\n rw [hββ]\n <;> ring_nf\n have hββ : 2 * a k - (m (a k)) ^ 2 = (m (a k) + 1) ^ 2 := by\n linarith\n have hββ : 2 * a k = 2 * (m (a k)) ^ 2 + 2 * m (a k) + 1 := by\n nlinarith\n have hββ : (2 : β€) * a k % 2 = 1 := by\n have hββ : (2 : β€) * a k = 2 * (m (a k)) ^ 2 + 2 * m (a k) + 1 := hββ\n omega\n have hββ : (2 : β€) * a k % 2 = 0 := by\n have hββ : (2 : β€) * a k % 2 = 0 := by\n have hββ : (2 : β€) * a k % 2 = 0 := by\n omega\n exact hββ\n exact hββ\n omega\n | inr hββ
=>\n have hββ : t = -(m (a k) + 1) := hββ
\n have hββ : t ^ 2 = (m (a k) + 1) ^ 2 := by\n rw [hββ]\n <;> ring_nf\n <;> simp [sq]\n <;> linarith\n have hββ : 2 * a k - (m (a k)) ^ 2 = (m (a k) + 1) ^ 2 := by\n linarith\n have hββ : 2 * a k = 2 * (m (a k)) ^ 2 + 2 * m (a k) + 1 := by\n nlinarith\n have hββ : (2 : β€) * a k % 2 = 1 := by\n have hββ : (2 : β€) * a k = 2 * (m (a k)) ^ 2 + 2 * m (a k) + 1 := hββ\n omega\n have hββ : (2 : β€) * a k % 2 = 0 := by\n have hββ : (2 : β€) * a k % 2 = 0 := by\n have hββ : (2 : β€) * a k % 2 = 0 := by\n omega\n exact hββ\n exact hββ\n omega\n \n have h_strict_increasing : (β (t : β€), A β t ^ 2) β β (k : β), a (k + 1) > a k := by\n intro hA_not_square k\n have hβ : β (k : β), (β (t : β€), a k β t ^ 2) := by\n intro k\n induction k with\n | zero =>\n intro t ht\n have hβ : a 0 = A := ha.1\n rw [hβ] at ht\n exact hA_not_square t ht\n | succ k ih =>\n intro t ht\n have hβ : (β (t : β€), a k β t ^ 2) := ih\n have hβ : (β (t : β€), a (k + 1) β t ^ 2) := h_no_new_squares k hβ\n exact hβ t ht\n have hβ : (β (t : β€), a k β t ^ 2) := hβ k\n have hβ : 0 β€ a k := h_nonneg k\n have hβ : S (a k) β₯ 1 := h_S_pos (a k) hβ hβ\n have hβ
: a (k + 1) = a k + S (a k) := ha.2 k\n have hβ : a (k + 1) > a k := by\n linarith\n exact hβ\n \n have h_imp : (β (K : β) (c : β), β k β₯ K, a k = c) β A β (({A : β€ | β x > 0, A = x ^ 2}) : Set β€) := by\n intro h\n by_contra hβ\n \n have hβ : β (t : β€), A β t ^ 2 := by\n intro t ht\n have hβ : A β ({A : β€ | β x > 0, A = x ^ 2} : Set β€) := by\n refine' β¨t.natAbs, _β©\n have hβ : A = t ^ 2 := ht\n have hβ
: (t.natAbs : β€) > 0 := by\n have hβ : t β 0 := by\n by_contra hβ\n rw [hβ] at hβ\n have hβ : A = 0 := by\n norm_num at hβ β’\n <;> linarith\n linarith\n have hβ : t.natAbs > 0 := by\n exact Nat.pos_of_ne_zero (by\n intro hβ\n have hββ : t.natAbs = 0 := hβ\n have hββ : t = 0 := by\n simp [Int.natAbs_eq_zero] at hββ β’\n <;> omega\n contradiction\n )\n exact_mod_cast hβ\n have hβ : A = (t.natAbs : β€) ^ 2 := by\n have hββ : A = t ^ 2 := ht\n have hββ : (t.natAbs : β€) ^ 2 = t ^ 2 := by\n simp [sq, Int.natAbs_mul]\n <;> cases' le_or_lt 0 t with hββ hββ <;> simp_all [Int.natAbs_of_nonneg, Int.natAbs_of_nonpos, pow_two] <;>\n ring_nf <;> nlinarith\n linarith\n exact β¨by exact_mod_cast hβ
, by linarithβ©\n contradiction\n \n have hβ : β (k : β), a (k + 1) > a k := h_strict_increasing hβ\n \n obtain β¨K, c, hββ© := h\n have hβ
: a (K + 1) > a K := hβ K\n have hβ : a (K + 1) = c := by\n have hβ : K + 1 β₯ K := by linarith\n have hβ : a (K + 1) = c := hβ (K + 1) hβ\n exact hβ\n have hβ : a K = c := by\n have hβ : K β₯ K := by linarith\n have hβ : a K = c := hβ K hβ\n exact hβ\n linarith\n \n have h_conv : A β (({A : β€ | β x > 0, A = x ^ 2}) : Set β€) β (β (K : β) (c : β), β k β₯ K, a k = c) := by\n intro h\n obtain β¨x, hx, hx'β© := h\n have hβ : a 0 = A := ha.1\n have hβ : β k, a (k + 1) = a k + S (a k) := ha.2\n have hβ : β k, a k = A := by\n intro k\n induction k with\n | zero => simp [hβ]\n | succ k ih =>\n have hβ : a (k + 1) = a k + S (a k) := hβ k\n rw [hβ]\n have hβ
: a k = A := ih\n rw [hβ
]\n have hβ : S A = 0 := by\n have hβ : 0 β€ A := by linarith\n have hβ : S A = A - (m A) ^ 2 := hS A hβ\n rw [hβ]\n have hβ : (m A) ^ 2 β€ A := (hm A hβ).1\n have hββ : β (m' : β€), m' ^ 2 β€ A β m' β€ m A := (hm A hβ).2\n have hββ : A = x ^ 2 := by\n norm_cast at hx' β’\n <;> simp_all [pow_two]\n <;> nlinarith\n have hββ : (m A : β€) = x := by\n have hββ : (m A : β€) β₯ 0 := by\n by_contra hββ\n have hββ
: (m A : β€) < 0 := by linarith\n have hββ : (m A : β€) ^ 2 > 0 := by nlinarith\n have hββ : (m A + 1 : β€) ^ 2 β€ A := by\n nlinarith [hβ]\n have hββ : m A + 1 β€ m A := hββ (m A + 1) hββ\n linarith\n have hββ : (m A : β€) β€ x := by\n have hββ : (m A : β€) ^ 2 β€ A := hβ\n have hββ : A = x ^ 2 := by\n norm_cast at hx' β’\n <;> simp_all [pow_two]\n <;> nlinarith\n have hββ : (m A : β€) ^ 2 β€ x ^ 2 := by\n linarith\n nlinarith\n have hββ : (m A : β€) β₯ x := by\n by_contra hββ\n have hββ : (m A : β€) < x := by linarith\n have hββ : (m A + 1 : β€) β€ x := by\n linarith\n have hββ : (m A + 1 : β€) ^ 2 β€ x ^ 2 := by\n have hββ
: (m A + 1 : β€) β€ x := by linarith\n have hββ : 0 β€ (m A + 1 : β€) := by\n nlinarith [hββ]\n nlinarith\n have hββ
: (m A + 1 : β€) ^ 2 β€ A := by\n have hββ : A = x ^ 2 := by\n norm_cast at hx' β’\n <;> simp_all [pow_two]\n <;> nlinarith\n linarith\n have hββ : m A + 1 β€ m A := hββ (m A + 1) hββ
\n linarith\n linarith\n have hββ : (m A : β€) = x := hββ\n have hββ : (m A : β€) ^ 2 = x ^ 2 := by\n rw [hββ]\n have hββ : A = x ^ 2 := by\n norm_cast at hx' β’\n <;> simp_all [pow_two]\n <;> nlinarith\n linarith\n linarith\n refine' β¨0, Int.toNat A, _β©\n intro k hk\n have hβ : a k = A := hβ k\n have hβ
: 0 β€ A := by linarith\n have hβ : (A : β€) = Int.toNat A := by\n rw [Int.toNat_of_nonneg hβ
]\n <;> simp\n rw [hβ]\n <;> norm_cast at hβ β’ <;> simp_all\n <;>\n (try omega)\n \n constructor\n Β· \n intro h\n exact h_imp h\n Β· \n intro h\n exact h_conv h"} |
| {"name": "putnam_2019_a1", "proof_length": 2381, "header": "import Mathlib\nimport Aesop\n\nset_option maxHeartbeats 0\n\nopen Topology Filter\n\n\n\n", "signature": "theorem putnam_2019_a1\n: {n : β€ | β A B C : β€, A β₯ 0 β§ B β₯ 0 β§ C β₯ 0 β§ A^3 + B^3 + C^3 - 3*A*B*C = n} = (({n : β€ | n β₯ 0 β§ Β¬Int.ModEq 9 n 3 β§ Β¬Int.ModEq 9 n 6}) : Set β€ )", "src": "theorem putnam_2019_a1\n: {n : β€ | β A B C : β€, A β₯ 0 β§ B β₯ 0 β§ C β₯ 0 β§ A^3 + B^3 + C^3 - 3*A*B*C = n} = (({n : β€ | n β₯ 0 β§ Β¬Int.ModEq 9 n 3 β§ Β¬Int.ModEq 9 n 6}) : Set β€ ) := by \n have h_subsetβ : {n : β€ | β A B C : β€, A β₯ 0 β§ B β₯ 0 β§ C β₯ 0 β§ A^3 + B^3 + C^3 - 3*A*B*C = n} β ({n : β€ | n β₯ 0 β§ Β¬Int.ModEq 9 n 3 β§ Β¬Int.ModEq 9 n 6} : Set β€) := by\n intro n hn\n rcases hn with β¨A, B, C, hA, hB, hC, hnβ©\n have hβ : n β₯ 0 := by\n have hβ : (A : β€) β₯ 0 := by exact_mod_cast hA\n have hβ : (B : β€) β₯ 0 := by exact_mod_cast hB\n have hβ : (C : β€) β₯ 0 := by exact_mod_cast hC\n have hβ : (A : β€)^3 + (B : β€)^3 + (C : β€)^3 - 3 * (A : β€) * (B : β€) * (C : β€) β₯ 0 := by\n nlinarith [sq_nonneg (A - B), sq_nonneg (B - C), sq_nonneg (C - A),\n mul_nonneg hβ hβ, mul_nonneg hβ hβ, mul_nonneg hβ hβ,\n sq_nonneg (A + B + C), sq_nonneg (A + B - C), sq_nonneg (A + C - B),\n sq_nonneg (B + C - A)]\n linarith\n have hβ : Β¬Int.ModEq 9 n 3 := by\n have hβ : β (A B C : β€), A β₯ 0 β B β₯ 0 β C β₯ 0 β (A^3 + B^3 + C^3 - 3*A*B*C) % 9 β 3 := by\n intro A B C hA hB hC\n have hβ : A % 9 = 0 β¨ A % 9 = 1 β¨ A % 9 = 2 β¨ A % 9 = 3 β¨ A % 9 = 4 β¨ A % 9 = 5 β¨ A % 9 = 6 β¨ A % 9 = 7 β¨ A % 9 = 8 := by\n omega\n have hβ : B % 9 = 0 β¨ B % 9 = 1 β¨ B % 9 = 2 β¨ B % 9 = 3 β¨ B % 9 = 4 β¨ B % 9 = 5 β¨ B % 9 = 6 β¨ B % 9 = 7 β¨ B % 9 = 8 := by\n omega\n have hβ
: C % 9 = 0 β¨ C % 9 = 1 β¨ C % 9 = 2 β¨ C % 9 = 3 β¨ C % 9 = 4 β¨ C % 9 = 5 β¨ C % 9 = 6 β¨ C % 9 = 7 β¨ C % 9 = 8 := by\n omega\n rcases hβ with (hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ) <;>\n rcases hβ with (hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ) <;>\n rcases hβ
with (hβ
| hβ
| hβ
| hβ
| hβ
| hβ
| hβ
| hβ
| hβ
) <;>\n (try omega) <;>\n (try {\n simp [hβ, hβ, hβ
, pow_three, Int.mul_emod, Int.add_emod, Int.sub_emod]\n <;> norm_num <;> omega\n })\n have hβ := hβ A B C hA hB hC\n intro hβ\n have hβ
: (n : β€) % 9 = 3 := by\n rw [Int.ModEq] at hβ\n omega\n have hβ : (A^3 + B^3 + C^3 - 3*A*B*C) % 9 = 3 := by\n omega\n contradiction\n have hβ : Β¬Int.ModEq 9 n 6 := by\n have hβ : β (A B C : β€), A β₯ 0 β B β₯ 0 β C β₯ 0 β (A^3 + B^3 + C^3 - 3*A*B*C) % 9 β 6 := by\n intro A B C hA hB hC\n have hβ : A % 9 = 0 β¨ A % 9 = 1 β¨ A % 9 = 2 β¨ A % 9 = 3 β¨ A % 9 = 4 β¨ A % 9 = 5 β¨ A % 9 = 6 β¨ A % 9 = 7 β¨ A % 9 = 8 := by\n omega\n have hβ : B % 9 = 0 β¨ B % 9 = 1 β¨ B % 9 = 2 β¨ B % 9 = 3 β¨ B % 9 = 4 β¨ B % 9 = 5 β¨ B % 9 = 6 β¨ B % 9 = 7 β¨ B % 9 = 8 := by\n omega\n have hβ
: C % 9 = 0 β¨ C % 9 = 1 β¨ C % 9 = 2 β¨ C % 9 = 3 β¨ C % 9 = 4 β¨ C % 9 = 5 β¨ C % 9 = 6 β¨ C % 9 = 7 β¨ C % 9 = 8 := by\n omega\n rcases hβ with (hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ) <;>\n rcases hβ with (hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ | hβ) <;>\n rcases hβ
with (hβ
| hβ
| hβ
| hβ
| hβ
| hβ
| hβ
| hβ
| hβ
) <;>\n (try omega) <;>\n (try {\n simp [hβ, hβ, hβ
, pow_three, Int.mul_emod, Int.add_emod, Int.sub_emod]\n <;> norm_num <;> omega\n })\n have hβ := hβ A B C hA hB hC\n intro hβ\n have hβ
: (n : β€) % 9 = 6 := by\n rw [Int.ModEq] at hβ\n omega\n have hβ : (A^3 + B^3 + C^3 - 3*A*B*C) % 9 = 6 := by\n omega\n contradiction\n exact β¨hβ, hβ, hββ©\n \n have h_subsetβ : ({n : β€ | n β₯ 0 β§ Β¬Int.ModEq 9 n 3 β§ Β¬Int.ModEq 9 n 6} : Set β€) β {n : β€ | β A B C : β€, A β₯ 0 β§ B β₯ 0 β§ C β₯ 0 β§ A^3 + B^3 + C^3 - 3*A*B*C = n} := by\n intro n hn\n have hβ : n β₯ 0 := hn.1\n have hβ : Β¬Int.ModEq 9 n 3 := hn.2.1\n have hβ : Β¬Int.ModEq 9 n 6 := hn.2.2\n \n have hβ : n % 3 = 0 β¨ n % 3 = 1 β¨ n % 3 = 2 := by\n have hβ : n % 3 = 0 β¨ n % 3 = 1 β¨ n % 3 = 2 := by omega\n exact hβ\n rcases hβ with (hβ | hβ | hβ)\n Β· \n have hβ
: n % 9 β 3 := by\n intro hβ
\n have hβ : Int.ModEq 9 n 3 := by\n rw [Int.ModEq]\n omega\n contradiction\n have hβ : n % 9 β 6 := by\n intro hβ\n have hβ : Int.ModEq 9 n 6 := by\n rw [Int.ModEq]\n omega\n contradiction\n \n have hβ : n % 9 = 0 := by\n have hβ : n % 9 = 0 β¨ n % 9 = 3 β¨ n % 9 = 6 := by\n omega\n rcases hβ with (hβ | hβ | hβ)\n Β· exact hβ\n Β· exfalso\n exact hβ
hβ\n Β· exfalso\n exact hβ hβ\n \n have hβ : β (k : β€), n = 9 * k := by\n use n / 9\n have hβ : n % 9 = 0 := hβ\n have hβ : n = 9 * (n / 9) := by\n omega\n exact hβ\n rcases hβ with β¨k, hkβ©\n by_cases hβ : k = 0\n Β· \n use 0, 0, 0\n simp [hβ, hk]\n <;> norm_num\n Β· \n have hββ : k > 0 := by\n by_contra hββ\n have hββ : k β€ 0 := by linarith\n have hββ : n β€ 0 := by\n have hββ : (9 : β€) * k β€ 0 := by nlinarith\n linarith\n have hββ : n β₯ 0 := hβ\n have hββ : n = 0 := by linarith\n have hββ
: k = 0 := by\n omega\n contradiction\n \n use (k + 1 : β€), (k : β€), (k - 1 : β€)\n have hββ : (k + 1 : β€) β₯ 0 := by linarith\n have hββ : (k : β€) β₯ 0 := by linarith\n have hββ : (k - 1 : β€) β₯ 0 := by\n have hββ : k β₯ 1 := by\n by_contra hββ\n have hββ
: k β€ 0 := by linarith\n have hββ : n β€ 0 := by\n have hββ : (9 : β€) * k β€ 0 := by nlinarith\n linarith\n have hββ : n β₯ 0 := hβ\n have hββ : n = 0 := by linarith\n have hββ : k = 0 := by\n omega\n contradiction\n linarith\n constructor\n Β· exact_mod_cast hββ\n constructor\n Β· exact_mod_cast hββ\n constructor\n Β· exact_mod_cast hββ\n \n have hββ : (k + 1 : β€)^3 + (k : β€)^3 + (k - 1 : β€)^3 - 3 * (k + 1 : β€) * (k : β€) * (k - 1 : β€) = 9 * k := by\n ring_nf\n <;> nlinarith\n rw [hk]\n linarith\n Β· \n \n have hβ
: (n - 1) % 3 = 0 := by\n omega\n have hβ : β (m : β€), n = 3 * m + 1 := by\n use (n - 1) / 3\n have hβ : (n - 1) % 3 = 0 := hβ
\n have hβ : n - 1 = 3 * ((n - 1) / 3) := by\n omega\n linarith\n rcases hβ with β¨m, hmβ©\n have hβ : m β₯ 0 := by\n by_contra hβ\n have hβ : m < 0 := by linarith\n have hβ : n < 1 := by\n nlinarith\n have hββ : n β₯ 0 := hβ\n omega\n use (m + 1 : β€), (m : β€), (m : β€)\n have hβ : (m + 1 : β€) β₯ 0 := by linarith\n have hβ : (m : β€) β₯ 0 := by linarith\n have hββ : (m : β€) β₯ 0 := by linarith\n constructor\n Β· exact_mod_cast hβ\n constructor\n Β· exact_mod_cast hβ\n constructor\n Β· exact_mod_cast hββ\n \n have hββ : (m + 1 : β€)^3 + (m : β€)^3 + (m : β€)^3 - 3 * (m + 1 : β€) * (m : β€) * (m : β€) = 3 * m + 1 := by\n ring_nf\n <;> nlinarith\n rw [hm]\n linarith\n Β· \n \n have hβ
: (n - 2) % 3 = 0 := by\n omega\n have hβ : β (m : β€), n = 3 * m + 2 := by\n use (n - 2) / 3\n have hβ : (n - 2) % 3 = 0 := hβ
\n have hβ : n - 2 = 3 * ((n - 2) / 3) := by\n omega\n linarith\n rcases hβ with β¨m, hmβ©\n have hβ : m β₯ 0 := by\n by_contra hβ\n have hβ : m < 0 := by linarith\n have hβ : n < 2 := by\n nlinarith\n have hββ : n β₯ 0 := hβ\n have hββ : m β€ -1 := by\n omega\n have hββ : n < 0 := by\n nlinarith\n linarith\n use (m + 1 : β€), (m + 1 : β€), (m : β€)\n have hβ : (m + 1 : β€) β₯ 0 := by linarith\n have hβ : (m + 1 : β€) β₯ 0 := by linarith\n have hββ : (m : β€) β₯ 0 := by linarith\n constructor\n Β· exact_mod_cast hβ\n constructor\n Β· exact_mod_cast hβ\n constructor\n Β· exact_mod_cast hββ\n \n have hββ : (m + 1 : β€)^3 + (m + 1 : β€)^3 + (m : β€)^3 - 3 * (m + 1 : β€) * (m + 1 : β€) * (m : β€) = 3 * m + 2 := by\n ring_nf\n <;> nlinarith\n rw [hm]\n linarith\n \n have h_main : {n : β€ | β A B C : β€, A β₯ 0 β§ B β₯ 0 β§ C β₯ 0 β§ A^3 + B^3 + C^3 - 3*A*B*C = n} = (({n : β€ | n β₯ 0 β§ Β¬Int.ModEq 9 n 3 β§ Β¬Int.ModEq 9 n 6}) : Set β€ ) := by\n apply Set.Subset.antisymm\n Β· exact h_subsetβ\n Β· exact h_subsetβ\n \n exact h_main"} |
|
|