Theorem: IsGalois.tfae
File: Mathlib/FieldTheory/Galois.lean

tactic: tfae_have 1 → 2
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: case tfae_1_to_2
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
⊢ IsGalois F E → IntermediateField.fixedField ⊤ = ⊥

F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE

tactic: tfae_have 1 → 3
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: case tfae_1_to_3
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
⊢ IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E

F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE

tactic: tfae_have 1 → 4
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: case tfae_1_to_4
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
⊢ IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p

F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE

tactic: tfae_have 2 → 1
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: case tfae_2_to_1
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
⊢ IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E

F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE

tactic: tfae_have 3 → 1
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: case tfae_3_to_1
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
⊢ Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E

F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE

tactic: tfae_have 4 → 1
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: case tfae_4_to_1
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
⊢ (∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p) → IsGalois F E

F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
tfae_4_to_1 : (∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p) → IsGalois F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE

tactic: tfae_finish
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
tfae_4_to_1 : (∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p) → IsGalois F E
⊢ [IsGalois F E, IntermediateField.fixedField ⊤ = ⊥, Fintype.card (E ≃ₐ[F] E) = finrank F E,
      ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p].TFAE
state_after: no goals

tactic: exact fun h => OrderIso.map_bot (@intermediateFieldEquivSubgroup F _ E _ _ _ h).symm
state_before: case tfae_1_to_2
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
⊢ IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
state_after: no goals

tactic: intro
state_before: case tfae_1_to_3
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
⊢ IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
state_after: case tfae_1_to_3
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
a✝ : IsGalois F E
⊢ Fintype.card (E ≃ₐ[F] E) = finrank F E

tactic: exact card_aut_eq_finrank F E
state_before: case tfae_1_to_3
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
a✝ : IsGalois F E
⊢ Fintype.card (E ≃ₐ[F] E) = finrank F E
state_after: no goals

tactic: intro
state_before: case tfae_1_to_4
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
⊢ IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
state_after: case tfae_1_to_4
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
a✝ : IsGalois F E
⊢ ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p

tactic: exact is_separable_splitting_field F E
state_before: case tfae_1_to_4
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
a✝ : IsGalois F E
⊢ ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
state_after: no goals

tactic: exact of_fixedField_eq_bot F E
state_before: case tfae_2_to_1
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
⊢ IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
state_after: no goals

tactic: exact of_card_aut_eq_finrank F E
state_before: case tfae_3_to_1
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
⊢ Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
state_after: no goals

tactic: rintro ⟨h, hp1, _⟩
state_before: case tfae_4_to_1
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
⊢ (∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p) → IsGalois F E
state_after: case tfae_4_to_1.intro.intro
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
h : F[X]
hp1 : h.Separable
right✝ : Polynomial.IsSplittingField F E h
⊢ IsGalois F E

tactic: exact of_separable_splitting_field hp1
state_before: case tfae_4_to_1.intro.intro
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
p : F[X]
inst✝ : FiniteDimensional F E
tfae_1_to_2 : IsGalois F E → IntermediateField.fixedField ⊤ = ⊥
tfae_1_to_3 : IsGalois F E → Fintype.card (E ≃ₐ[F] E) = finrank F E
tfae_1_to_4 : IsGalois F E → ∃ p, p.Separable ∧ Polynomial.IsSplittingField F E p
tfae_2_to_1 : IntermediateField.fixedField ⊤ = ⊥ → IsGalois F E
tfae_3_to_1 : Fintype.card (E ≃ₐ[F] E) = finrank F E → IsGalois F E
h : F[X]
hp1 : h.Separable
right✝ : Polynomial.IsSplittingField F E h
⊢ IsGalois F E
state_after: no goals