text‹Proof of Fermat's last theorem for the case $n=3$: $$\forall x,y,z:~x^3 + y^3 = z^3 \Longrightarrow xyz=0.$$›
(* TODO: this lemma is also used in Fermat4 with a slightly different generalization to ints.
Maybe it should be generalized to factorial rings and moved to another theory. *)
private lemma nat_relprime_power_divisors: assumes n0: "0 < n"and abc: "(a::nat)*b = c^n"and relprime: "coprime a b" shows"∃ k. a = k^n" using assms proof (induct c arbitrary: a b rule: nat_less_induct) case (1 c) show ?case proof (cases "a > 1") case False hence"a = 0 ∨ a = 1"by linarith thus ?thesis using n0 power_one zero_power by (simp only: eq_sym_conv) blast next case True thenobtain p where p: "prime p""p dvd a"using prime_factor_nat[of a] by blast hence h1: "p dvd (c^n)"using1(3) dvd_mult2[of p a b] by presburger hence"(p^n) dvd (c^n)" using p(1) prime_dvd_power_nat[of p c n] dvd_power_same[of p c n] by blast moreoverhave h2: "¬ p dvd b" using p ‹coprime a b› coprime_common_divisor_nat [of a b p] by auto hence"¬ (p^n) dvd b"using n0 p(1) dvd_power[of n p] gcd_nat.trans by blast ultimatelyhave"(p^n) dvd a" using"1.prems" p(1) prime_elem_divprod_pow [of p a b n] by simp thenobtain a' c' where ac: "a = p^n * a'""c = p * c'" using h1 dvdE[of "p^n" a] dvdE[of p c] prime_dvd_power_nat[of p c n] p(1) by meson hence"p^n * (a' * b) = p^n * c'^n"using1(3) by (simp add: power_mult_distrib semiring_normalization_rules(18)) hence"a' * b = c'^n"using p(1) by auto moreoverhave"coprime a' b"using1(4) ac(1) by simp moreoverhave"0 < b""0 < a"using h2 dvd_0_right gr0I True by fastforce+ thenhave"0 < c""1 < p"using p(1) 1(3) nat_0_less_mult_iff [of a b] n0 prime_gt_Suc_0_nat by simp_all hence"c' < c"using ac(2) by simp ultimatelyobtain k where"a' = k^n"using1(1) n0 by presburger hence"a = (p*k)^n"using ac(1) by (simp add: power_mult_distrib) thus ?thesis by blast qed qed
private lemma int_relprime_odd_power_divisors: assumes"odd n"and"(a::int) * b = c ^ n"and"coprime a b" shows"∃k. a = k^n" proof - from assms have"∣a∣ * ∣b∣ = ∣c∣ ^ n" by (simp add: abs_mult [symmetric] power_abs) thenhave"nat ∣a∣ * nat ∣b∣ = nat ∣c∣ ^ n" by (simp add: nat_mult_distrib [of "∣a∣""∣b∣", symmetric] nat_power_eq) moreoverhave"coprime (nat ∣a∣) (nat ∣b∣)"using assms(3) gcd_int_def by fastforce ultimatelyhave"∃ k. nat ∣a∣ = k^n" using nat_relprime_power_divisors[of n "nat ∣a∣""nat ∣b∣""nat ∣c∣"] assms(1) by blast thenobtain k' where k': "nat ∣a∣ = k'^n"by blast moreover define k where"k = int k'" ultimatelyhave k: "∣a∣ = k^n"using int_nat_eq[of "∣a∣"] of_nat_power[of k' n] by force
{ assume"a ≠ k^n" with k have"a = -(k^n)"by arith hence"a = (-k)^n"using assms(1) power_minus_odd by simp } thus ?thesis by blast qed
private lemma two_not_abs_cube: "∣x^3∣ = (2::int) ==> False" proof - assume"∣x^3∣ = 2" hence x32: "∣x∣^3 = 2"by (simp add: power_abs) have"∣x∣≥ 0"by simp moreover
{ assume"∣x∣ = 0 ∨∣x∣ = 1 ∨∣x∣ = 2" with x32 have False by (auto simp add: power_0_left) } moreover
{ assume"∣x∣ > 2" moreoverhave"(0::int) ≤ 2"and"(0::nat) < 3"by auto ultimatelyhave"∣x∣^3 > 2^3"by (simp only: power_strict_mono) with x32 have False by simp } ultimatelyshow False by arith qed
text‹Shows there exists no solution $v^3+w^3 = x^3$ with $vwx\ne 0$ and $coprime v w$ and $x$ even, by constructing a solution with a smaller $|x^3|$.›
private lemma no_rewritten_fermat3: "¬ (∃ v w. v^3+w^3 = x^3 ∧ v*w*x ≠ 0 ∧ even (x::int) ∧ coprime v w)" proof (induct x rule: infinite_descent0_measure[where V="λx. nat∣x^3∣"]) case (0 x) hence"x^3 = 0"by arith hence"x=0"by auto thus ?caseby auto next case (smaller x) thenobtain v w where vwx: "v^3+w^3=x^3 ∧ v*w*x ≠ 0 ∧ even x ∧ coprime v w" (is"?P v w x") by auto thenhave"coprime v w" by simp have"∃ α β γ. ?P α β γ ∧ nat∣γ^3∣ < nat∣x^3∣" proof -
― ‹obtain coprime $p$ and $q$ such that $v = p+q$ and $w = p-q$› have vwOdd: "odd v ∧ odd w" proof (rule ccontr, case_tac "odd v", simp_all) assume ve: "even v" hence"even (v^3)"by simp moreoverfrom vwx have"even (x^3)"by simp ultimatelyhave"even (x^3-v^3)"by simp moreoverfrom vwx have"x^3-v^3 = w^3"by simp ultimatelyhave"even (w^3)"by simp hence"even w"by simp with ve have"2 dvd v ∧ 2 dvd w"by auto hence"2 dvd gcd v w"by simp with vwx show False by simp next assume"odd v"and"even w" hence"odd (v^3)"and"even (w^3)" by auto hence"odd (w^3 + v^3)"by simp with vwx have"odd (x^3)"by (simp add: add.commute) hence"odd x"by simp with vwx show False by auto qed hence"even (v+w) ∧ even (v-w)"by simp thenobtain p q where pq: "v+w = 2*p ∧ v-w = 2*q" using evenE[of "v+w"] evenE[of "v-w"] by meson hence vw: "v = p+q ∧ w = p-q"by auto
― ‹show that $x^3 = (2p)(p^2 + 3q^2)$ and that these factors are›
― ‹either coprime (first case), or have $3$ as g.c.d. (second case)› have vwpq: "v^3 + w^3 = (2*p)*(p^2 + 3*q^2)" proof - have"2*(v^3 + w^3) = 2*(v+w)*(v^2 - v*w + w^2)" by (simp only: factor_sum_cubes) alsofrom pq have"… = 4*p*(v^2 - v*w + w^2)"by auto alsohave"… = p*((v+w)^2 + 3*(v-w)^2)" by (simp add: eval_nat_numeral field_simps) alsowith pq have"… = p*((2*p)^2 + 3*(2*q)^2)"by simp alsohave"… = 2*(2*p)*(p^2+3*q^2)"by (simp add: power_mult_distrib) finallyshow ?thesis by simp qed let ?g = "gcd (2 * p) (p2 + 3 * q2)" have g1: "?g ≥ 1" proof (rule ccontr) assume"¬ ?g ≥ 1" thenhave"?g < 0 ∨ ?g = 0"unfolding not_le by arith moreoverhave"?g ≥ 0"by simp ultimatelyhave"?g = 0"by arith hence"p = 0"by simp with vwpq vwx ‹0 < nat∣x^3∣›show False by auto qed have gOdd: "odd ?g" proof (rule ccontr) assume"¬ odd ?g" hence"2 dvd p^2+3*q^2"by simp thenobtain k where k: "p^2 + 3*q^2 = 2*k"by (auto simp add: dvd_def) hence"2*(k - 2*q^2) = p^2-q^2"by auto alsohave"… = (p+q)*(p-q)"by (simp add: power2_eq_square algebra_simps) finallyhave"v*w = 2*(k - 2*q^2)"using vw by presburger hence"even (v*w)"by auto hence"even (v) ∨ even (w)"by simp with vwOdd show False by simp qed thenhave even_odd_p_q: "even p ∧ odd q ∨ odd p ∧ even q" by auto
― ‹first case: $p$ is not a multiple of $3$; hence $2p$ and $p^2+3q^2$›
― ‹are coprime; hence both are cubes›
{ assume p3: "¬ 3 dvd p" have g3: "¬ 3 dvd ?g" proof (rule ccontr) assume"¬¬ 3 dvd ?g"hence"3 dvd 2*p"by simp hence"(3::int) dvd 2 ∨ 3 dvd p" using prime_dvd_multD[of 3] by (fastforce simp add: prime_dvd_mult_iff) with p3 show False by arith qed from‹coprime v w›have pq_relprime: "coprime p q" proof (rule coprime_imp_coprime) fix c assume"c dvd p"and"c dvd q" thenhave"c dvd p + q"and"c dvd p - q" by simp_all with vw show"c dvd v"and"c dvd w" by simp_all qed from‹coprime p q›have"coprime p (q2)" by simp thenhave factors_relprime: "coprime (2 * p) (p2 + 3 * q2)" proof (rule coprime_imp_coprime) fix c assume g2p: "c dvd 2 * p"and gpq: "c dvd p2 + 3 * q2" have"coprime 2 c" using g2p gpq even_odd_p_q dvd_trans [of 2 c "p2 + 3 * q2"] by auto with g2p show"c dvd p" by (simp add: coprime_dvd_mult_left_iff ac_simps) thenhave"c dvd p2" by (simp add: power2_eq_square) with gpq have"c dvd 3 * q2" by (simp add: dvd_add_right_iff) moreoverhave"coprime 3 c" using‹c dvd p› p3 dvd_trans [of 3 c p] by (auto intro: prime_imp_coprime) ultimatelyshow"c dvd q2" by (simp add: coprime_dvd_mult_right_iff ac_simps) qed moreoverfrom vwx vwpq have pqx: "(2*p)*(p^2 + 3*q^2) = x^3"by auto ultimatelyhave"∃ c. 2*p = c^3"by (simp add: int_relprime_odd_power_divisors) thenobtain c where c: "c^3 = 2*p"by auto from pqx factors_relprime have"coprime (p^2 + 3*q^2) (2*p)" and"(p^2 + 3*q^2)*(2*p) = x^3"by (auto simp add: ac_simps) hence"∃ d. p^2 + 3*q^2 = d^3"by (simp add: int_relprime_odd_power_divisors) thenobtain d where d: "p^2 + 3*q^2 = d^3"by auto have"odd d" proof (rule ccontr) assume"¬ odd d" hence"even (d^3)"by simp hence"2 dvd d^3"by simp moreoverhave"2 dvd 2*p"by (rule dvd_triv_left) ultimatelyhave"2 dvd gcd (2*p) (d^3)"by simp with d factors_relprime show False by simp qed with d pq_relprime have"coprime p q ∧ p^2 + 3*q^2 = d^3 ∧ odd d" by simp hence"is_cube_form p q"by (rule qf3_cube_impl_cube_form) thenobtain a b where"p = a^3 - 9*a*b^2 ∧ q = 3*a^2*b - 3*b^3" by (unfold is_cube_form_def, auto) hence ab: "p = a*(a+3*b)*(a- 3*b) ∧ q = b*(a+b)*(a-b)*3" by (simp add: eval_nat_numeral field_simps) with c have abc: "(2*a)*(a+3*b)*(a- 3*b) = c^3"by auto from pq_relprime ab have ab_relprime: "coprime a b" by (auto intro: coprime_imp_coprime) thenhave ab1: "coprime (2 * a) (a + 3 * b)" proof (rule coprime_imp_coprime) fix h assume h2a: "h dvd 2 * a"and hab: "h dvd a + 3 * b" have"coprime 2 h" using ab even_odd_p_q hab dvd_trans [of 2 h "a + 3 * b"] by auto with h2a show"h dvd a" by (simp add: coprime_dvd_mult_left_iff ac_simps) with hab have"h dvd 3 * b"and"¬ 3 dvd h" using dvd_trans [of 3 h a] ab ‹¬ 3 dvd p› by (auto simp add: dvd_add_right_iff) moreoverhave"coprime 3 h" using‹¬ 3 dvd h›by (auto intro: prime_imp_coprime) ultimatelyshow"h dvd b" by (simp add: coprime_dvd_mult_left_iff ac_simps) qed thenhave [simp]: "even b ⟷ odd a" and ab3: "coprime a (a + 3 * b)" by simp_all from‹coprime a b›have ab4: "coprime a (a - 3 * b)" proof (rule coprime_imp_coprime) fix h assume h2a: "h dvd a"and hab: "h dvd a - 3 * b" thenshow"h dvd a" by simp with hab have"h dvd 3 * b"and"¬ 3 dvd h" using dvd_trans [of 3 h a] ab ‹¬ 3 dvd p› dvd_add_right_iff [of h a "- 3 * b"] by auto moreoverhave"coprime 3 h" using‹¬ 3 dvd h›by (auto intro: prime_imp_coprime) ultimatelyshow"h dvd b" by (simp add: coprime_dvd_mult_left_iff ac_simps) qed from ab1 have ab2: "coprime (a + 3 * b) (a - 3 * b)" by (rule coprime_imp_coprime)
(use dvd_add [of _ "a + 3 * b""a - 3 * b"] in simp_all) have"∃k l m. 2 * a = k ^ 3 ∧ a + 3 * b = l ^ 3 ∧ a - 3 * b = m ^ 3" using ab2 ab3 ab4 abc
int_relprime_odd_power_divisors [of 3"2 * a""(a + 3 * b) * (a - 3 * b)" c]
int_relprime_odd_power_divisors [of 3"(a + 3 * b)""2 * a * (a - 3 * b)" c]
int_relprime_odd_power_divisors [of 3"(a - 3 * b)""2 * a * (a + 3 * b)" c] by auto (auto simp add: ac_simps) thenobtain α β γ where albega: "2*a = γ^3 ∧ a - 3*b = α^3 ∧ a+3*b = β^3"by auto
― ‹show this is a (smaller) solution› hence"α^3 + β^3 = γ^3"by auto moreoverhave"α*β*γ ≠ 0" proof (rule ccontr, safe) assume"α * β * γ = 0" with albega ab have"p=0"by (auto simp add: power_0_left) with vwpq vwx show False by auto qed moreoverhave"even γ" proof - have"even (2*a)"by simp with albega have"even (γ^3)"by simp thus ?thesis by simp qed moreoverhave"coprime α β" using ab2 proof (rule coprime_imp_coprime) fix h assume ha: "h dvd α"and hb: "h dvd β" thenhave"h dvd α * α^2 ∧ h dvd β * β^2"by simp thenhave"h dvd α^Suc 2 ∧ h dvd β^Suc 2"by (auto simp only: power_Suc) with albega show"h dvd a - 3 * b""h dvd a + 3 * b"by auto qed moreoverhave"nat∣γ^3∣ < nat∣x^3∣" proof - let ?A = "p^2 + 3*q^2" from vwx vwpq have"x^3 = 2*p*?A"by auto alsowith ab have"… = 2*a*((a+3*b)*(a- 3*b)*?A)"by auto alsowith albega have"… = γ^3 *((a+3*b)*(a- 3*b)*?A)"by auto finallyhave eq: "∣x^3∣ = ∣γ^3∣ * ∣(a+3*b)*(a- 3*b)*?A∣" by (auto simp add: abs_mult) with‹0 < nat∣x^3∣›have"∣(a+3*b)*(a- 3*b)*?A∣ > 0"by auto hence eqpos: "∣(a+3*b)*(a- 3*b)∣ > 0"by auto moreoverhave Ag1: "∣?A∣ > 1" proof - have Aqf3: "is_qfN ?A 3"by (auto simp add: is_qfN_def) moreoverhave triv3b: "(3::int) ≥ 1"by simp ultimatelyhave"?A ≥ 0"by (simp only: qfN_pos) hence"?A > 1 ∨ ?A = 0 ∨ ?A =1"by arith moreover
{ assume"?A = 0"with triv3b have"p = 0 ∧ q = 0"by (rule qfN_zero) with vwpq vwx have False by auto } moreover
{ assume A1: "?A = 1" have"q=0" proof (rule ccontr) assume"q ≠ 0" hence"q^2 > 0"by simp hence"3*q^2 > 1"by arith moreoverhave"p^2 ≥ 0"by (rule zero_le_power2) ultimatelyhave"?A > 1"by arith with A1 show False by simp qed with pq_relprime have"∣p∣ = 1"by simp with vwpq vwx A1 have"∣x^3∣ = 2"by auto hence False by (rule two_not_abs_cube) } ultimatelyshow ?thesis by auto qed ultimatelyhave "∣(a+3*b)*(a- 3*b)∣*1 < ∣(a+3*b)*(a- 3*b)∣*∣?A∣" by (simp only: zmult_zless_mono2) with eqpos have"∣(a+3*b)*(a- 3*b)∣*∣?A∣ > 1"by arith hence"∣(a+3*b)*(a- 3*b)*?A∣ > 1"by (auto simp add: abs_mult) moreoverhave"∣γ^3∣ > 0" proof - from eq have"∣γ^3∣ = 0 ==>∣x^3∣=0"by auto with‹0 < nat∣x^3∣›show ?thesis by auto qed ultimatelyhave"∣γ^3∣ * 1 < ∣γ^3∣ * ∣(a+3*b)*(a- 3*b)*?A∣" by (rule zmult_zless_mono2) with eq have"∣x^3∣ > ∣γ^3∣"by auto thus ?thesis by arith qed ultimatelyhave ?thesis by auto } moreover
― ‹second case: $p = 3r$ and hence $x^3 = (18r)(q^2+3r^2)$ and these›
― ‹factors are coprime; hence both are cubes›
{ assume p3: "3 dvd p" thenobtain r where r: "p = 3*r"by (auto simp add: dvd_def) moreoverhave"3 dvd 3*(3*r^2 + q^2)"by (rule dvd_triv_left) ultimatelyhave pq3: "3 dvd p^2+3*q^2"by (simp add: power_mult_distrib) moreoverfrom p3 have"3 dvd 2*p"by (rule dvd_mult) ultimatelyhave g3: "3 dvd ?g"by simp from‹coprime v w›have qr_relprime: "coprime q r" proof (rule coprime_imp_coprime) fix h assume hq: "h dvd q""h dvd r" with r have"h dvd p"by simp with hq have"h dvd p + q""h dvd p - q" by simp_all with vw show"h dvd v""h dvd w" by simp_all qed have factors_relprime: "coprime (18*r) (q^2 + 3*r^2)" proof - from g3 obtain k where k: "?g = 3*k"by (auto simp add: dvd_def) have"k = 1" proof (rule ccontr) assume"k ≠ 1" with g1 k have"k > 1"by auto thenobtain h where h: "prime h ∧ h dvd k" using prime_divisor_exists[of k] by auto with k have hg: "3*h dvd ?g"by (auto simp add: mult_dvd_mono) hence"3*h dvd p^2 + 3*q^2"and hp: "3*h dvd 2*p"by auto thenobtain s where s: "p^2 + 3*q^2 = (3*h)*s" by (auto simp add: dvd_def) with r have rqh: "3*r^2+q^2 = h*s"by (simp add: power_mult_distrib) from hp r have"3*h dvd 3*(2*r)"by simp moreoverhave"(3::int) ≠ 0"by simp ultimatelyhave"h dvd 2*r"by (rule zdvd_mult_cancel) with h have"h dvd 2 ∨ h dvd r" by (auto dest: prime_dvd_multD) moreoverhave"¬ h dvd 2" proof (rule ccontr, simp) assume"h dvd 2" with h have"h=2"using zdvd_not_zless[of 2 h] by (auto simp: prime_int_iff) with hg have"2*3 dvd ?g"by auto hence"2 dvd ?g"by (rule dvd_mult_left) with gOdd show False by simp qed ultimatelyhave hr: "h dvd r"by simp thenobtain t where"r = h*t"by (auto simp add: dvd_def) hence t: "r^2 = h*(h*t^2)"by (auto simp add: power2_eq_square) with rqh have"h*s = h*(3*h*t^2) + q^2"by simp hence"q^2 = h*(s - 3*h*t^2)"by (simp add: right_diff_distrib) hence"h dvd q^2"by simp with h have"h dvd q"using prime_dvd_multD[of h q q] by (simp add: power2_eq_square) with hr have"h dvd gcd q r"by simp with h qr_relprime show False by (unfold prime_def, auto) qed with k r have"3 = gcd (2*(3*r)) ((3*r)^2 + 3*q^2)"by auto alsohave"… = gcd (3*(2*r)) (3*(3*r^2 + q^2))" by (simp add: power_mult_distrib) alsohave"… = 3 * gcd (2*r) (3*r^2 + q^2)"using gcd_mult_distrib_int[of 3] by auto finallyhave"coprime (2*r) (3*r^2 + q^2)" by (auto dest: gcd_eq_1_imp_coprime) moreoverhave"coprime 9 (3*r^2 + q^2)" using‹coprime v w›proof (rule coprime_imp_coprime) fix h :: int assume"¬ is_unit h" assume h9: "h dvd 9"and hrq: "h dvd 3 * r2 + q2" have"prime (3::int)" by simp moreoverfrom‹h dvd 9›have"h dvd 32" by simp ultimatelyobtain k where"normalize h = 3 ^ k" by (rule divides_primepow) with‹¬ is_unit h›have"0 < k" by simp with‹normalize h = 3 ^ k›have"∣h∣ = 3 * 3 ^ (k - 1)" by (cases k) simp_all thenhave"3 dvd ∣h∣" .. thenhave"3 dvd h" by simp thenhave"3 dvd 3 * r2 + q2" using hrq by (rule dvd_trans) thenhave"3 dvd q2" by presburger thenhave"3 dvd q" using prime_dvd_power_int [of 3 q 2] by auto with p3 have"3 dvd p + q"and"3 dvd p - q" by simp_all with vw have"3 dvd v"and"3 dvd w" by simp_all with‹coprime v w›have"is_unit (3::int)" by (rule coprime_common_divisor) thenshow"h dvd v"and"h dvd w" by simp_all qed ultimatelyhave"coprime (2 * r * 9) (3 * r2 + q2)" by (simp only: coprime_mult_left_iff) thenshow ?thesis by (simp add: ac_simps) qed moreoverhave rqx: "(18*r)*(q^2 + 3*r^2) = x^3" proof - from vwx vwpq have"x^3 = 2*p*(p^2 + 3*q^2)"by auto alsowith r have"… = 2*(3*r)*(9*r^2 + 3*q^2)" by (auto simp add: power2_eq_square) finallyshow ?thesis by auto qed ultimatelyhave"∃ c. 18*r = c^3" by (simp add: int_relprime_odd_power_divisors) thenobtain c1 where c1: "c1^3 = 3*(6*r)"by auto hence"3 dvd c1^3"and"prime (3::int)"by auto hence"3 dvd c1"using prime_dvd_power[of 3] by fastforce with c1 obtain c where c: "3*c^3 = 2*r" by (auto simp add: power_mult_distrib dvd_def) from rqx factors_relprime have"coprime (q^2 + 3*r^2) (18*r)" and"(q^2 + 3*r^2)*(18*r) = x^3"by (auto simp add: ac_simps) hence"∃ d. q^2 + 3*r^2 = d^3" by (simp add: int_relprime_odd_power_divisors) thenobtain d where d: "q^2 + 3*r^2 = d^3"by auto have"odd d" proof (rule ccontr) assume"¬ odd d" hence"2 dvd d^3"by simp moreoverhave"2 dvd 2*(9*r)"by (rule dvd_triv_left) ultimatelyhave"2 dvd gcd (2*(9*r)) (d^3)"by simp with d factors_relprime show False by auto qed with d qr_relprime have"coprime q r ∧ q^2 + 3*r^2 = d^3 ∧ odd d" by simp hence"is_cube_form q r"by (rule qf3_cube_impl_cube_form) thenobtain a b where"q = a^3 - 9*a*b^2 ∧ r = 3*a^2*b - 3*b^3" by (unfold is_cube_form_def, auto) hence ab: "q = a*(a+3*b)*(a- 3*b) ∧ r = b*(a+b)*(a-b)*3" by (simp add: eval_nat_numeral field_simps) with c have abc: "(2*b)*(a+b)*(a-b) = c^3"by auto from qr_relprime ab have ab_relprime: "coprime a b" by (auto intro: coprime_imp_coprime) thenhave ab1: "coprime (2*b) (a+b)" proof (rule coprime_imp_coprime) fix h assume h2b: "h dvd 2*b"and hab: "h dvd a+b" have"odd h" proof assume"even h" thenhave"even (a + b)" using hab by (rule dvd_trans) thenhave"even (a+3*b)" by simp with ab have"even q""even r" by auto thenshow False using coprime_common_divisor_int qr_relprime by fastforce qed with h2b show"h dvd b" using coprime_dvd_mult_right_iff [of h 2 b] by simp with hab show"h dvd a" using dvd_diff [of h "a + b" b] by simp qed from ab1 have ab2: "coprime (a+b) (a-b)" proof (rule coprime_imp_coprime) fix h assume hab1: "h dvd a+b"and hab2: "h dvd a-b" thenshow"h dvd 2*b"using dvd_diff[of h "a+b""a-b"] by fastforce qed from ab1 have ab3: "coprime (a-b) (2*b)" proof (rule coprime_imp_coprime) fix h assume hab: "h dvd a-b"and h2b: "h dvd 2*b" have"a-b+2*b = a+b"by simp thenshow"h dvd a+b"using hab h2b dvd_add [of h "a-b""2*b"] by presburger qed thenhave [simp]: "even b ⟷ odd a" by simp have"∃ k l m. 2*b = k^3 ∧ a+b = l^3 ∧ a-b = m^3" using abc ab1 ab2 ab3
int_relprime_odd_power_divisors [of 3"2 * b""(a + b) * (a - b)" c]
int_relprime_odd_power_divisors [of 3"a + b""(2 * b) * (a - b)" c]
int_relprime_odd_power_divisors [of 3"a - b""(2 * b) * (a + b)" c] by simp (simp add: ac_simps, simp add: algebra_simps) thenobtain α1 β γ where a1: "2*b = γ^3 ∧ a-b = α1^3 ∧ a+b = β^3" by auto thenobtain α where"α = -α1"by auto
― ‹show this is a (smaller) solution› with a1 have a2: "α^3 = b-a"by auto with a1 have"α^3 + β^3 = γ^3"by auto moreoverhave"α*β*γ ≠ 0" proof (rule ccontr, safe) assume"α * β * γ = 0" with a1 a2 ab have"r=0"by (auto simp add: power_0_left) with r vwpq vwx show False by auto qed moreoverhave"even γ" proof - have"even (2*b)"by simp with a1 have"even (γ^3)"by simp thus ?thesis by simp qed moreoverhave"coprime α β" using ab2 proof (rule coprime_imp_coprime) fix h assume ha: "h dvd α"and hb: "h dvd β" thenhave"h dvd α * α^2"and"h dvd β * β^2"by simp_all thenhave"h dvd α^Suc 2"and"h dvd β^Suc 2"by (auto simp only: power_Suc) with a1 a2 have"h dvd b - a"and"h dvd a + b"by auto thenshow"h dvd a + b"and"h dvd a - b" by (simp_all add: dvd_diff_commute) qed moreoverhave"nat∣γ^3∣ < nat∣x^3∣" proof - let ?A = "p^2 + 3*q^2" from vwx vwpq have"x^3 = 2*p*?A"by auto alsowith r have"… = 6*r*?A"by auto alsowith ab have"… = 2*b*(9*(a+b)*(a-b)*?A)"by auto alsowith a1 have"… = γ^3 *(9*(a+b)*(a-b)*?A)"by auto finallyhave eq: "∣x^3∣ = ∣γ^3∣ * ∣9*(a+b)*(a-b)*?A∣" by (auto simp add: abs_mult) with‹0 < nat∣x^3∣›have"∣9*(a+b)*(a-b)*?A∣ > 0"by auto hence"∣(a+b)*(a-b)*?A∣≥ 1"by arith hence"∣9*(a+b)*(a-b)*?A∣ > 1"by arith moreoverhave"∣γ^3∣ > 0" proof - from eq have"∣γ^3∣ = 0 ==>∣x^3∣=0"by auto with‹0 < nat∣x^3∣›show ?thesis by auto qed ultimatelyhave"∣γ^3∣ * 1 < ∣γ^3∣ * ∣9*(a+b)*(a-b)*?A∣" by (rule zmult_zless_mono2) with eq have"∣x^3∣ > ∣γ^3∣"by auto thus ?thesis by arith qed ultimatelyhave ?thesis by auto } ultimatelyshow ?thesis by auto qed thus ?caseby auto qed
text‹The theorem. Puts equation in requested shape.›
theorem fermat_3: assumes ass: "(x::int)^3 + y^3 = z^3" shows"x*y*z=0" proof (rule ccontr) let ?g = "gcd x y" let ?c = "z div ?g" assume xyz0: "x*y*z≠0"
― ‹divide out the g.c.d.› hence"x ≠ 0 ∨ y ≠ 0"by simp thenobtain a b where ab: "x = ?g*a ∧ y = ?g*b ∧ coprime a b" using gcd_coprime_exists[of x y] by (auto simp: mult.commute) moreoverhave abc: "?c*?g = z ∧ a^3 + b^3 = ?c^3 ∧ a*b*?c ≠ 0" proof - from xyz0 have g0: "?g≠0"by simp have zgab: "z^3 = ?g^3 * (a^3+b^3)" proof - from ab and ass have"z^3 = (?g*a)^3+(?g*b)^3"by simp thus ?thesis by (simp only: power_mult_distrib distrib_left) qed have cgz: "?c * ?g = z" proof - from zgab have"?g^3 dvd z^3"by simp hence"?g dvd z"by simp thus ?thesis by (simp only: ac_simps dvd_mult_div_cancel) qed moreoverhave"a^3 + b^3 = ?c^3" proof - have"?c^3 * ?g^3 = (a^3+b^3)*?g^3" proof - have"?c^3 * ?g^3 = (?c*?g)^3"by (simp only: power_mult_distrib) alsowith cgz have"… = z^3"by simp alsowith zgab have"… = ?g^3*(a^3+b^3)"by simp finallyshow ?thesis by simp qed with g0 show ?thesis by auto qed moreoverfrom ab and xyz0 and cgz have"a*b*?c≠0"by auto ultimatelyshow ?thesis by simp qed
― ‹make both sides even› from ab have"coprime (a ^ 3) (b ^ 3)" by simp have"∃ u v w. u^3 + v^3 = w^3 ∧ u*v*w≠(0::int) ∧ even w ∧ coprime u v" proof - let"?Q u v w" = "u^3 + v^3 = w^3 ∧ u*v*w≠(0::int) ∧ even w ∧ coprime u v" have"even a ∨ even b ∨ even ?c" proof (rule ccontr) assume"¬(even a ∨ even b ∨ even ?c)" hence aodd: "odd a"and"odd b ∧ odd ?c"by auto hence"even (?c^3 - b^3)"by simp moreoverfrom abc have"?c^3-b^3 = a^3"by simp ultimatelyhave"even (a^3)"by auto hence"even (a)"by simp with aodd show False by simp qed moreover
{ assume"even (a)" thenobtain u v w where uvwabc: "u = -b ∧ v = ?c ∧ w = a ∧ even w" by auto moreoverwith abc have"u*v*w≠0"by auto moreoverhave uvw: "u^3+v^3=w^3" proof - from uvwabc have"u^3 + v^3 = (-1*b)^3 + ?c^3"by simp alsohave"… = (-1)^3*b^3 + ?c^3"by (simp only: power_mult_distrib) alsohave"… = - (b^3) + ?c^3"by auto alsowith abc and uvwabc have"… = w^3"by auto finallyshow ?thesis by simp qed moreoverhave"coprime u v" using‹coprime (a ^ 3) (b ^ 3)›proof (rule coprime_imp_coprime) fix h assume hu: "h dvd u"and"h dvd v" with uvwabc have"h dvd ?c*?c^2"by (simp only: dvd_mult2) with abc have"h dvd a^3+b^3"using power_Suc[of ?c 2] by simp moreoverfrom hu uvwabc have hb3: "h dvd b*b^2"by simp ultimatelyhave"h dvd a^3+b^3-b^3" using power_Suc [of b 2] dvd_diff [of h "a ^ 3 + b ^ 3""b ^ 3"] by simp with hb3 show"h dvd a^3""h dvd b^3"using power_Suc[of b 2] by auto qed ultimatelyhave"?Q u v w"using‹even a›by simp hence ?thesis by auto } moreover
{ assume"even b" thenobtain u v w where uvwabc: "u = -a ∧ v = ?c ∧ w = b ∧ even w" by auto moreoverwith abc have"u*v*w≠0"by auto moreoverhave uvw: "u^3+v^3=w^3" proof - from uvwabc have"u^3 + v^3 = (-1*a)^3 + ?c^3"by simp alsohave"… = (-1)^3*a^3 + ?c^3"by (simp only: power_mult_distrib) alsohave"… = - (a^3) + ?c^3"by auto alsowith abc and uvwabc have"… = w^3"by auto finallyshow ?thesis by simp qed moreoverhave"coprime u v" using‹coprime (a ^ 3) (b ^ 3)›proof (rule coprime_imp_coprime) fix h assume hu: "h dvd u"and"h dvd v" with uvwabc have"h dvd ?c*?c^2"by (simp only: dvd_mult2) with abc have"h dvd a^3+b^3"using power_Suc[of ?c 2] by simp moreoverfrom hu uvwabc have hb3: "h dvd a*a^2"by simp ultimatelyhave"h dvd a^3+b^3-a^3" using power_Suc [of a 2] dvd_diff [of h "a ^ 3 + b ^ 3""a ^ 3"] by simp with hb3 show"h dvd a^3"and"h dvd b^3"using power_Suc[of a 2] by auto qed ultimatelyhave"?Q u v w"using‹even b›by simp hence ?thesis by auto } moreover
{ assume"even ?c" thenobtain u v w where uvwabc: "u = a ∧ v = b ∧ w = ?c ∧ even w" by auto with abc ab have ?thesis by auto } ultimatelyshow ?thesis by auto qed hence"∃ w. ∃ u v. u^3 + v^3 = w^3 ∧ u*v*w ≠ (0::int) ∧ even w ∧ coprime u v" by auto
― ‹show contradiction using the earlier result› thus False by (auto simp only: no_rewritten_fermat3) qed
corollary fermat_mult3: assumes xyz: "(x::int)^n + y^n = z^n"and n: "3 dvd n" shows"x*y*z=0" proof - from n obtain m where"n = m*3"by (auto simp only: ac_simps dvd_def) with xyz have"(x^m)^3 + (y^m)^3 = (z^m)^3"by (simp only: power_mult) hence"(x^m)*(y^m)*(z^m) = 0"by (rule fermat_3) thus ?thesis by auto qed
end
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.28 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.