Theorem: div_zeta_sub_one_Injective (FltRegular/CaseII/InductionStep.lean)

State before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
⊢ Function.Injective fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)
Tactic:
letI : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
State after:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
⊢ Function.Injective fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)

State before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
⊢ Function.Injective fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)
Tactic:
intros η₁ η₂
State after:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
⊢ (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
      (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂ →
    η₁ = η₂

State before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
⊢ (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
      (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂ →
    η₁ = η₂
Tactic:
contrapose
State after:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
⊢ ¬η₁ = η₂ →
    ¬(fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
        (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂

State before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
⊢ ¬η₁ = η₂ →
    ¬(fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
        (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂
Tactic:
intro e₁ e₂
State after:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ :
  (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
    (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂
⊢ False

State before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ :
  (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
    (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂
⊢ False
Tactic:
apply hy
State after:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ :
  (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
    (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂
⊢ π ∣ y

State before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ :
  (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₁ =
    (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e η)) η₂
⊢ π ∣ y
Tactic:
obtain ⟨u, e⟩ := div_zeta_sub_one_sub hp hζ e η₁ η₂ e₁
State after:
case intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e✝ : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ :
  (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η)) η₁ =
    (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η)) η₂
u : (𝓞 K)ˣ
e : y * ↑u = div_zeta_sub_one hp hζ e✝ η₁ - div_zeta_sub_one hp hζ e✝ η₂
⊢ π ∣ y

State before:
case intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e✝ : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ :
  (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η)) η₁ =
    (fun η => (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η)) η₂
u : (𝓞 K)ˣ
e : y * ↑u = div_zeta_sub_one hp hζ e✝ η₁ - div_zeta_sub_one hp hζ e✝ η₂
⊢ π ∣ y
Tactic:
dsimp only at e₂
State after:
case intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e✝ : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ : (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η₁) = (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η₂)
u : (𝓞 K)ˣ
e : y * ↑u = div_zeta_sub_one hp hζ e✝ η₁ - div_zeta_sub_one hp hζ e✝ η₂
⊢ π ∣ y

State before:
case intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {p} ℚ K
hp : p ≠ 2
inst✝ : Fintype (ClassGroup (𝓞 K))
hreg : (↑p).Coprime (Fintype.card (ClassGroup (𝓞 K)))
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
x y z : 𝓞 K
ε : (𝓞 K)ˣ
m : ℕ
e✝ : x ^ ↑p + y ^ ↑p = ↑ε * (π ^ (m + 1) * z) ^ ↑p
hy : ¬π ∣ y
hz : ¬π ∣ z
η : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
this : AddGroup (𝓞 K ⧸ 𝔭) := inferInstance
η₁ η₂ : { x // x ∈ nthRootsFinset (↑p) (𝓞 K) }
e₁ : ¬η₁ = η₂
e₂ : (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η₁) = (Ideal.Quotient.mk 𝔭) (div_zeta_sub_one hp hζ e✝ η₂)
u : (𝓞 K)ˣ
e : y * ↑u = div_zeta_sub_one hp hζ e✝ η₁ - div_zeta_sub_one hp hζ e✝ η₂
⊢ π ∣ y
Tactic:
rwa [← sub_eq_zero, ← map_sub, ← e, Ideal.Quotient.eq_zero_iff_dvd, u.isUnit.dvd_mul_right] at e₂
State after:
no goals