2. First Reductions Of The Problem
2.1. Goal
The goal of this chapter is to reduce Fermat's Last Theorem to one deep theorem of Mazur and one deep theorem of Wiles about a Galois representation.
2.2. Overview
The proof of Fermat's Last Theorem is by contradiction. We assume that we have
a counterexample a^n+b^n=c^n, and manipulate it until it satisfies the
axioms of a Frey package, a basic concept which we will explain below. From the
Frey package we build a Frey curve, an elliptic curve defined over \Q. We
then look at a certain representation of a Galois group coming from this
elliptic curve, and finally, using two very deep and independent theorems, one
due to Mazur and the other due to Wiles, we show that this representation is
both reducible and irreducible, the contradiction we seek.
2.3. Reduction To n >= 5 And Prime
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
fermatLastTheoremThree
- First reductions of the problem.
-
FermatLastTheorem.of_odd_primes[complete]
If there is a counterexample to Fermat's Last Theorem, then there is a
counterexample a^p+b^p=c^p with p an odd prime.
Code for Lemma2.1●1 theorem
Associated Lean declarations
-
FermatLastTheorem.of_odd_primes[complete]
-
FermatLastTheorem.of_odd_primes[complete]
-
theorem FermatLastTheorem.of_odd_primes (hprimes
∀ (p : ℕ), Nat.Prime p → Odd p → FermatLastTheoremFor p: ∀ (pℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.), Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ→ OddOdd.{u_2} {α : Type u_2} [Semiring α] (a : α) : PropAn element `a` of a semiring is odd if there exists `k` such `a = 2*k + 1`.pℕ→ FermatLastTheoremForFermatLastTheoremFor (n : ℕ) : PropStatement of Fermat's Last Theorem over the naturals for a given exponent.pℕ) : FermatLastTheoremFermatLastTheorem : PropStatement of Fermat's Last Theorem: `a ^ n + b ^ n = c ^ n` has no nontrivial natural solution when `n ≥ 3`. This is now a theorem of Wiles and Taylor--Wiles; see https://github.com/ImperialCollegeLondon/FLT for an ongoing Lean formalisation of a proof.theorem FermatLastTheorem.of_odd_primes (hprimes
∀ (p : ℕ), Nat.Prime p → Odd p → FermatLastTheoremFor p: ∀ (pℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.), Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ→ OddOdd.{u_2} {α : Type u_2} [Semiring α] (a : α) : PropAn element `a` of a semiring is odd if there exists `k` such `a = 2*k + 1`.pℕ→ FermatLastTheoremForFermatLastTheoremFor (n : ℕ) : PropStatement of Fermat's Last Theorem over the naturals for a given exponent.pℕ) : FermatLastTheoremFermatLastTheorem : PropStatement of Fermat's Last Theorem: `a ^ n + b ^ n = c ^ n` has no nontrivial natural solution when `n ≥ 3`. This is now a theorem of Wiles and Taylor--Wiles; see https://github.com/ImperialCollegeLondon/FLT for an ongoing Lean formalisation of a proof.To prove Fermat's Last Theorem, it suffices to prove it for odd prime exponents.
This proof is already in mathlib, but the TeX blueprint spells it out for completeness.
Say a^n + b^n = c^n is a counterexample to Fermat's Last Theorem. Every
positive integer is either a power of 2 or has an odd prime factor. If
n = kp has an odd prime factor p, then
(a^k)^p + (b^k)^p = (c^k)^p, which is the counterexample we seek.
It remains to deal with the case where n is a power of 2, so let us assume
this. We have 3 \le n by assumption, so n = 4k is a multiple of 4, and
thus (a^k)^4 + (b^k)^4 = (c^k)^4, giving a counterexample to Fermat's Last
Theorem for n = 4. But Fermat's theorem for exponent 4, already in mathlib,
says that this is impossible.
Euler proved Fermat's Last Theorem for p = 3.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
fermatLastTheoremThree[complete]
There are no solutions in positive integers to a^3+b^3=c^3.
Code for Lemma2.2●1 theorem
Associated Lean declarations
-
fermatLastTheoremThree[complete]
-
fermatLastTheoremThree[complete]
-
theorem fermatLastTheoremThree : FermatLastTheoremFor
FermatLastTheoremFor (n : ℕ) : PropStatement of Fermat's Last Theorem over the naturals for a given exponent.3theorem fermatLastTheoremThree : FermatLastTheoremFor
FermatLastTheoremFor (n : ℕ) : PropStatement of Fermat's Last Theorem over the naturals for a given exponent.3Fermat's Last Theorem for `n = 3`: if `a b c : ℕ` are all non-zero then `a ^ 3 + b ^ 3 ≠ c ^ 3`.
The proof in mathlib was formalized by a team from the Lean For the Curious
Mathematician conference held in Luminy in March 2024.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
FermatLastTheorem.of_p_ge_5[complete]
If there is a counterexample to Fermat's Last Theorem, then there is a
counterexample a^p+b^p=c^p with p prime and p \ge 5.
Code for Corollary2.3●1 theorem
Associated Lean declarations
-
FermatLastTheorem.of_p_ge_5[complete]
-
FermatLastTheorem.of_p_ge_5[complete]
-
theorem FermatLastTheorem.of_p_ge_5 (H
∀ p ≥ 5, Nat.Prime p → FermatLastTheoremFor p: ∀ pℕ≥ 5, Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ→ FermatLastTheoremForFermatLastTheoremFor (n : ℕ) : PropStatement of Fermat's Last Theorem over the naturals for a given exponent.pℕ) : FermatLastTheoremFermatLastTheorem : PropStatement of Fermat's Last Theorem: `a ^ n + b ^ n = c ^ n` has no nontrivial natural solution when `n ≥ 3`. This is now a theorem of Wiles and Taylor--Wiles; see https://github.com/ImperialCollegeLondon/FLT for an ongoing Lean formalisation of a proof.theorem FermatLastTheorem.of_p_ge_5 (H
∀ p ≥ 5, Nat.Prime p → FermatLastTheoremFor p: ∀ pℕ≥ 5, Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ→ FermatLastTheoremForFermatLastTheoremFor (n : ℕ) : PropStatement of Fermat's Last Theorem over the naturals for a given exponent.pℕ) : FermatLastTheoremFermatLastTheorem : PropStatement of Fermat's Last Theorem: `a ^ n + b ^ n = c ^ n` has no nontrivial natural solution when `n ≥ 3`. This is now a theorem of Wiles and Taylor--Wiles; see https://github.com/ImperialCollegeLondon/FLT for an ongoing Lean formalisation of a proof.If Fermat's Last Theorem is true for primes `p ≥ 5`, then FLT is true.
2.4. Frey Packages
For convenience we make the following definition.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
FreyPackage[complete]
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Uses target in- proof
-
-
Definition 2.6Blueprint label
-
FreyCurve
Uses target in- statement
-
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
- proof
A Frey package (a,b,c,p) is three nonzero pairwise-coprime integers a,
b, and c, with a \equiv 3 \pmod 4 and b \equiv 0 \pmod 2, together
with a prime p \ge 5, such that a^p+b^p=c^p.
Code for Definition2.4●1 definition
Associated Lean declarations
-
FreyPackage[complete]
-
FreyPackage[complete]
-
structure FreyPackage : Type
A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.structure FreyPackage : Type
A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.A *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$
Constructor
FreyPackage.mk (a
ℤbℤcℤ: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).) (ha0a ≠ 0: aℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hb0b ≠ 0: bℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hc0c ≠ 0: cℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (pℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.) (ppNat.Prime p: Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ) (hp55 ≤ p: 5 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`. * The recommended spelling of `<=` in identifiers is `le` (prefer `≤` over `<=`).pℕ) (hFLTa ^ p + b ^ p = c ^ p: aℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.bℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.cℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ) (hgcdabgcd a b = 1: gcdGCDMonoid.gcd.{u_2} {α : Type u_2} {inst✝ : CommMonoidWithZero α} [self : GCDMonoid α] : α → α → αThe greatest common divisor between two elements.aℤbℤ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1) (ha4↑a = 3: ↑aℤ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.3) (hb2↑b = 0: ↑bℤ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) : FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$Fields
a
ℤThe integer `a` in the Frey package.: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).The integer `a` in the Frey package.
b
ℤThe integer `b` in the Frey package.: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).The integer `b` in the Frey package.
c
ℤThe integer `c` in the Frey package.: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).The integer `c` in the Frey package.
ha0
self.a ≠ 0: selfFreyPackage.aFreyPackage.a (self : FreyPackage) : ℤThe integer `a` in the Frey package.≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0hb0
self.b ≠ 0: selfFreyPackage.bFreyPackage.b (self : FreyPackage) : ℤThe integer `b` in the Frey package.≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0hc0
self.c ≠ 0: selfFreyPackage.cFreyPackage.c (self : FreyPackage) : ℤThe integer `c` in the Frey package.≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0p
ℕThe prime number `p` in the Frey package.: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.The prime number `p` in the Frey package.
pp
Nat.Prime self.p: Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.selfFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.hp5
5 ≤ self.p: 5 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`. * The recommended spelling of `<=` in identifiers is `le` (prefer `≤` over `<=`).selfFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.hFLT
self.a ^ self.p + self.b ^ self.p = self.c ^ self.p: selfFreyPackage.aFreyPackage.a (self : FreyPackage) : ℤThe integer `a` in the Frey package.^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.selfFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.selfFreyPackage.bFreyPackage.b (self : FreyPackage) : ℤThe integer `b` in the Frey package.^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.selfFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.selfFreyPackage.cFreyPackage.c (self : FreyPackage) : ℤThe integer `c` in the Frey package.^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.selfFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.hgcdab
gcd self.a self.b = 1: gcdGCDMonoid.gcd.{u_2} {α : Type u_2} {inst✝ : CommMonoidWithZero α} [self : GCDMonoid α] : α → α → αThe greatest common divisor between two elements.selfFreyPackage.aFreyPackage.a (self : FreyPackage) : ℤThe integer `a` in the Frey package.selfFreyPackage.bFreyPackage.b (self : FreyPackage) : ℤThe integer `b` in the Frey package.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1ha4
↑self.a = 3: ↑selfFreyPackage.aFreyPackage.a (self : FreyPackage) : ℤThe integer `a` in the Frey package.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.3hb2
↑self.b = 0: ↑selfFreyPackage.bFreyPackage.b (self : FreyPackage) : ℤThe integer `b` in the Frey package.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0
Our next reduction is as follows.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
If Fermat's Last Theorem is false for p prime and p \ge 5, then there
exists a Frey package.
Code for Lemma2.5●1 theorem
Associated Lean declarations
-
theorem FreyPackage.of_not_FermatLastTheorem_p_ge_5 {a
ℤbℤcℤ: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).} (haa ≠ 0: aℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hbb ≠ 0: bℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hcc ≠ 0: cℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) {pℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.} (ppNat.Prime p: Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ) (hp55 ≤ p: 5 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`. * The recommended spelling of `<=` in identifiers is `le` (prefer `≤` over `<=`).pℕ) (Ha ^ p + b ^ p = c ^ p: aℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.bℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.cℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$theorem FreyPackage.of_not_FermatLastTheorem_p_ge_5 {a
ℤbℤcℤ: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).} (haa ≠ 0: aℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hbb ≠ 0: bℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hcc ≠ 0: cℤ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) {pℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.} (ppNat.Prime p: Nat.PrimeNat.Prime (p : ℕ) : Prop`Nat.Prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`. The theorem `Nat.prime_def` witnesses this description of a prime number.pℕ) (hp55 ≤ p: 5 ≤LE.le.{u} {α : Type u} [self : LE α] : α → α → PropThe less-equal relation: `x ≤ y` Conventions for notations in identifiers: * The recommended spelling of `≤` in identifiers is `le`. * The recommended spelling of `<=` in identifiers is `le` (prefer `≤` over `<=`).pℕ) (Ha ^ p + b ^ p = c ^ p: aℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.bℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.cℤ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.pℕ) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$Given a counterexample a^p+b^p=c^p to Fermat's Last Theorem with p>=5, there exists a Frey package.
Suppose we have a counterexample
A Frey package a^p+b^p=c^p; we now build a Frey package
from this data, following the arithmetic normalization recorded in
Definition 2.4(a,b,c,p) is three nonzero pairwise-coprime integers a,
b, and c, with a \equiv 3 \pmod 4 and b \equiv 0 \pmod 2, together
with a prime p \ge 5, such that a^p+b^p=c^p.
If the greatest common divisor of a, b, and c is d, then
a^p+b^p=c^p implies (a/d)^p+(b/d)^p=(c/d)^p. Dividing through, we may
thus assume that no prime divides all of a, b, and c. Under this
assumption, the three integers are pairwise coprime, because if some prime
divides two of them then the equation forces it to divide the third as well.
In particular, not all of a, b, and c are even, and reducing modulo 2
shows that precisely one of them must be even.
Next we arrange that b is the even one. If a is even, we switch a and
b. If c is even, we replace c by -b and b by -c, using that p is
odd.
The last thing to ensure is that a is 3 modulo 4. Because b is even,
we know that a is odd, so it is either 1 or 3 modulo 4. If a is
already 3 modulo 4 then we are done; if a is 1 modulo 4, we replace
a, b, and c by their negatives, and this gives the Frey package we seek.
2.5. Galois Representations And Elliptic Curves
To continue, we need some of the theory of elliptic curves over \Q. Let
f(X) denote a monic cubic polynomial with rational coefficients whose three
complex roots are distinct, and consider the equation E : Y^2 = f(X). This
defines a curve in the (X,Y)-plane, and more precisely its projectivization
is an elliptic curve over \Q.
If E : Y^2 = f(X) is an elliptic curve over \Q, and if K is any field
of characteristic zero, then E(K) denotes the set of solutions to
y^2=f(x) with x,y \in K, together with a point at infinity. It is an
extraordinary fact, and not at all obvious, that E(K) naturally has the
structure of an additive abelian group with the point at infinity as identity.
This group law is already in mathlib. It has the further property that three
distinct points P, Q, and R of E(K) sum to zero if and only if they are
collinear.
The group structure behaves well under change of field: if E is an elliptic
curve over \Q and K -> L is a homomorphism of characteristic-zero fields,
then the induced map E(K) -> E(L) is a group homomorphism. If K -> L is an
isomorphism, then the induced map is an isomorphism with inverse obtained from
the inverse field map. This gives an action of the multiplicative group
\Aut(K) of automorphisms of K on E(K), and hence on the n-torsion
subgroup E(K)[n]. In particular, if \Qbar denotes an algebraic closure of
\Q and \GQ denotes the group of field automorphisms \Qbar \to \Qbar,
then for any elliptic curve E over \Q we obtain an action of \GQ on
E(\Qbar) and hence on E(\Qbar)[n].
If furthermore n = p is prime, then E(\Qbar)[p] is naturally a vector space
over \Z/p\Z, and therefore it inherits the structure of a mod p
representation of \GQ. This is the mod p Galois representation attached to
the elliptic curve E, and it is well-known to be 2-dimensional. We call it
\rho_{E,p}.
In the next section we apply this theory to the elliptic curve coming from a counterexample to Fermat's Last Theorem.
2.6. The Frey Curve
Recall that a Frey package (a,b,c,p) is a prime p \ge 5 and nonzero
pairwise-coprime integers a, b, and c satisfying a^p+b^p=c^p and the
congruences a \equiv 3 \pmod 4 and b \equiv 0 \pmod 2. We have shown
above that if Fermat's Last Theorem is false, then a Frey package exists.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
FreyPackage.freyCurve[complete]
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Uses target in- statement
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Uses target in- statement
-
-
Mazur_Frey
- statement
Definition 2.4
Given a Frey package (a,b,c,p), the corresponding Frey curve is the elliptic
curve over \Q (considered by Frey and, before him, Hellegouarch) defined by the equation
Y^2 = X(X-a^p)(X+b^p).
Code for Definition2.6●1 definition
Associated Lean declarations
-
FreyPackage.freyCurve[complete]
-
FreyPackage.freyCurve[complete]
-
def FreyPackage.freyCurve (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : WeierstrassCurveWeierstrassCurve.{u} (R : Type u) : Type uA Weierstrass curve `Y² + a₁XY + a₃Y = X³ + a₂X² + a₄X + a₆` with parameters `aᵢ`.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.def FreyPackage.freyCurve (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : WeierstrassCurveWeierstrassCurve.{u} (R : Type u) : Type uA Weierstrass curve `Y² + a₁XY + a₃Y = X³ + a₂X² + a₄X + a₆` with parameters `aᵢ`.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.The elliptic curve over `ℚ` associated to a Frey package. The conditions imposed upon a Frey package guarantee that the running hypotheses in Section 4.1 of [Serre] all hold. We put the curve into the form where the equation is semistable at 2, rather than the usual `Y^2=X(X-a^p)(X+b^p)` form. The change of variables is `X=4x` and `Y=8y+4x`, and then divide through by 64.
Note that the roots of the cubic X(X-a^p)(X+b^p) are distinct because a,
b, and c are nonzero and a^p+b^p=c^p.
Given a Frey package (a,b,c,p) with corresponding Frey curve E, the mod
p Galois representation \rho_{E,p} attached to this package is the
2-dimensional representation of \GQ on E(\Qbar)[p] described above.
Frey's observation is that this representation has some very surprising
properties. We will make this remark more explicit in the next chapter. Here we
shall show how these properties can be used to finish the job.
2.7. Reduction To Two Big Theorems
Recall that a representation of a group G on a vector space W is said to be
irreducible if there are precisely two G-stable subspaces of W, namely 0
and W. The representation is said to be reducible otherwise.
Now let (a,b,c,p) be a Frey package. Consider the mod p representation of
\GQ coming from the p-torsion in the Frey curve associated to the package,
and call this representation \rho. Is \rho irreducible or not?
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
Mazur_Frey[sorry in proof]
Definition 2.6
Definition 2.4
Given a Frey package (a,b,c,p), the corresponding Frey curve is the elliptic
curve over \Q (considered by Frey and, before him, Hellegouarch) defined by the equation
Y^2 = X(X-a^p)(X+b^p).\rho is the mod p Galois representation associated to a Frey package
(a,b,c,p) then \rho is irreducible.
Code for Theorem2.7●1 theorem, incomplete
Associated Lean declarations
-
Mazur_Frey[sorry in proof]
-
Mazur_Frey[sorry in proof]
-
theorem Mazur_Frey (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : (PFreyPackage.freyCurveFreyPackage.freyCurve (P : FreyPackage) : WeierstrassCurve ℚThe elliptic curve over `ℚ` associated to a Frey package. The conditions imposed upon a Frey package guarantee that the running hypotheses in Section 4.1 of [Serre] all hold. We put the curve into the form where the equation is semistable at 2, rather than the usual `Y^2=X(X-a^p)(X+b^p)` form. The change of variables is `X=4x` and `Y=8y+4x`, and then divide through by 64..galoisRepWeierstrassCurve.galoisRep.{u} {K : Type u} [Field K] (E : WeierstrassCurve K) [E.IsElliptic] [DecidableEq K] [DecidableEq (AlgebraicClosure K)] (n : ℕ) (hn : 0 < n) : GaloisRep K (ZMod n) ((E.map (algebraMap K (AlgebraicClosure K))).n_torsion n)The continuous Galois representation associated to an elliptic curve over a field.PFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.⋯).IsIrreducibleGaloisRep.IsIrreducible.{uK, u_4, u_7} {K : Type uK} [Field K] {M : Type u_4} [AddCommGroup M] {k : Type u_7} [Field k] [TopologicalSpace k] [Module k M] (ρ : GaloisRep K k M) : PropIrreducibility of a Galois representation over a field.theorem Mazur_Frey (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : (PFreyPackage.freyCurveFreyPackage.freyCurve (P : FreyPackage) : WeierstrassCurve ℚThe elliptic curve over `ℚ` associated to a Frey package. The conditions imposed upon a Frey package guarantee that the running hypotheses in Section 4.1 of [Serre] all hold. We put the curve into the form where the equation is semistable at 2, rather than the usual `Y^2=X(X-a^p)(X+b^p)` form. The change of variables is `X=4x` and `Y=8y+4x`, and then divide through by 64..galoisRepWeierstrassCurve.galoisRep.{u} {K : Type u} [Field K] (E : WeierstrassCurve K) [E.IsElliptic] [DecidableEq K] [DecidableEq (AlgebraicClosure K)] (n : ℕ) (hn : 0 < n) : GaloisRep K (ZMod n) ((E.map (algebraMap K (AlgebraicClosure K))).n_torsion n)The continuous Galois representation associated to an elliptic curve over a field.PFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.⋯).IsIrreducibleGaloisRep.IsIrreducible.{uK, u_4, u_7} {K : Type uK} [Field K] {M : Type u_4} [AddCommGroup M] {k : Type u_7} [Field k] [TopologicalSpace k] [Module k M] (ρ : GaloisRep K k M) : PropIrreducibility of a Galois representation over a field.
[??]
This follows from a profound and long result of Mazur
(Mazur, 19771977, namely the fact that the torsion
subgroup of an elliptic curve over \Q can have size at most 16. In fact
there is still a little more work which needs to be done to deduce the theorem
from Mazur's result. A pre-1990 reference for the full proof of this claim is
Proposition 6 in Section 4.1 of
(Serre, 1987
Note that in the first (pre-2029) phase of the FLT project, we will not be
working on a formalization of this result, as it was known in the 1980s. We
will however be thinking a lot about the next result, which says the exact
opposite.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
Wiles_Frey[complete]
Definition 2.6
If \rho is the mod p Galois representation associated to a Frey package
(a,b,c,p) then \rho is reducible.
Code for Theorem2.8●1 theorem
Associated Lean declarations
-
Wiles_Frey[complete]
-
Wiles_Frey[complete]
-
theorem Wiles_Frey (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.(PFreyPackage.freyCurveFreyPackage.freyCurve (P : FreyPackage) : WeierstrassCurve ℚThe elliptic curve over `ℚ` associated to a Frey package. The conditions imposed upon a Frey package guarantee that the running hypotheses in Section 4.1 of [Serre] all hold. We put the curve into the form where the equation is semistable at 2, rather than the usual `Y^2=X(X-a^p)(X+b^p)` form. The change of variables is `X=4x` and `Y=8y+4x`, and then divide through by 64..galoisRepWeierstrassCurve.galoisRep.{u} {K : Type u} [Field K] (E : WeierstrassCurve K) [E.IsElliptic] [DecidableEq K] [DecidableEq (AlgebraicClosure K)] (n : ℕ) (hn : 0 < n) : GaloisRep K (ZMod n) ((E.map (algebraMap K (AlgebraicClosure K))).n_torsion n)The continuous Galois representation associated to an elliptic curve over a field.PFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.⋯).IsIrreducibleGaloisRep.IsIrreducible.{uK, u_4, u_7} {K : Type uK} [Field K] {M : Type u_4} [AddCommGroup M] {k : Type u_7} [Field k] [TopologicalSpace k] [Module k M] (ρ : GaloisRep K k M) : PropIrreducibility of a Galois representation over a field.theorem Wiles_Frey (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.(PFreyPackage.freyCurveFreyPackage.freyCurve (P : FreyPackage) : WeierstrassCurve ℚThe elliptic curve over `ℚ` associated to a Frey package. The conditions imposed upon a Frey package guarantee that the running hypotheses in Section 4.1 of [Serre] all hold. We put the curve into the form where the equation is semistable at 2, rather than the usual `Y^2=X(X-a^p)(X+b^p)` form. The change of variables is `X=4x` and `Y=8y+4x`, and then divide through by 64..galoisRepWeierstrassCurve.galoisRep.{u} {K : Type u} [Field K] (E : WeierstrassCurve K) [E.IsElliptic] [DecidableEq K] [DecidableEq (AlgebraicClosure K)] (n : ℕ) (hn : 0 < n) : GaloisRep K (ZMod n) ((E.map (algebraMap K (AlgebraicClosure K))).n_torsion n)The continuous Galois representation associated to an elliptic curve over a field.PFreyPackage.pFreyPackage.p (self : FreyPackage) : ℕThe prime number `p` in the Frey package.⋯).IsIrreducibleGaloisRep.IsIrreducible.{uK, u_4, u_7} {K : Type uK} [Field K] {M : Type u_4} [AddCommGroup M] {k : Type u_7} [Field k] [TopologicalSpace k] [Module k M] (ρ : GaloisRep K k M) : PropIrreducibility of a Galois representation over a field.
Theorem 3.2
Definition 3.1
The
If \ell-torsion representation in the Frey curve attached to a Frey package
(a,b,c,\ell) is hardly ramified.\ell \ge 3 is prime and
\rho : \GQ \to \GL_2(\mathbf{Z}/\ell\mathbf{Z})
is hardly ramified, then \rho is reducible.Frey_curve_hardly_ramified, which shows that the
Frey representation is hardly ramified, together with theorem
hardly_ramified_reducible, which shows that any hardly ramified mod p
representation is reducible.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.10Blueprint label
-
FLT
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
FreyPackage.false[complete]
Theorem 2.7
Definition 2.6
If
Definition 2.6
If \rho is the mod p Galois representation associated to a Frey package
(a,b,c,p) then \rho is irreducible.\rho is the mod p Galois representation associated to a Frey package
(a,b,c,p) then \rho is reducible.
Code for Corollary2.9●1 theorem
Associated Lean declarations
-
FreyPackage.false[complete]
-
FreyPackage.false[complete]
-
theorem FreyPackage.false (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : FalseFalse : Prop`False` is the empty proposition. Thus, it has no introduction rules. It represents a contradiction. `False` elimination rule, `False.rec`, expresses the fact that anything follows from a contradiction. This rule is sometimes called ex falso (short for ex falso sequitur quodlibet), or the principle of explosion. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic)theorem FreyPackage.false (P
FreyPackage: FreyPackageFreyPackage : TypeA *Frey Package* is a 4-tuple (a,b,c,p) of integers satisfying $a^p+b^p=c^p$ and some other inequalities and congruences. These facts guarantee that all of the all the results in section 4.1 of Serre's paper [serre] apply to the curve $Y^2=X(X-a^p)(X+b^p).$) : FalseFalse : Prop`False` is the empty proposition. Thus, it has no introduction rules. It represents a contradiction. `False` elimination rule, `False.rec`, expresses the fact that anything follows from a contradiction. This rule is sometimes called ex falso (short for ex falso sequitur quodlibet), or the principle of explosion. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic)There is no Frey package. This profound result is proved using work of Mazur and Wiles/Ribet to rule out all possibilities for the $p$-torsion in the corresponding Frey curve.
Follows immediately from the previous two theorems.
We deduce.
-
Lemma 2.1Blueprint label
-
«FermatLastTheorem.of_odd_primes»
Group- First reductions of the problem.
-
-
Lemma 2.2Blueprint label
-
fermatLastTheoremThree
Group- First reductions of the problem.
-
-
Corollary 2.3Blueprint label
-
«FermatLastTheorem.of_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.4Blueprint label
-
FreyPackage
Group- First reductions of the problem.
-
-
Lemma 2.5Blueprint label
-
«FreyPackage.of_not_FermatLastTheorem_p_ge_5»
Group- First reductions of the problem.
-
-
Definition 2.6Blueprint label
-
FreyCurve
Group- First reductions of the problem.
-
-
Theorem 2.7Blueprint label
-
Mazur_Frey
Group- First reductions of the problem.
-
-
Theorem 2.8Blueprint label
-
Wiles_Frey
Group- First reductions of the problem.
-
-
Corollary 2.9Blueprint label
-
«FreyPackage.false»
Group- First reductions of the problem.
-
-
«FermatLastTheorem.of_odd_primes»
- First reductions of the problem.
-
Wiles_Taylor_Wiles[complete]
Fermat's Last Theorem is true. In other words, there are no positive integers
a, b, and c and natural numbers n >= 3 such that a^n+b^n=c^n.
Code for Corollary2.10●1 theorem
Associated Lean declarations
-
Wiles_Taylor_Wiles[complete]
-
Wiles_Taylor_Wiles[complete]
-
theorem Wiles_Taylor_Wiles : FermatLastTheorem
FermatLastTheorem : PropStatement of Fermat's Last Theorem: `a ^ n + b ^ n = c ^ n` has no nontrivial natural solution when `n ≥ 3`. This is now a theorem of Wiles and Taylor--Wiles; see https://github.com/ImperialCollegeLondon/FLT for an ongoing Lean formalisation of a proof.theorem Wiles_Taylor_Wiles : FermatLastTheorem
FermatLastTheorem : PropStatement of Fermat's Last Theorem: `a ^ n + b ^ n = c ^ n` has no nontrivial natural solution when `n ≥ 3`. This is now a theorem of Wiles and Taylor--Wiles; see https://github.com/ImperialCollegeLondon/FLT for an ongoing Lean formalisation of a proof.Fermat's Last Theorem is true
Assume there is a counterexample
If there is a counterexample to Fermat's Last Theorem, then there is a
counterexample
If Fermat's Last Theorem is false for
Theorem 2.7
Theorem 2.8
There is no Frey package.a^n+b^n=c^n. By
Corollary 2.3a^p+b^p=c^p with p prime and p \ge 5.a^p+b^p=c^p, where p is prime and p \ge 5.
Then
Lemma 2.5p prime and p \ge 5, then there
exists a Frey package.
Because we are, for now at least, assuming Mazur's theorem, we now turn our
attention to a proof of theorem Wiles_Frey. We start on this proof
in the next chapter.