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

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
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
⊢ ∃! τ, f ≫ τ.hom = σ.hom ≫ f
state_after: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
⊢ ∃! τ, f ≫ τ.hom = σ.hom ≫ f

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
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
⊢ ∃! τ, f ≫ τ.hom = σ.hom ≫ f
state_after: case intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ ∃! τ, f ≫ τ.hom = σ.hom ≫ f

tactic: refine ⟨?_, ?_, ?_⟩
state_before: case intro
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ ∃! τ, f ≫ τ.hom = σ.hom ≫ f
state_after: case intro.refine_1
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ Aut B

case intro.refine_2
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ (fun τ => f ≫ τ.hom = σ.hom ≫ f) ?intro.refine_1

case intro.refine_3
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ ∀ (y : Aut B), (fun τ => f ≫ τ.hom = σ.hom ≫ f) y → y = ?intro.refine_1

tactic: exact (evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a)
state_before: case intro.refine_1
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ Aut B
state_after: no goals

tactic: apply evaluation_injective_of_isConnected F A B a
state_before: case intro.refine_2
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ (fun τ => f ≫ τ.hom = σ.hom ≫ f) ((evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a))
state_after: case intro.refine_2.a
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ (fun f => F.map f a) (f ≫ ((evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a)).hom) =
    (fun f => F.map f a) (σ.hom ≫ f)

tactic: simp
state_before: case intro.refine_2.a
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ (fun f => F.map f a) (f ≫ ((evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a)).hom) =
    (fun f => F.map f a) (σ.hom ≫ f)
state_after: no goals

tactic: intro τ hτ
state_before: case intro.refine_3
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
⊢ ∀ (y : Aut B),
    (fun τ => f ≫ τ.hom = σ.hom ≫ f) y → y = (evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a)
state_after: case intro.refine_3
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
τ : Aut B
hτ : f ≫ τ.hom = σ.hom ≫ f
⊢ τ = (evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a)

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

tactic: simpa using congr_fun (F.congr_map hτ) a
state_before: case intro.refine_3.a
C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : GaloisCategory C
F✝ : C ⥤ FintypeCat
inst✝² : FiberFunctor F✝
A B : C
f : A ⟶ B
inst✝¹ : IsConnected A
inst✝ : IsGalois B
σ : Aut A
F : C ⥤ FintypeCat := GaloisCategory.getFiberFunctor C
a : ↑(F.obj A)
τ : Aut B
hτ : f ≫ τ.hom = σ.hom ≫ f
⊢ (fun f_1 => F.map f_1.hom (F.map f a)) τ =
    (fun f_1 => F.map f_1.hom (F.map f a)) ((evaluationEquivOfIsGalois F B (F.map f a)).symm (F.map (σ.hom ≫ f) a))
state_after: no goals