Theorem: CategoryTheory.PreGaloisCategory.autMap_surjective_of_isGalois
File: Mathlib/CategoryTheory/Galois/GaloisObjects.lean

tactic: intro σ
state_before: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝² : FiberFunctor F
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
⊢ Function.Surjective (autMap f)
state_after: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝² : FiberFunctor F
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
⊢ ∃ a, autMap f a = σ

tactic: let F := GaloisCategory.getFiberFunctor C
state_before: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝² : FiberFunctor F
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
⊢ ∃ a, autMap f a = σ
state_after: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
⊢ ∃ a, autMap f a = σ

tactic: obtain ⟨a⟩ := nonempty_fiber_of_isConnected F A
state_before: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
⊢ ∃ a, autMap f a = σ
state_after: case intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ ∃ a, autMap f a = σ

tactic: obtain ⟨a', ha'⟩ := surjective_of_nonempty_fiber_of_isConnected F f (F.map σ.hom (F.map f a))
state_before: case intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ ∃ a, autMap f a = σ
state_after: case intro.intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
⊢ ∃ a, autMap f a = σ

tactic: obtain ⟨τ, (hτ : F.map τ.hom a = a')⟩ := MulAction.exists_smul_eq (Aut A) a a'
state_before: case intro.intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
⊢ ∃ a, autMap f a = σ
state_after: case intro.intro.intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
τ : Aut A
hτ : F.map τ.hom a = a'
⊢ ∃ a, autMap f a = σ

tactic: use τ
state_before: case intro.intro.intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
τ : Aut A
hτ : F.map τ.hom a = a'
⊢ ∃ a, autMap f a = σ
state_after: case h
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
τ : Aut A
hτ : F.map τ.hom a = a'
⊢ autMap f τ = σ

tactic: apply evaluation_aut_injective_of_isConnected F B (F.map f a)
state_before: case h
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
τ : Aut A
hτ : F.map τ.hom a = a'
⊢ autMap f τ = σ
state_after: case h.a
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
τ : Aut A
hτ : F.map τ.hom a = a'
⊢ (fun f_1 => F.map f_1.hom (F.map f a)) (autMap f τ) = (fun f_1 => F.map f_1.hom (F.map f a)) σ

tactic: simp [hτ, ha']
state_before: case h.a
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
inst✝¹ : IsGalois A
inst✝ : IsGalois B
f : A ⟶ B
σ : Aut B
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a a' : ↑(F.obj A)
ha' : F.map f a' = F.map σ.hom (F.map f a)
τ : Aut A
hτ : F.map τ.hom a = a'
⊢ (fun f_1 => F.map f_1.hom (F.map f a)) (autMap f τ) = (fun f_1 => F.map f_1.hom (F.map f a)) σ
state_after: no goals