l3lab/ntp-mathlib huggingface dataset:
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    

Proof state:
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

Next tactic:
apply (algebraMap K A).injective
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    

Proof state:
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)

Next tactic:
haveI : FiniteDimensional L F := FiniteDimensional.right K L F
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    

Proof state:
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)

Next tactic:
haveI : FiniteDimensional K L := FiniteDimensional.left K L F
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    

Proof state:
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)

Next tactic:
haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    

Proof state:
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)

Next tactic:
haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    

Proof state:
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)

Next tactic:
letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    

Proof state:
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)

Next tactic:
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]
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    

Proof state:
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

Next tactic:
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]
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    suffices ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        ∏ π : F →ₐ[L] A, π x = σ (norm L x)
      by 

Proof state:
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

Next tactic:
simp_rw [← Finset.univ_sigma_univ, Finset.prod_sigma, this, norm_eq_prod_embeddings]
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · 

Proof state:
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)

Next tactic:
intro σ
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · intro σ
      

Proof state:
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)

Next tactic:
letI : Algebra L A := σ.toRingHom.toAlgebra
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · intro σ
      letI : Algebra L A := σ.toRingHom.toAlgebra
      

Proof state:
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)

Next tactic:
rw [← norm_eq_prod_embeddings L A (_ : F)]
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · intro σ
      letI : Algebra L A := σ.toRingHom.toAlgebra
      rw [← norm_eq_prod_embeddings L A (_ : F)]
      

Proof state:
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)

Next tactic:
rfl
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · intro σ
      letI : Algebra L A := σ.toRingHom.toAlgebra
      rw [← norm_eq_prod_embeddings L A (_ : F)]
      rfl
  · 

Proof state:
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

Next tactic:
rw [norm_eq_one_of_not_module_finite hKF]
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · intro σ
      letI : Algebra L A := σ.toRingHom.toAlgebra
      rw [← norm_eq_prod_embeddings L A (_ : F)]
      rfl
  · rw [norm_eq_one_of_not_module_finite hKF]
    

Proof state:
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

Next tactic:
by_cases hKL : FiniteDimensional K L
theorem norm_norm [Algebra L F] [IsScalarTower K L F] [IsSeparable K F] (x : F) :
    norm K (norm L x) = norm K x := by
  by_cases hKF : FiniteDimensional K F
  · let A := AlgebraicClosure K
    apply (algebraMap K A).injective
    haveI : FiniteDimensional L F := FiniteDimensional.right K L F
    haveI : FiniteDimensional K L := FiniteDimensional.left K L F
    haveI : IsSeparable K L := isSeparable_tower_bot_of_isSeparable K L F
    haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
    letI : ∀ σ : L →ₐ[K] A,
        haveI := σ.toRingHom.toAlgebra
        Fintype (F →ₐ[L] A) := fun _ => inferInstance
    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]
    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]
    · intro σ
      letI : Algebra L A := σ.toRingHom.toAlgebra
      rw [← norm_eq_prod_embeddings L A (_ : F)]
      rfl
  · rw [norm_eq_one_of_not_module_finite hKF]
    by_cases hKL : FiniteDimensional K L
    · 

Proof state:
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

Next tactic:
have hLF : ¬FiniteDimensional L F := by
        refine' (mt _) hKF
        intro hKF
        exact FiniteDimensional.trans K L F