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

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✝ : IsSeparable A₁ B₁
⊢ 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✝ : IsSeparable A₁ B₁
this : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
⊢ 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✝ : IsSeparable A₁ B₁
this : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
⊢ 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✝ : IsSeparable A₁ B₁
this✝ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
⊢ 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✝ : IsSeparable A₁ B₁
this✝ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
⊢ 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✝ : 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₁
⊢ 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✝ : 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₁
⊢ 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✝ : 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' := ⋯ }
⊢ IsSeparable A₂ B₂

tactic: haveI := 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✝ : 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' := ⋯ }
⊢ 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✝ : 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 : IsSeparable A₂ B₁
⊢ IsSeparable A₂ B₂

tactic: exact IsSeparable.of_algHom _ _ e.symm.toAlgHom
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✝ : 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 : IsSeparable A₂ B₁
⊢ IsSeparable A₂ B₂
state_after: no goals

tactic: 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✝ : IsSeparable A₁ B₁
this✝ : Algebra A₁ A₂ := e₁.toRingHom.toAlgebra
this : Algebra A₂ B₁ := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
x : A₁
⊢ (algebraMap A₁ B₁) x = (algebraMap A₂ B₁) ((algebraMap A₁ A₂) x)
state_after: no goals

tactic: 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✝ : 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₁
r : A₂
⊢ e₂.toFun ((algebraMap A₂ B₁) r) = (algebraMap A₂ B₂) r
state_after: no goals