Theorem: Algebra.IsSeparable.of_equiv_equiv
File: Mathlib/FieldTheory/Separable.lean

Proof steps:
state_before: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
⊢ Algebra.IsSeparable A₂ B₂
state_after: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
⊢ Algebra.IsSeparable A₂ B₂
tactic: letI := e₁.toRingHom.toAlgebra
state_before: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
⊢ Algebra.IsSeparable A₂ B₂
state_after: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
⊢ Algebra.IsSeparable A₂ B₂
tactic: letI := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
state_before: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
⊢ Algebra.IsSeparable A₂ B₂
state_after: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝¹ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this✝ : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
this : IsScalarTower A₁ A₂ B₁
⊢ Algebra.IsSeparable A₂ B₂
tactic: haveI : IsScalarTower A₁ A₂ B₁ := IsScalarTower.of_algebraMap_eq
    (fun x ↦ by simp [RingHom.algebraMap_toAlgebra])
state_before: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝¹ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this✝ : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
this : IsScalarTower A₁ A₂ B₁
⊢ Algebra.IsSeparable A₂ B₂
state_after: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝¹ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this✝ : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
this : IsScalarTower A₁ A₂ B₁
e : B₁ ≃ₐ[A₂] B₂ := { toEquiv := e₂.toEquiv, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
⊢ Algebra.IsSeparable A₂ B₂
tactic: let e : B₁ ≃ₐ[A₂] B₂ :=
    { e₂ with
      commutes' := fun r ↦ by
        simpa [RingHom.algebraMap_toAlgebra] using DFunLike.congr_fun he.symm (e₁.symm r) }
state_before: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝¹ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this✝ : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
this : IsScalarTower A₁ A₂ B₁
e : B₁ ≃ₐ[A₂] B₂ := { toEquiv := e₂.toEquiv, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
⊢ Algebra.IsSeparable A₂ B₂
state_after: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝² : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this✝¹ : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
this✝ : IsScalarTower A₁ A₂ B₁
e : B₁ ≃ₐ[A₂] B₂ := { toEquiv := e₂.toEquiv, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
this : Algebra.IsSeparable A₂ B₁
⊢ Algebra.IsSeparable A₂ B₂
tactic: haveI := Algebra.isSeparable_tower_top_of_isSeparable A₁ A₂ B₁
state_before: F : Type u_1
K : Type u_2
E : Type u_3
inst✝¹³ : Field F
inst✝¹² : Field K
inst✝¹¹ : Field E
inst✝¹⁰ : Algebra F K
inst✝⁹ : Algebra F E
inst✝⁸ : Algebra K E
inst✝⁷ : IsScalarTower F K E
A₁ : Type u_4
B₁ : Type u_5
A₂ : Type u_6
B₂ : Type u_7
inst✝⁶ : Field A₁
inst✝⁵ : Field B₁
inst✝⁴ : Field A₂
inst✝³ : Field B₂
inst✝² : Algebra A₁ B₁
inst✝¹ : Algebra A₂ B₂
e₁ : A₁ ≃+* A₂
e₂ : B₁ ≃+* B₂
he : (algebraMap A₂ B₂).comp ↑e₁ = (↑e₂).comp (algebraMap A₁ B₁)
inst✝ : Algebra.IsSeparable A₁ B₁
this✝² : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this✝¹ : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
this✝ : IsScalarTower A₁ A₂ B₁
e : B₁ ≃ₐ[A₂] B₂ := { toEquiv := e₂.toEquiv, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
this : Algebra.IsSeparable A₂ B₁
⊢ Algebra.IsSeparable A₂ B₂
state_after: no goals
tactic: exact Algebra.IsSeparable.of_algHom _ _ e.symm.toAlgHom