[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
x : S
⊢ ↑(norm R) x = 1
[PROOFSTEP]
rw [norm_apply, LinearMap.det]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
x : S
⊢ ↑(if H : ∃ s, Nonempty (Basis { x // x ∈ s } R S) then
          detAux (Trunc.mk (Nonempty.some (_ : Nonempty (Basis { x // x ∈ Exists.choose H } R S))))
        else 1)
      (↑(lmul R S) x) =
    1
[PROOFSTEP]
split_ifs
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
x : S
h✝ : ∃ s, Nonempty (Basis { x // x ∈ s } R S)
⊢ ↑(detAux (Trunc.mk (Nonempty.some (_ : Nonempty (Basis { x // x ∈ Exists.choose h✝ } R S))))) (↑(lmul R S) x) = 1
[PROOFSTEP]
trivial
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
x : S
h✝ : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
⊢ ↑1 (↑(lmul R S) x) = 1
[PROOFSTEP]
trivial
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬Module.Finite R S
x : S
⊢ ↑(norm R) x = 1
[PROOFSTEP]
refine norm_eq_one_of_not_exists_basis _ (mt ?_ h) _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬Module.Finite R S
x : S
⊢ (∃ s, Nonempty (Basis { x // x ∈ s } R S)) → Module.Finite R S
[PROOFSTEP]
rintro ⟨s, ⟨b⟩⟩
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
h : ¬Module.Finite R S
x : S
s : Finset S
b : Basis { x // x ∈ s } R S
⊢ Module.Finite R S
[PROOFSTEP]
exact Module.Finite.of_basis b
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : Basis ι R S
s : S
⊢ ↑(norm R) s = det (↑(leftMulMatrix b) s)
[PROOFSTEP]
rw [norm_apply, ← LinearMap.det_toMatrix b, ← toMatrix_lmul_eq]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : Basis ι R S
s : S
⊢ det (↑(toMatrix b b) (↑(lmul R S) s)) = det (↑(toMatrix b b) (mulLeft R s))
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
⊢ ↑(norm R) (↑(algebraMap R S) x) = x ^ Fintype.card ι
[PROOFSTEP]
haveI := Classical.decEq ι
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ ↑(norm R) (↑(algebraMap R S) x) = x ^ Fintype.card ι
[PROOFSTEP]
rw [norm_apply, ← det_toMatrix b, lmul_algebraMap]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ det (↑(toMatrix b b) (↑(lsmul R R ((fun x => S) x)) x)) = x ^ Fintype.card ι
[PROOFSTEP]
convert @det_diagonal _ _ _ _ _ fun _ : ι => x
[GOAL]
case h.e'_2.h.e'_6
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ ↑(toMatrix b b) (↑(lsmul R R ((fun x => S) x)) x) = diagonal fun x_1 => x
[PROOFSTEP]
ext (i j)
[GOAL]
case h.e'_2.h.e'_6.a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
i j : ι
⊢ ↑(toMatrix b b) (↑(lsmul R R ((fun x => S) x)) x) i j = diagonal (fun x_1 => x) i j
[PROOFSTEP]
rw [toMatrix_lsmul, Matrix.diagonal]
[GOAL]
case h.e'_3
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ x ^ Fintype.card ι = ∏ i : ι, x
[PROOFSTEP]
rw [Finset.prod_const, Finset.card_univ]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L✝ : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L✝
inst✝⁴ : Field F
inst✝³ : Algebra K L✝
inst✝² : Algebra K F
ι : Type w
L : Type u_7
inst✝¹ : Ring L
inst✝ : Algebra K L
x : K
⊢ ↑(norm K) (↑(algebraMap K L) x) = x ^ finrank K L
[PROOFSTEP]
by_cases H : ∃ s : Finset L, Nonempty (Basis s K L)
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L✝ : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L✝
inst✝⁴ : Field F
inst✝³ : Algebra K L✝
inst✝² : Algebra K F
ι : Type w
L : Type u_7
inst✝¹ : Ring L
inst✝ : Algebra K L
x : K
H : ∃ s, Nonempty (Basis { x // x ∈ s } K L)
⊢ ↑(norm K) (↑(algebraMap K L) x) = x ^ finrank K L
[PROOFSTEP]
rw [norm_algebraMap_of_basis H.choose_spec.some, finrank_eq_card_basis H.choose_spec.some]
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L✝ : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L✝
inst✝⁴ : Field F
inst✝³ : Algebra K L✝
inst✝² : Algebra K F
ι : Type w
L : Type u_7
inst✝¹ : Ring L
inst✝ : Algebra K L
x : K
H : ¬∃ s, Nonempty (Basis { x // x ∈ s } K L)
⊢ ↑(norm K) (↑(algebraMap K L) x) = x ^ finrank K L
[PROOFSTEP]
rw [norm_eq_one_of_not_exists_basis K H, finrank_eq_zero_of_not_exists_basis, pow_zero]
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L✝ : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L✝
inst✝⁴ : Field F
inst✝³ : Algebra K L✝
inst✝² : Algebra K F
ι : Type w
L : Type u_7
inst✝¹ : Ring L
inst✝ : Algebra K L
x : K
H : ¬∃ s, Nonempty (Basis { x // x ∈ s } K L)
⊢ ¬∃ s, Nonempty (Basis (↑↑s) K L)
[PROOFSTEP]
rintro ⟨s, ⟨b⟩⟩
[GOAL]
case neg.intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L✝ : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L✝
inst✝⁴ : Field F
inst✝³ : Algebra K L✝
inst✝² : Algebra K F
ι : Type w
L : Type u_7
inst✝¹ : Ring L
inst✝ : Algebra K L
x : K
H : ¬∃ s, Nonempty (Basis { x // x ∈ s } K L)
s : Finset L
b : Basis (↑↑s) K L
⊢ False
[PROOFSTEP]
exact H ⟨s, ⟨b⟩⟩
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
pb : PowerBasis R S
⊢ ↑(norm R) pb.gen = (-1) ^ pb.dim * coeff (minpoly R pb.gen) 0
[PROOFSTEP]
rw [norm_eq_matrix_det pb.basis, det_eq_sign_charpoly_coeff, charpoly_leftMulMatrix, Fintype.card_fin]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Algebra R F
pb : PowerBasis R S
hf : Splits (algebraMap R F) (minpoly R pb.gen)
⊢ ↑(algebraMap R F) (↑(norm R) pb.gen) = Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)))
[PROOFSTEP]
haveI := Module.nontrivial R F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Algebra R F
pb : PowerBasis R S
hf : Splits (algebraMap R F) (minpoly R pb.gen)
this : Nontrivial R
⊢ ↑(algebraMap R F) (↑(norm R) pb.gen) = Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)))
[PROOFSTEP]
have := minpoly.monic pb.isIntegral_gen
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Algebra R F
pb : PowerBasis R S
hf : Splits (algebraMap R F) (minpoly R pb.gen)
this✝ : Nontrivial R
this : Monic (minpoly R pb.gen)
⊢ ↑(algebraMap R F) (↑(norm R) pb.gen) = Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)))
[PROOFSTEP]
rw [PowerBasis.norm_gen_eq_coeff_zero_minpoly, ← pb.natDegree_minpoly, RingHom.map_mul, ← coeff_map,
  prod_roots_eq_coeff_zero_of_monic_of_split (this.map _) ((splits_id_iff_splits _).2 hf), this.natDegree_map, map_pow,
  ← mul_assoc, ← mul_pow]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Field F
inst✝² : Algebra K L
inst✝¹ : Algebra K F
ι : Type w
inst✝ : Algebra R F
pb : PowerBasis R S
hf : Splits (algebraMap R F) (minpoly R pb.gen)
this✝ : Nontrivial R
this : Monic (minpoly R pb.gen)
⊢ (↑(algebraMap R F) (-1) * -1) ^ natDegree (minpoly R pb.gen) *
      Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen))) =
    Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)))
[PROOFSTEP]
simp only [map_neg, _root_.map_one, neg_mul, neg_neg, one_pow, one_mul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
inst✝³ : Finite ι
inst✝² : Nontrivial S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
⊢ ↑(norm R) 0 = 0
[PROOFSTEP]
nontriviality
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
inst✝³ : Finite ι
inst✝² : Nontrivial S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
✝ : Nontrivial ((fun x => R) 0)
⊢ ↑(norm R) 0 = 0
[PROOFSTEP]
rw [norm_apply, coe_lmul_eq_mul, map_zero, LinearMap.det_zero' (Module.Free.chooseBasis R S)]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
⊢ ↑(norm R) x = 0 ↔ x = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
⊢ ↑(norm R) x = 0 → x = 0
case mpr
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
⊢ x = 0 → ↑(norm R) x = 0
[PROOFSTEP]
let b := Module.Free.chooseBasis R S
[GOAL]
case mp
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
⊢ ↑(norm R) x = 0 → x = 0
case mpr
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
⊢ x = 0 → ↑(norm R) x = 0
[PROOFSTEP]
swap
[GOAL]
case mpr
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
⊢ x = 0 → ↑(norm R) x = 0
[PROOFSTEP]
rintro rfl
[GOAL]
case mpr
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
⊢ ↑(norm R) 0 = 0
[PROOFSTEP]
exact norm_zero
[GOAL]
case mp
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
⊢ ↑(norm R) x = 0 → x = 0
[PROOFSTEP]
letI := Classical.decEq (Module.Free.ChooseBasisIndex R S)
[GOAL]
case mp
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
⊢ ↑(norm R) x = 0 → x = 0
[PROOFSTEP]
rw [norm_eq_matrix_det b, ← Matrix.exists_mulVec_eq_zero_iff]
[GOAL]
case mp
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
⊢ (∃ v x_1, mulVec (↑(leftMulMatrix b) x) v = 0) → x = 0
[PROOFSTEP]
rintro ⟨v, v_ne, hv⟩
[GOAL]
case mp.intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
v : Module.Free.ChooseBasisIndex R S → (fun x => R) x
v_ne : v ≠ 0
hv : mulVec (↑(leftMulMatrix b) x) v = 0
⊢ x = 0
[PROOFSTEP]
rw [← b.equivFun.apply_symm_apply v, b.equivFun_symm_apply, b.equivFun_apply, leftMulMatrix_mulVec_repr] at hv
[GOAL]
case mp.intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
v : Module.Free.ChooseBasisIndex R S → (fun x => R) x
v_ne : v ≠ 0
hv : ↑(↑b.repr (x * ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i)) = 0
⊢ x = 0
[PROOFSTEP]
refine (mul_eq_zero.mp (b.ext_elem fun i => ?_)).resolve_right (show ∑ i, v i • b i ≠ 0 from ?_)
[GOAL]
case mp.intro.intro.refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
v : Module.Free.ChooseBasisIndex R S → (fun x => R) x
v_ne : v ≠ 0
hv : ↑(↑b.repr (x * ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i)) = 0
i : Module.Free.ChooseBasisIndex R S
⊢ ↑(↑b.repr (x * ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i)) i = ↑(↑b.repr 0) i
[PROOFSTEP]
simpa only [LinearEquiv.map_zero, Pi.zero_apply] using congr_fun hv i
[GOAL]
case mp.intro.intro.refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
v : Module.Free.ChooseBasisIndex R S → (fun x => R) x
v_ne : v ≠ 0
hv : ↑(↑b.repr (x * ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i)) = 0
⊢ ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i ≠ 0
[PROOFSTEP]
contrapose! v_ne with sum_eq
[GOAL]
case mp.intro.intro.refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
v : Module.Free.ChooseBasisIndex R S → (fun x => R) x
hv : ↑(↑b.repr (x * ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i)) = 0
sum_eq : ∑ x : Module.Free.ChooseBasisIndex R S, v x • ↑(Module.Free.chooseBasis R S) x = 0
⊢ v = 0
[PROOFSTEP]
apply b.equivFun.symm.injective
[GOAL]
case mp.intro.intro.refine_2.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
inst✝⁴ : Finite ι
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : Module.Free R S
inst✝ : Module.Finite R S
x : S
b : Basis (Module.Free.ChooseBasisIndex R S) R S := Module.Free.chooseBasis R S
this : DecidableEq (Module.Free.ChooseBasisIndex R S) := Classical.decEq (Module.Free.ChooseBasisIndex R S)
v : Module.Free.ChooseBasisIndex R S → (fun x => R) x
hv : ↑(↑b.repr (x * ∑ i : Module.Free.ChooseBasisIndex R S, v i • ↑b i)) = 0
sum_eq : ∑ x : Module.Free.ChooseBasisIndex R S, v x • ↑(Module.Free.chooseBasis R S) x = 0
⊢ ↑(LinearEquiv.symm (Basis.equivFun b)) v = ↑(LinearEquiv.symm (Basis.equivFun b)) 0
[PROOFSTEP]
rw [b.equivFun_symm_apply, sum_eq, LinearEquiv.map_zero]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
inst✝² : Finite ι
inst✝¹ : IsDomain R
inst✝ : IsDomain S
b : Basis ι R S
x : S
⊢ ↑(norm R) x = 0 ↔ x = 0
[PROOFSTEP]
haveI : Module.Free R S := Module.Free.of_basis b
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
inst✝² : Finite ι
inst✝¹ : IsDomain R
inst✝ : IsDomain S
b : Basis ι R S
x : S
this : Module.Free R S
⊢ ↑(norm R) x = 0 ↔ x = 0
[PROOFSTEP]
haveI : Module.Finite R S := Module.Finite.of_basis b
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
inst✝² : Finite ι
inst✝¹ : IsDomain R
inst✝ : IsDomain S
b : Basis ι R S
x : S
this✝ : Module.Free R S
this : Module.Finite R S
⊢ ↑(norm R) x = 0 ↔ x = 0
[PROOFSTEP]
exact norm_eq_zero_iff
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
⊢ ↑(norm K) x = ↑(norm K) (AdjoinSimple.gen K x) ^ finrank { x_1 // x_1 ∈ K⟮x⟯ } L
[PROOFSTEP]
letI := isSeparable_tower_top_of_isSeparable K K⟮x⟯ L
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
this : IsSeparable { x_1 // x_1 ∈ K⟮x⟯ } L := isSeparable_tower_top_of_isSeparable K { x_1 // x_1 ∈ K⟮x⟯ } L
⊢ ↑(norm K) x = ↑(norm K) (AdjoinSimple.gen K x) ^ finrank { x_1 // x_1 ∈ K⟮x⟯ } L
[PROOFSTEP]
let pbL := Field.powerBasisOfFiniteOfSeparable K⟮x⟯ L
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
this : IsSeparable { x_1 // x_1 ∈ K⟮x⟯ } L := isSeparable_tower_top_of_isSeparable K { x_1 // x_1 ∈ K⟮x⟯ } L
pbL : PowerBasis { x_1 // x_1 ∈ K⟮x⟯ } L := Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L
⊢ ↑(norm K) x = ↑(norm K) (AdjoinSimple.gen K x) ^ finrank { x_1 // x_1 ∈ K⟮x⟯ } L
[PROOFSTEP]
let pbx := IntermediateField.adjoin.powerBasis (IsSeparable.isIntegral K x)
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
this : IsSeparable { x_1 // x_1 ∈ K⟮x⟯ } L := isSeparable_tower_top_of_isSeparable K { x_1 // x_1 ∈ K⟮x⟯ } L
pbL : PowerBasis { x_1 // x_1 ∈ K⟮x⟯ } L := Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L
pbx : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis (_ : IsIntegral K x)
⊢ ↑(norm K) x = ↑(norm K) (AdjoinSimple.gen K x) ^ finrank { x_1 // x_1 ∈ K⟮x⟯ } L
[PROOFSTEP]
rw [← AdjoinSimple.algebraMap_gen K x, norm_eq_matrix_det (pbx.basis.smul pbL.basis) _, smul_leftMulMatrix_algebraMap,
  det_blockDiagonal, norm_eq_matrix_det pbx.basis]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
this : IsSeparable { x_1 // x_1 ∈ K⟮x⟯ } L := isSeparable_tower_top_of_isSeparable K { x_1 // x_1 ∈ K⟮x⟯ } L
pbL : PowerBasis { x_1 // x_1 ∈ K⟮x⟯ } L := Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L
pbx : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis (_ : IsIntegral K x)
⊢ ∏ k : Fin pbL.dim, det (↑(leftMulMatrix pbx.basis) (AdjoinSimple.gen K x)) =
    det
        (↑(leftMulMatrix pbx.basis)
          (AdjoinSimple.gen K (↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)))) ^
      finrank { x_1 // x_1 ∈ K⟮↑(algebraMap { x_2 // x_2 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)⟯ } L
[PROOFSTEP]
simp only [Finset.card_fin, Finset.prod_const]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
this : IsSeparable { x_1 // x_1 ∈ K⟮x⟯ } L := isSeparable_tower_top_of_isSeparable K { x_1 // x_1 ∈ K⟮x⟯ } L
pbL : PowerBasis { x_1 // x_1 ∈ K⟮x⟯ } L := Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L
pbx : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis (_ : IsIntegral K x)
⊢ det (↑(leftMulMatrix (adjoin.powerBasis (_ : IsIntegral K x)).basis) (AdjoinSimple.gen K x)) ^
      (Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L).dim =
    det
        (↑(leftMulMatrix (adjoin.powerBasis (_ : IsIntegral K x)).basis)
          (AdjoinSimple.gen K (↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)))) ^
      finrank { x_1 // x_1 ∈ K⟮↑(algebraMap { x_2 // x_2 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)⟯ } L
[PROOFSTEP]
congr
[GOAL]
case e_a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : Ring S
inst✝⁷ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Field F
inst✝³ : Algebra K L
inst✝² : Algebra K F
ι : Type w
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
this : IsSeparable { x_1 // x_1 ∈ K⟮x⟯ } L := isSeparable_tower_top_of_isSeparable K { x_1 // x_1 ∈ K⟮x⟯ } L
pbL : PowerBasis { x_1 // x_1 ∈ K⟮x⟯ } L := Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L
pbx : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis (_ : IsIntegral K x)
⊢ (Field.powerBasisOfFiniteOfSeparable { x_1 // x_1 ∈ K⟮x⟯ } L).dim =
    finrank { x_1 // x_1 ∈ K⟮↑(algebraMap { x_2 // x_2 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)⟯ } L
[PROOFSTEP]
rw [← PowerBasis.finrank, AdjoinSimple.algebraMap_gen K x]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hx : ¬IsIntegral K x
⊢ ↑(norm K) (AdjoinSimple.gen K x) = 1
[PROOFSTEP]
rw [norm_eq_one_of_not_exists_basis]
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hx : ¬IsIntegral K x
⊢ ¬∃ s, Nonempty (Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ })
[PROOFSTEP]
contrapose! hx
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hx : ∃ s, Nonempty (Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ })
⊢ IsIntegral K x
[PROOFSTEP]
obtain ⟨s, ⟨b⟩⟩ := hx
[GOAL]
case h.intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
s : Finset { x_1 // x_1 ∈ K⟮x⟯ }
b : Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ IsIntegral K x
[PROOFSTEP]
refine isIntegral_of_mem_of_FG K⟮x⟯.toSubalgebra ?_ x ?_
[GOAL]
case h.intro.intro.refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
s : Finset { x_1 // x_1 ∈ K⟮x⟯ }
b : Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ Submodule.FG (↑Subalgebra.toSubmodule K⟮x⟯.toSubalgebra)
[PROOFSTEP]
exact (Submodule.fg_iff_finiteDimensional _).mpr (of_fintype_basis b)
[GOAL]
case h.intro.intro.refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
s : Finset { x_1 // x_1 ∈ K⟮x⟯ }
b : Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ x ∈ K⟮x⟯.toSubalgebra
[PROOFSTEP]
exact IntermediateField.subset_adjoin K _ (Set.mem_singleton x)
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
have injKxL := (algebraMap K⟮x⟯ L).injective
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
by_cases hx : IsIntegral K x
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : ¬IsIntegral K x
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
swap
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : ¬IsIntegral K x
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
simp [minpoly.eq_zero hx, IntermediateField.AdjoinSimple.norm_gen_eq_one hx]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
have hx' : IsIntegral K (AdjoinSimple.gen K x) := by
  rwa [← isIntegral_algebraMap_iff injKxL, AdjoinSimple.algebraMap_gen]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
⊢ IsIntegral K (AdjoinSimple.gen K x)
[PROOFSTEP]
rwa [← isIntegral_algebraMap_iff injKxL, AdjoinSimple.algebraMap_gen]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ ↑(algebraMap K F) (↑(norm K) (AdjoinSimple.gen K x)) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
rw [← adjoin.powerBasis_gen hx, PowerBasis.norm_gen_eq_prod_roots]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K (adjoin.powerBasis hx).gen))) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
rw [adjoin.powerBasis_gen hx, minpoly.eq_of_algebraMap_eq injKxL hx']
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ Splits (algebraMap K F) (minpoly K (adjoin.powerBasis hx).gen)
[PROOFSTEP]
rw [adjoin.powerBasis_gen hx, minpoly.eq_of_algebraMap_eq injKxL hx']
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ x = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ x = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.762940)
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.762940)
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ ?m.762940 = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ ?m.762940 = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ L
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ L
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.762940)
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ ?m.762940 = x
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ L
[PROOFSTEP]
try exact hf
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.762940)
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ ?m.762940 = x
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ L
[PROOFSTEP]
exact hf
[GOAL]
case pos.hf
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Ring S
inst✝⁵ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
inst✝¹ : Algebra K L
inst✝ : Algebra K F
ι : Type w
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (AdjoinSimple.gen K x)
⊢ x = x
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
⊢ ↑(algebraMap R F) (↑(norm R) pb.gen) = ∏ σ : S →ₐ[R] F, ↑σ pb.gen
[PROOFSTEP]
letI := Classical.decEq F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ ↑(algebraMap R F) (↑(norm R) pb.gen) = ∏ σ : S →ₐ[R] F, ↑σ pb.gen
[PROOFSTEP]
rw [PowerBasis.norm_gen_eq_prod_roots pb hE]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen))) = ∏ σ : S →ₐ[R] F, ↑σ pb.gen
[PROOFSTEP]
rw [@Fintype.prod_equiv (S →ₐ[R] F) _ _ (PowerBasis.AlgHom.fintype pb) _ _ pb.liftEquiv' (fun σ => σ pb.gen)
    (fun x => x) ?_]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ Multiset.prod (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen))) =
    ∏ x : { y // y ∈ roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)) }, ↑x
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ ∀ (x : S →ₐ[R] F), (fun σ => ↑σ pb.gen) x = (fun x => ↑x) (↑(PowerBasis.liftEquiv' pb) x)
[PROOFSTEP]
rw [Finset.prod_mem_multiset, Finset.prod_eq_multiset_prod, Multiset.toFinset_val, Multiset.dedup_eq_self.mpr,
  Multiset.map_id]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ Multiset.Nodup (roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)))
[PROOFSTEP]
exact nodup_roots hfx.map
[GOAL]
case hfg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ ∀ (x : { x // x ∈ roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)) }), ↑x = _root_.id ↑x
[PROOFSTEP]
intro x
[GOAL]
case hfg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
x : { x // x ∈ roots (Polynomial.map (algebraMap R F) (minpoly R pb.gen)) }
⊢ ↑x = _root_.id ↑x
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
⊢ ∀ (x : S →ₐ[R] F), (fun σ => ↑σ pb.gen) x = (fun x => ↑x) (↑(PowerBasis.liftEquiv' pb) x)
[PROOFSTEP]
intro σ
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁰ : CommRing R
inst✝⁹ : Ring S
inst✝⁸ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra K F
ι : Type w
E : Type u_7
inst✝² : Field E
inst✝¹ : Algebra K E
inst✝ : Algebra R F
pb : PowerBasis R S
hE : Splits (algebraMap R F) (minpoly R pb.gen)
hfx : Separable (minpoly R pb.gen)
this : DecidableEq F := Classical.decEq F
σ : S →ₐ[R] F
⊢ (fun σ => ↑σ pb.gen) σ = (fun x => ↑x) (↑(PowerBasis.liftEquiv' pb) σ)
[PROOFSTEP]
simp only [PowerBasis.liftEquiv'_apply_coe]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hF : Splits (algebraMap K F) (minpoly K x)
⊢ ↑(algebraMap K F) (↑(norm K) x) =
    Multiset.prod (roots (Polynomial.map (algebraMap K F) (minpoly K x))) ^ finrank { x_1 // x_1 ∈ K⟮x⟯ } L
[PROOFSTEP]
rw [norm_eq_norm_adjoin K x, map_pow, IntermediateField.AdjoinSimple.norm_gen_eq_prod_roots _ hF]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
⊢ ∏ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = (∏ σ : L →ₐ[K] E, ↑σ pb.gen) ^ finrank L F
[PROOFSTEP]
haveI : FiniteDimensional L F := FiniteDimensional.right K L F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this : FiniteDimensional L F
⊢ ∏ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = (∏ σ : L →ₐ[K] E, ↑σ pb.gen) ^ finrank L F
[PROOFSTEP]
haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝ : FiniteDimensional L F
this : IsSeparable L F
⊢ ∏ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = (∏ σ : L →ₐ[K] E, ↑σ pb.gen) ^ finrank L F
[PROOFSTEP]
letI : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∏ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = (∏ σ : L →ₐ[K] E, ↑σ pb.gen) ^ finrank L F
[PROOFSTEP]
letI : ∀ f : L →ₐ[K] E, Fintype (@AlgHom L F E _ _ _ _ f.toRingHom.toAlgebra) := ?_
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
⊢ ∏ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = (∏ σ : L →ₐ[K] E, ↑σ pb.gen) ^ finrank L F
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E)
[PROOFSTEP]
rw [Fintype.prod_equiv algHomEquivSigma (fun σ : F →ₐ[K] E => _) fun σ => σ.1 pb.gen, ← Finset.univ_sigma_univ,
  Finset.prod_sigma, ← Finset.prod_pow]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
⊢ ∏ a : L →ₐ[K] E, ∏ s : F →ₐ[L] E, ↑{ fst := a, snd := s }.fst pb.gen = ∏ x : L →ₐ[K] E, ↑x pb.gen ^ finrank L F
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
⊢ ∀ (x : F →ₐ[K] E), ↑x (↑(algebraMap L F) pb.gen) = ↑(↑algHomEquivSigma x).fst pb.gen
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E)
[PROOFSTEP]
refine Finset.prod_congr rfl fun σ _ => ?_
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
⊢ ∏ s : F →ₐ[L] E, ↑{ fst := σ, snd := s }.fst pb.gen = ↑σ pb.gen ^ finrank L F
[PROOFSTEP]
letI : Algebra L E := σ.toRingHom.toAlgebra
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ ∏ s : F →ₐ[L] E, ↑{ fst := σ, snd := s }.fst pb.gen = ↑σ pb.gen ^ finrank L F
[PROOFSTEP]
simp_rw [Finset.prod_const]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ ↑σ pb.gen ^ Finset.card Finset.univ = ↑σ pb.gen ^ finrank L F
[PROOFSTEP]
congr
[GOAL]
case refine_2.e_a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ Finset.card Finset.univ = finrank L F
[PROOFSTEP]
exact AlgHom.card L F E
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := fun σ => minpoly.AlgHom.fintype L F E
⊢ ∀ (x : F →ₐ[K] E), ↑x (↑(algebraMap L F) pb.gen) = ↑(↑algHomEquivSigma x).fst pb.gen
[PROOFSTEP]
intro σ
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra L F
inst✝³ : IsScalarTower K L F
inst✝² : IsAlgClosed E
inst✝¹ : IsSeparable K F
inst✝ : FiniteDimensional K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := fun σ => minpoly.AlgHom.fintype L F E
σ : F →ₐ[K] E
⊢ ↑σ (↑(algebraMap L F) pb.gen) = ↑(↑algHomEquivSigma σ).fst pb.gen
[PROOFSTEP]
simp only [algHomEquivSigma, Equiv.coe_fn_mk, AlgHom.restrictDomain, AlgHom.comp_apply, IsScalarTower.coe_toAlgHom']
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : FiniteDimensional K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
x : L
⊢ ↑(algebraMap K E) (↑(norm K) x) = ∏ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
have hx := IsSeparable.isIntegral K x
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : FiniteDimensional K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
x : L
hx : IsIntegral K x
⊢ ↑(algebraMap K E) (↑(norm K) x) = ∏ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
rw [norm_eq_norm_adjoin K x, RingHom.map_pow, ← adjoin.powerBasis_gen hx,
  norm_eq_prod_embeddings_gen E (adjoin.powerBasis hx) (IsAlgClosed.splits_codomain _)]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : FiniteDimensional K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
x : L
hx : IsIntegral K x
⊢ (∏ σ : { x_1 // x_1 ∈ K⟮x⟯ } →ₐ[K] E, ↑σ (adjoin.powerBasis hx).gen) ^ finrank { x_1 // x_1 ∈ K⟮x⟯ } L =
    ∏ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
exact (prod_embeddings_eq_finrank_pow L (L := K⟮x⟯) E (adjoin.powerBasis hx)).symm
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : FiniteDimensional K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
x : L
hx : IsIntegral K x
⊢ Separable (minpoly K (adjoin.powerBasis hx).gen)
[PROOFSTEP]
haveI := isSeparable_tower_bot_of_isSeparable K K⟮x⟯ L
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : FiniteDimensional K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
x : L
hx : IsIntegral K x
this : IsSeparable K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ Separable (minpoly K (adjoin.powerBasis hx).gen)
[PROOFSTEP]
exact IsSeparable.separable K _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ↑(algebraMap K L) (↑(norm K) x) = ∏ σ : L ≃ₐ[K] L, ↑σ x
[PROOFSTEP]
apply NoZeroSMulDivisors.algebraMap_injective L (AlgebraicClosure L)
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(norm K) x)) =
    ↑(algebraMap L (AlgebraicClosure L)) (∏ σ : L ≃ₐ[K] L, ↑σ x)
[PROOFSTEP]
rw [map_prod (algebraMap L (AlgebraicClosure L))]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(norm K) x)) =
    ∏ x_1 : L ≃ₐ[K] L, ↑(algebraMap L (AlgebraicClosure L)) (↑x_1 x)
[PROOFSTEP]
rw [← Fintype.prod_equiv (Normal.algHomEquivAut K (AlgebraicClosure L) L)]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(norm K) x)) = ∏ x : L →ₐ[K] AlgebraicClosure L, ?a.f✝ x
[PROOFSTEP]
rw [← norm_eq_prod_embeddings]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(norm K) x)) =
    ↑(algebraMap K (AlgebraicClosure L)) (↑(norm K) ?a.x✝)
case a.x
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ L
[PROOFSTEP]
simp only [algebraMap_eq_smul_one, smul_one_smul]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ↑(norm K) x • 1 = ↑(norm K) ?a.x✝ • 1
case a.x
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ L
[PROOFSTEP]
rfl
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
⊢ ∀ (x_1 : L →ₐ[K] AlgebraicClosure L),
    ↑x_1 x = ↑(algebraMap L (AlgebraicClosure L)) (↑(↑(Normal.algHomEquivAut K (AlgebraicClosure L) L) x_1) x)
[PROOFSTEP]
intro σ
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
x : L
σ : L →ₐ[K] AlgebraicClosure L
⊢ ↑σ x = ↑(algebraMap L (AlgebraicClosure L)) (↑(↑(Normal.algHomEquivAut K (AlgebraicClosure L) L) σ) x)
[PROOFSTEP]
simp only [Normal.algHomEquivAut, AlgHom.restrictNormal', Equiv.coe_fn_mk, AlgEquiv.coe_ofBijective,
  AlgHom.restrictNormal_commutes, id.map_eq_id, RingHom.id_apply]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
⊢ IsIntegral R (↑(norm K) x)
[PROOFSTEP]
have hx' : IsIntegral K x := isIntegral_of_isScalarTower hx
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ IsIntegral R (↑(norm K) x)
[PROOFSTEP]
rw [← isIntegral_algebraMap_iff (algebraMap K (AlgebraicClosure L)).injective, norm_eq_prod_roots]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ IsIntegral R
    (Multiset.prod (roots (Polynomial.map (algebraMap K (AlgebraicClosure L)) (minpoly K x))) ^
      finrank { x_1 // x_1 ∈ K⟮x⟯ } L)
[PROOFSTEP]
refine' (IsIntegral.multiset_prod fun y hy => _).pow _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : (fun x => AlgebraicClosure L) (↑(norm K) x)
hy : y ∈ roots (Polynomial.map (algebraMap K (AlgebraicClosure L)) (minpoly K x))
⊢ IsIntegral R y
[PROOFSTEP]
rw [mem_roots_map (minpoly.ne_zero hx')] at hy
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : (fun x => AlgebraicClosure L) (↑(norm K) x)
hy : eval₂ (algebraMap K (AlgebraicClosure L)) y (minpoly K x) = 0
⊢ IsIntegral R y
[PROOFSTEP]
use minpoly R x, minpoly.monic hx
[GOAL]
case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : (fun x => AlgebraicClosure L) (↑(norm K) x)
hy : eval₂ (algebraMap K (AlgebraicClosure L)) y (minpoly K x) = 0
⊢ eval₂ (algebraMap R ((fun x => AlgebraicClosure L) (↑(norm K) x))) y (minpoly R x) = 0
[PROOFSTEP]
rw [← aeval_def] at hy ⊢
[GOAL]
case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : (fun x => AlgebraicClosure L) (↑(norm K) x)
hy : ↑(aeval y) (minpoly K x) = 0
⊢ ↑(aeval y) (minpoly R x) = 0
[PROOFSTEP]
exact minpoly.aeval_of_isScalarTower R x y hy
[GOAL]
case hF
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ Splits (algebraMap K (AlgebraicClosure L)) (minpoly K x)
[PROOFSTEP]
apply IsAlgClosed.splits_codomain
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
⊢ ↑(norm K) (↑(norm L) x) = ↑(norm K) x
[PROOFSTEP]
by_cases hKF : FiniteDimensional K F
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
⊢ ↑(norm K) (↑(norm L) x) = ↑(norm K) x
[PROOFSTEP]
let A := AlgebraicClosure K
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
⊢ ↑(norm K) (↑(norm L) x) = ↑(norm K) x
[PROOFSTEP]
apply (algebraMap K A).injective
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ↑(algebraMap K A) (↑(norm K) x)
[PROOFSTEP]
haveI : FiniteDimensional L F := FiniteDimensional.right K L F
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this : FiniteDimensional L F
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ↑(algebraMap K A) (↑(norm K) x)
[PROOFSTEP]
haveI : FiniteDimensional K L := FiniteDimensional.left K L F
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝ : FiniteDimensional L F
this : FiniteDimensional K L
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ↑(algebraMap K A) (↑(norm K) x)
[PROOFSTEP]
haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝¹ : FiniteDimensional L F
this✝ : FiniteDimensional K L
this : IsSeparable K L
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ↑(algebraMap K A) (↑(norm K) x)
[PROOFSTEP]
haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝² : FiniteDimensional L F
this✝¹ : FiniteDimensional K L
this✝ : IsSeparable K L
this : IsSeparable L F
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ↑(algebraMap K A) (↑(norm K) x)
[PROOFSTEP]
letI :
  ∀ σ : L →ₐ[K] A,
    haveI := σ.toRingHom.toAlgebra
    Fintype (F →ₐ[L] A) :=
  fun _ => inferInstance
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝³ : FiniteDimensional L F
this✝² : FiniteDimensional K L
this✝¹ : IsSeparable K L
this✝ : IsSeparable L F
this : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ↑(algebraMap K A) (↑(norm K) x)
[PROOFSTEP]
rw [norm_eq_prod_embeddings K A (_ : F),
  Fintype.prod_equiv algHomEquivSigma (fun σ : F →ₐ[K] A => σ x) (fun π : Σ f : L →ₐ[K] A, _ => (π.2 : F → A) x)
    fun _ => rfl]
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝³ : FiniteDimensional L F
this✝² : FiniteDimensional K L
this✝¹ : IsSeparable K L
this✝ : IsSeparable L F
this : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ∏ x_1 : (f : L →ₐ[K] A) × (F →ₐ[L] A), ↑x_1.snd x
[PROOFSTEP]
suffices
  ∀ σ : L →ₐ[K] A,
    haveI := σ.toRingHom.toAlgebra
    ∏ π : F →ₐ[L] A, π x = σ (norm L x)
  by simp_rw [← Finset.univ_sigma_univ, Finset.prod_sigma, this, norm_eq_prod_embeddings]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝⁴ : FiniteDimensional L F
this✝³ : FiniteDimensional K L
this✝² : IsSeparable K L
this✝¹ : IsSeparable L F
this✝ : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
this : ∀ (σ : L →ₐ[K] A), ∏ π : F →ₐ[L] A, ↑π x = ↑σ (↑(norm L) x)
⊢ ↑(algebraMap K A) (↑(norm K) (↑(norm L) x)) = ∏ x_1 : (f : L →ₐ[K] A) × (F →ₐ[L] A), ↑x_1.snd x
[PROOFSTEP]
simp_rw [← Finset.univ_sigma_univ, Finset.prod_sigma, this, norm_eq_prod_embeddings]
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝³ : FiniteDimensional L F
this✝² : FiniteDimensional K L
this✝¹ : IsSeparable K L
this✝ : IsSeparable L F
this : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
⊢ ∀ (σ : L →ₐ[K] A), ∏ π : F →ₐ[L] A, ↑π x = ↑σ (↑(norm L) x)
[PROOFSTEP]
intro σ
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝³ : FiniteDimensional L F
this✝² : FiniteDimensional K L
this✝¹ : IsSeparable K L
this✝ : IsSeparable L F
this : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
σ : L →ₐ[K] A
⊢ ∏ π : F →ₐ[L] A, ↑π x = ↑σ (↑(norm L) x)
[PROOFSTEP]
letI : Algebra L A := σ.toRingHom.toAlgebra
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝⁴ : FiniteDimensional L F
this✝³ : FiniteDimensional K L
this✝² : IsSeparable K L
this✝¹ : IsSeparable L F
this✝ : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
σ : L →ₐ[K] A
this : Algebra L A := RingHom.toAlgebra ↑σ
⊢ ∏ π : F →ₐ[L] A, ↑π x = ↑σ (↑(norm L) x)
[PROOFSTEP]
rw [← norm_eq_prod_embeddings L A (_ : F)]
[GOAL]
case pos.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : FiniteDimensional K F
A : Type u_4 := AlgebraicClosure K
this✝⁴ : FiniteDimensional L F
this✝³ : FiniteDimensional K L
this✝² : IsSeparable K L
this✝¹ : IsSeparable L F
this✝ : (σ : L →ₐ[K] A) → Fintype (F →ₐ[L] A) := fun x => inferInstance
σ : L →ₐ[K] A
this : Algebra L A := RingHom.toAlgebra ↑σ
⊢ ↑(algebraMap L A) (↑(norm L) x) = ↑σ (↑(norm L) x)
[PROOFSTEP]
rfl
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
⊢ ↑(norm K) (↑(norm L) x) = ↑(norm K) x
[PROOFSTEP]
rw [norm_eq_one_of_not_module_finite hKF]
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
⊢ ↑(norm K) (↑(norm L) x) = 1
[PROOFSTEP]
by_cases hKL : FiniteDimensional K L
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
hKL : FiniteDimensional K L
⊢ ↑(norm K) (↑(norm L) x) = 1
[PROOFSTEP]
have hLF : ¬FiniteDimensional L F := by
  refine' (mt _) hKF
  intro hKF
  exact FiniteDimensional.trans K L F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
hKL : FiniteDimensional K L
⊢ ¬FiniteDimensional L F
[PROOFSTEP]
refine' (mt _) hKF
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
hKL : FiniteDimensional K L
⊢ FiniteDimensional L F → FiniteDimensional K F
[PROOFSTEP]
intro hKF
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF✝ : ¬FiniteDimensional K F
hKL : FiniteDimensional K L
hKF : FiniteDimensional L F
⊢ FiniteDimensional K F
[PROOFSTEP]
exact FiniteDimensional.trans K L F
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
hKL : FiniteDimensional K L
hLF : ¬FiniteDimensional L F
⊢ ↑(norm K) (↑(norm L) x) = 1
[PROOFSTEP]
rw [norm_eq_one_of_not_module_finite hLF, _root_.map_one]
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : Ring S
inst✝¹⁰ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Field F
inst✝⁶ : Algebra K L
inst✝⁵ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Algebra L F
inst✝¹ : IsScalarTower K L F
inst✝ : IsSeparable K F
x : F
hKF : ¬FiniteDimensional K F
hKL : ¬FiniteDimensional K L
⊢ ↑(norm K) (↑(norm L) x) = 1
[PROOFSTEP]
rw [norm_eq_one_of_not_module_finite hKL]


[GOAL]
α✝ β✝ : Type u
s✝ : Set α✝
f✝ : α✝ → Set β✝
g : Set (α✝ → β✝)
α β γ : Type u_1
f : α → β → γ
s : Set α
t : Set β
⊢ image2 f s t = Seq.seq (f <$> s) fun x => t
[PROOFSTEP]
ext
[GOAL]
case h
α✝ β✝ : Type u
s✝ : Set α✝
f✝ : α✝ → Set β✝
g : Set (α✝ → β✝)
α β γ : Type u_1
f : α → β → γ
s : Set α
t : Set β
x✝ : γ
⊢ x✝ ∈ image2 f s t ↔ x✝ ∈ Seq.seq (f <$> s) fun x => t
[PROOFSTEP]
simp
[GOAL]
α β : Type u
s : Set α
f : α → Set β
g : Set (α → β)
α✝ β✝ γ✝ : Type ?u.7831
x✝² : Set α✝
x✝¹ : α✝ → Set β✝
x✝ : β✝ → Set γ✝
⊢ x✝² >>= x✝¹ >>= x✝ = x✝² >>= fun x => x✝¹ x >>= x✝
[PROOFSTEP]
simp only [bind_def, biUnion_iUnion]
[GOAL]
α β✝ : Type u
s : Set α
f : α → Set β✝
g : Set (α → β✝)
β : Set α
γ : Set ↑β
⊢ Lean.Internal.coeM γ ⊆ β
[PROOFSTEP]
intro _ ⟨_, ⟨⟨⟨_, ha⟩, rfl⟩, _, ⟨_, rfl⟩, _⟩⟩
[GOAL]
α β✝ : Type u
s : Set α
f : α → Set β✝
g : Set (α → β✝)
β : Set α
γ : Set ↑β
a✝ val✝ : α
ha : val✝ ∈ β
h✝ : { val := val✝, property := ha } ∈ γ
right✝ : a✝ ∈ (fun h => (fun a => pure (CoeT.coe a)) { val := val✝, property := ha }) h✝
⊢ a✝ ∈ β
[PROOFSTEP]
convert ha
[GOAL]
α β✝ : Type u
s : Set α
f : α → Set β✝
g : Set (α → β✝)
β : Set α
γ : Set ↑β
a : α
ha : a ∈ Lean.Internal.coeM γ
⊢ { val := a, property := (_ : a ∈ β) } ∈ γ
[PROOFSTEP]
rcases ha with ⟨_, ⟨_, rfl⟩, _, ⟨ha, rfl⟩, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α β✝ : Type u
s : Set α
f : α → Set β✝
g : Set (α → β✝)
β : Set α
γ : Set ↑β
a : α
w✝ : ↑β
ha : w✝ ∈ γ
right✝ : a ∈ (fun h => (fun a => pure (CoeT.coe a)) w✝) ha
⊢ { val := a, property := (_ : a ∈ β) } ∈ γ
[PROOFSTEP]
convert ha