Theorem: Normal.minpoly_eq_iff_mem_orbit
File: Mathlib/FieldTheory/Normal.lean

tactic: refine ⟨fun he ↦ ?_, fun ⟨f, he⟩ ↦ he ▸ minpoly.algEquiv_eq f y⟩
state_before: F : Type u_1
K : Type u_2
inst✝¹⁵ : Field F
inst✝¹⁴ : Field K
inst✝¹³ : Algebra F K
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹² : Field F
inst✝¹¹ : Field K₁
inst✝¹⁰ : Field K₂
inst✝⁹ : Field K₃
inst✝⁸ : Algebra F K₁
inst✝⁷ : Algebra F K₂
inst✝⁶ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
E : Type u_6
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : Algebra K₁ E
inst✝² : Algebra K₂ E
inst✝¹ : IsScalarTower F K₁ E
inst✝ : IsScalarTower F K₂ E
h : Normal F E
x y : E
⊢ minpoly F x = minpoly F y ↔ x ∈ MulAction.orbit (E ≃ₐ[F] E) y
state_after: F : Type u_1
K : Type u_2
inst✝¹⁵ : Field F
inst✝¹⁴ : Field K
inst✝¹³ : Algebra F K
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹² : Field F
inst✝¹¹ : Field K₁
inst✝¹⁰ : Field K₂
inst✝⁹ : Field K₃
inst✝⁸ : Algebra F K₁
inst✝⁷ : Algebra F K₂
inst✝⁶ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
E : Type u_6
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : Algebra K₁ E
inst✝² : Algebra K₂ E
inst✝¹ : IsScalarTower F K₁ E
inst✝ : IsScalarTower F K₂ E
h : Normal F E
x y : E
he : minpoly F x = minpoly F y
⊢ x ∈ MulAction.orbit (E ≃ₐ[F] E) y

tactic: obtain ⟨φ, hφ⟩ := exists_algHom_of_splits_of_aeval (normal_iff.mp h) (he ▸ minpoly.aeval F x)
state_before: F : Type u_1
K : Type u_2
inst✝¹⁵ : Field F
inst✝¹⁴ : Field K
inst✝¹³ : Algebra F K
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹² : Field F
inst✝¹¹ : Field K₁
inst✝¹⁰ : Field K₂
inst✝⁹ : Field K₃
inst✝⁸ : Algebra F K₁
inst✝⁷ : Algebra F K₂
inst✝⁶ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
E : Type u_6
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : Algebra K₁ E
inst✝² : Algebra K₂ E
inst✝¹ : IsScalarTower F K₁ E
inst✝ : IsScalarTower F K₂ E
h : Normal F E
x y : E
he : minpoly F x = minpoly F y
⊢ x ∈ MulAction.orbit (E ≃ₐ[F] E) y
state_after: case intro
F : Type u_1
K : Type u_2
inst✝¹⁵ : Field F
inst✝¹⁴ : Field K
inst✝¹³ : Algebra F K
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹² : Field F
inst✝¹¹ : Field K₁
inst✝¹⁰ : Field K₂
inst✝⁹ : Field K₃
inst✝⁸ : Algebra F K₁
inst✝⁷ : Algebra F K₂
inst✝⁶ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
E : Type u_6
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : Algebra K₁ E
inst✝² : Algebra K₂ E
inst✝¹ : IsScalarTower F K₁ E
inst✝ : IsScalarTower F K₂ E
h : Normal F E
x y : E
he : minpoly F x = minpoly F y
φ : E →ₐ[F] E
hφ : φ y = x
⊢ x ∈ MulAction.orbit (E ≃ₐ[F] E) y

tactic: exact ⟨AlgEquiv.ofBijective φ (φ.normal_bijective F E E), hφ⟩
state_before: case intro
F : Type u_1
K : Type u_2
inst✝¹⁵ : Field F
inst✝¹⁴ : Field K
inst✝¹³ : Algebra F K
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹² : Field F
inst✝¹¹ : Field K₁
inst✝¹⁰ : Field K₂
inst✝⁹ : Field K₃
inst✝⁸ : Algebra F K₁
inst✝⁷ : Algebra F K₂
inst✝⁶ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
E : Type u_6
inst✝⁵ : Field E
inst✝⁴ : Algebra F E
inst✝³ : Algebra K₁ E
inst✝² : Algebra K₂ E
inst✝¹ : IsScalarTower F K₁ E
inst✝ : IsScalarTower F K₂ E
h : Normal F E
x y : E
he : minpoly F x = minpoly F y
φ : E →ₐ[F] E
hφ : φ y = x
⊢ x ∈ MulAction.orbit (E ≃ₐ[F] E) y
state_after: no goals