internlm/Lean-Github huggingface dataset:
Theorem: systemOfUnits.IsFundamental.corollary
Proof state before:
case intro.intro.intro.e_f.h
p : ℕ+
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : NumberField K
k : Type u_2
inst✝⁸ : Field k
inst✝⁷ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁶ : AddCommGroup G
inst✝⁵ : CommGroup H
inst✝⁴ : Fintype H
hCard : Fintype.card H = ↑p
σ : H
hσ : Subgroup.zpowers σ = ⊤
r : ℕ
inst✝³ : DistribMulAction H G
inst✝² : Module.Free ℤ G
inst✝¹ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝ : Module A G
S : systemOfUnits p G r
hs : IsFundamental p G r S
a : Fin r → ℤ
g : G
hg : (1 - zeta ↑p) • g = ∑ i : Fin r, a i • S.units i
i : Fin r
hi : ¬↑↑p ∣ a i
this : Fact (↑p).Prime := { out := hp }
x y : A
e : x * (1 - zeta ↑p) + y * ↑(a i) = 1
b' : Fin r → A := fun j => x * (1 - zeta ↑p) + y * ↑(a j)
b : Fin r →₀ A := Finsupp.ofSupportFinite b' ⋯
hb : b i = 1
j : Fin r
⊢ ((1 - zeta ↑p) * x) • S.units j + y • a j • S.units j = (x * (1 - zeta ↑p)) • S.units j + (y * ↑(a j)) • S.units j
Tactic:
congr 1
Proof state after:
case intro.intro.intro.e_f.h.e_a
p : ℕ+
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : NumberField K
k : Type u_2
inst✝⁸ : Field k
inst✝⁷ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁶ : AddCommGroup G
inst✝⁵ : CommGroup H
inst✝⁴ : Fintype H
hCard : Fintype.card H = ↑p
σ : H
hσ : Subgroup.zpowers σ = ⊤
r : ℕ
inst✝³ : DistribMulAction H G
inst✝² : Module.Free ℤ G
inst✝¹ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝ : Module A G
S : systemOfUnits p G r
hs : IsFundamental p G r S
a : Fin r → ℤ
g : G
hg : (1 - zeta ↑p) • g = ∑ i : Fin r, a i • S.units i
i : Fin r
hi : ¬↑↑p ∣ a i
this : Fact (↑p).Prime := { out := hp }
x y : A
e : x * (1 - zeta ↑p) + y * ↑(a i) = 1
b' : Fin r → A := fun j => x * (1 - zeta ↑p) + y * ↑(a j)
b : Fin r →₀ A := Finsupp.ofSupportFinite b' ⋯
hb : b i = 1
j : Fin r
⊢ ((1 - zeta ↑p) * x) • S.units j = (x * (1 - zeta ↑p)) • S.units j

case intro.intro.intro.e_f.h.e_a
p : ℕ+
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : NumberField K
k : Type u_2
inst✝⁸ : Field k
inst✝⁷ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁶ : AddCommGroup G
inst✝⁵ : CommGroup H
inst✝⁴ : Fintype H
hCard : Fintype.card H = ↑p
σ : H
hσ : Subgroup.zpowers σ = ⊤
r : ℕ
inst✝³ : DistribMulAction H G
inst✝² : Module.Free ℤ G
inst✝¹ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝ : Module A G
S : systemOfUnits p G r
hs : IsFundamental p G r S
a : Fin r → ℤ
g : G
hg : (1 - zeta ↑p) • g = ∑ i : Fin r, a i • S.units i
i : Fin r
hi : ¬↑↑p ∣ a i
this : Fact (↑p).Prime := { out := hp }
x y : A
e : x * (1 - zeta ↑p) + y * ↑(a i) = 1
b' : Fin r → A := fun j => x * (1 - zeta ↑p) + y * ↑(a j)
b : Fin r →₀ A := Finsupp.ofSupportFinite b' ⋯
hb : b i = 1
j : Fin r
⊢ y • a j • S.units j = (y * ↑(a j)) • S.units j
Theorem: systemOfUnits.IsFundamental.corollary
Proof state before:
case intro.intro.intro.e_f.h.e_a
p : ℕ+
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : NumberField K
k : Type u_2
inst✝⁸ : Field k
inst✝⁷ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁶ : AddCommGroup G
inst✝⁵ : CommGroup H
inst✝⁴ : Fintype H
hCard : Fintype.card H = ↑p
σ : H
hσ : Subgroup.zpowers σ = ⊤
r : ℕ
inst✝³ : DistribMulAction H G
inst✝² : Module.Free ℤ G
inst✝¹ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝ : Module A G
S : systemOfUnits p G r
hs : IsFundamental p G r S
a : Fin r → ℤ
g : G
hg : (1 - zeta ↑p) • g = ∑ i : Fin r, a i • S.units i
i : Fin r
hi : ¬↑↑p ∣ a i
this : Fact (↑p).Prime := { out := hp }
x y : A
e : x * (1 - zeta ↑p) + y * ↑(a i) = 1
b' : Fin r → A := fun j => x * (1 - zeta ↑p) + y * ↑(a j)
b : Fin r →₀ A := Finsupp.ofSupportFinite b' ⋯
hb : b i = 1
j : Fin r
⊢ ((1 - zeta ↑p) * x) • S.units j = (x * (1 - zeta ↑p)) • S.units j
Tactic:
rw [mul_comm]
Proof state after:
no goals
Theorem: systemOfUnits.IsFundamental.corollary
Proof state before:
case intro.intro.intro.e_f.h.e_a
p : ℕ+
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : NumberField K
k : Type u_2
inst✝⁸ : Field k
inst✝⁷ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁶ : AddCommGroup G
inst✝⁵ : CommGroup H
inst✝⁴ : Fintype H
hCard : Fintype.card H = ↑p
σ : H
hσ : Subgroup.zpowers σ = ⊤
r : ℕ
inst✝³ : DistribMulAction H G
inst✝² : Module.Free ℤ G
inst✝¹ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝ : Module A G
S : systemOfUnits p G r
hs : IsFundamental p G r S
a : Fin r → ℤ
g : G
hg : (1 - zeta ↑p) • g = ∑ i : Fin r, a i • S.units i
i : Fin r
hi : ¬↑↑p ∣ a i
this : Fact (↑p).Prime := { out := hp }
x y : A
e : x * (1 - zeta ↑p) + y * ↑(a i) = 1
b' : Fin r → A := fun j => x * (1 - zeta ↑p) + y * ↑(a j)
b : Fin r →₀ A := Finsupp.ofSupportFinite b' ⋯
hb : b i = 1
j : Fin r
⊢ y • a j • S.units j = (y * ↑(a j)) • S.units j
Tactic:
rw [← intCast_smul (k := A), smul_smul]
Proof state after:
no goals
Theorem: systemOfUnits.IsFundamental.corollary
Proof state before:
case intro.intro.intro.h
p : ℕ+
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : NumberField K
k : Type u_2
inst✝⁸ : Field k
inst✝⁷ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁶ : AddCommGroup G
inst✝⁵ : CommGroup H
inst✝⁴ : Fintype H
hCard : Fintype.card H = ↑p
σ : H
hσ : Subgroup.zpowers σ = ⊤
r : ℕ
inst✝³ : DistribMulAction H G
inst✝² : Module.Free ℤ G
inst✝¹ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝ : Module A G
S : systemOfUnits p G r
hs : IsFundamental p G r S
a : Fin r → ℤ
g : G
hg : (1 - zeta ↑p) • g = ∑ i : Fin r, a i • S.units i
i : Fin r
hi : ¬↑↑p ∣ a i
this : Fact (↑p).Prime := { out := hp }
x y : A
e : x * (1 - zeta ↑p) + y * ↑(a i) = 1
b' : Fin r → A := fun j => x * (1 - zeta ↑p) + y * ↑(a j)
b : Fin r →₀ A := Finsupp.ofSupportFinite b' ⋯
hb : b i = 1
⊢ ∀ (i : Fin r), 0 • S.units i = 0
Tactic:
simp
Proof state after:
no goals
Theorem: isTors'
Proof state before:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
⊢ Module.IsTorsionBySet ℤ[X]
    (Module.AEval'
      ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
        (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
    ↑(Ideal.span {cyclotomic ↑p ℤ})
Tactic:
classical
have := Fact.mk hp
rw [← Module.isTorsionBySet_iff_is_torsion_by_span, Module.isTorsionBySet_singleton_iff]
intro x
obtain ⟨x, rfl⟩ := (Module.AEval.of _ _ _).surjective x
obtain ⟨x, rfl⟩ := Additive.ofMul.surjective x
obtain ⟨x, rfl⟩ := QuotientGroup.mk_surjective x
rw [← Module.AEval.of_aeval_smul]
simp_rw [LinearMap.smul_def, Polynomial.cyclotomic_prime ℤ p, AddEquivClass.map_eq_zero_iff,
  map_sum, map_pow, aeval_X, LinearMap.coeFn_sum, sum_apply, ← relativeUnitsMapHom_apply,
  ← map_pow, ← Units.val_pow_eq_pow_val, ← map_pow, AlgEquiv.val_algHomUnitsEquiv_symm_apply,
  relativeUnitsMapHom_apply, Monoid.EndAdditive_apply,
  addMonoidEndRingEquivInt_apply, AddHom.toFun_eq_coe, LinearMap.coe_toAddHom,
  LinearEquiv.coe_coe, addMonoidHomLequivInt_apply, AddMonoidHom.coe_toIntLinearMap,
  AddMonoidHom.coe_mk, ZeroHom.coe_mk, toMul_ofMul, relativeUnitsMap_mk]
rw [← ofMul_prod, ← QuotientGroup.mk_prod, ofMul_eq_zero, QuotientGroup.eq_one_iff]
use Units.map (RingOfIntegers.norm k) x
ext
simp only [Units.coe_map, MonoidHom.coe_coe, RingOfIntegers.coe_algebraMap_norm, map_pow,
  Units.coe_prod, Submonoid.coe_finset_prod, Subsemiring.coe_toSubmonoid,
  Subalgebra.coe_toSubsemiring, Algebra.norm_eq_prod_automorphisms]
rw [← hKL, ← IsGalois.card_aut_eq_finrank, ← orderOf_eq_card_of_forall_mem_zpowers hσ,
  ← Fin.prod_univ_eq_prod_range, ← (finEquivZPowers σ <| isOfFinOrder_of_finite _).symm.prod_comp]
simp only [pow_finEquivZPowers_symm_apply, coe_galRestrictHom_apply, AlgHom.coe_coe, map_prod]
rw [Finset.prod_set_coe (α := K ≃ₐ[k] K) (β := K) (f := fun i ↦ i ↑x) (Subgroup.zpowers σ)]
congr
ext x
simpa using hσ x
Proof state after:
no goals
Theorem: isTors'
Proof state before:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
⊢ Module.IsTorsionBySet ℤ[X]
    (Module.AEval'
      ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
        (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
    ↑(Ideal.span {cyclotomic ↑p ℤ})
Tactic:
have := Fact.mk hp
Proof state after:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
⊢ Module.IsTorsionBySet ℤ[X]
    (Module.AEval'
      ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
        (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
    ↑(Ideal.span {cyclotomic ↑p ℤ})
Theorem: isTors'
Proof state before:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
⊢ Module.IsTorsionBySet ℤ[X]
    (Module.AEval'
      ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
        (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
    ↑(Ideal.span {cyclotomic ↑p ℤ})
Tactic:
rw [← Module.isTorsionBySet_iff_is_torsion_by_span, Module.isTorsionBySet_singleton_iff]
Proof state after:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
⊢ Module.IsTorsionBy ℤ[X]
    (Module.AEval'
      ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
        (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
    (cyclotomic ↑p ℤ)
Theorem: isTors'
Proof state before:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
⊢ Module.IsTorsionBy ℤ[X]
    (Module.AEval'
      ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
        (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
    (cyclotomic ↑p ℤ)
Tactic:
intro x
Proof state after:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x :
  Module.AEval'
    ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
      (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ))))
⊢ cyclotomic ↑p ℤ • x = 0
Theorem: isTors'
Proof state before:
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x :
  Module.AEval'
    ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
      (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ))))
⊢ cyclotomic ↑p ℤ • x = 0
Tactic:
obtain ⟨x, rfl⟩ := (Module.AEval.of _ _ _).surjective x
Proof state after:
case intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : Additive (RelativeUnits k K)
⊢ cyclotomic ↑p ℤ •
      (Module.AEval.of ℤ (Additive (RelativeUnits k K))
          ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
            (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
        x =
    0
Theorem: isTors'
Proof state before:
case intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : Additive (RelativeUnits k K)
⊢ cyclotomic ↑p ℤ •
      (Module.AEval.of ℤ (Additive (RelativeUnits k K))
          ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
            (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
        x =
    0
Tactic:
obtain ⟨x, rfl⟩ := Additive.ofMul.surjective x
Proof state after:
case intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : RelativeUnits k K
⊢ cyclotomic ↑p ℤ •
      (Module.AEval.of ℤ (Additive (RelativeUnits k K))
          ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
            (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
        (Additive.ofMul x) =
    0
Theorem: isTors'
Proof state before:
case intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : RelativeUnits k K
⊢ cyclotomic ↑p ℤ •
      (Module.AEval.of ℤ (Additive (RelativeUnits k K))
          ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
            (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
        (Additive.ofMul x) =
    0
Tactic:
obtain ⟨x, rfl⟩ := QuotientGroup.mk_surjective x
Proof state after:
case intro.intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : (𝓞 K)ˣ
⊢ cyclotomic ↑p ℤ •
      (Module.AEval.of ℤ (Additive (RelativeUnits k K))
          ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
            (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
        (Additive.ofMul ↑x) =
    0
Theorem: isTors'
Proof state before:
case intro.intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : (𝓞 K)ˣ
⊢ cyclotomic ↑p ℤ •
      (Module.AEval.of ℤ (Additive (RelativeUnits k K))
          ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
            (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
        (Additive.ofMul ↑x) =
    0
Tactic:
rw [← Module.AEval.of_aeval_smul]
Proof state after:
case intro.intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : (𝓞 K)ˣ
⊢ (Module.AEval.of ℤ (Additive (RelativeUnits k K))
        ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
          (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
      ((aeval
            ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
              (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
          (cyclotomic ↑p ℤ) •
        Additive.ofMul ↑x) =
    0
Theorem: isTors'
Proof state before:
case intro.intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : (𝓞 K)ˣ
⊢ (Module.AEval.of ℤ (Additive (RelativeUnits k K))
        ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
          (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
      ((aeval
            ((addMonoidEndRingEquivInt (Additive (RelativeUnits k K)))
              (Monoid.EndAdditive (relativeUnitsMap ↑((AlgEquiv.algHomUnitsEquiv k K).symm σ)))))
          (cyclotomic ↑p ℤ) •
        Additive.ofMul ↑x) =
    0
Tactic:
simp_rw [LinearMap.smul_def, Polynomial.cyclotomic_prime ℤ p, AddEquivClass.map_eq_zero_iff,
  map_sum, map_pow, aeval_X, LinearMap.coeFn_sum, sum_apply, ← relativeUnitsMapHom_apply,
  ← map_pow, ← Units.val_pow_eq_pow_val, ← map_pow, AlgEquiv.val_algHomUnitsEquiv_symm_apply,
  relativeUnitsMapHom_apply, Monoid.EndAdditive_apply,
  addMonoidEndRingEquivInt_apply, AddHom.toFun_eq_coe, LinearMap.coe_toAddHom,
  LinearEquiv.coe_coe, addMonoidHomLequivInt_apply, AddMonoidHom.coe_toIntLinearMap,
  AddMonoidHom.coe_mk, ZeroHom.coe_mk, toMul_ofMul, relativeUnitsMap_mk]
Proof state after:
case intro.intro.intro
p : ℕ+
K : Type u_1
inst✝¹³ : Field K
inst✝¹² : NumberField K
k : Type u_2
inst✝¹¹ : Field k
inst✝¹⁰ : NumberField k
hp : (↑p).Prime
G : Type u_3
H : Type u_4
inst✝⁹ : AddCommGroup G
inst✝⁸ : CommGroup H
inst✝⁷ : Fintype H
hCard : Fintype.card H = ↑p
σ✝ : H
hσ✝ : Subgroup.zpowers σ✝ = ⊤
r : ℕ
inst✝⁶ : DistribMulAction H G
inst✝⁵ : Module.Free ℤ G
inst✝⁴ : Module.Finite ℤ G
hf : finrank ℤ G = r * (↑p - 1)
inst✝³ : Algebra k K
inst✝² : IsGalois k K
inst✝¹ : FiniteDimensional k K
inst✝ : IsUnramifiedAtInfinitePlaces k K
hKL : finrank k K = ↑p
σ : K ≃ₐ[k] K
hσ : ∀ (x : K ≃ₐ[k] K), x ∈ Subgroup.zpowers σ
this : Fact (↑p).Prime
x : (𝓞 K)ˣ
⊢ ∑ x_1 ∈ range ↑p, Additive.ofMul ↑((Units.map ↑((galRestrictHom (𝓞 k) k K (𝓞 K)) ↑(σ ^ x_1))) x) = 0