Theorem: CategoryTheory.PreGaloisCategory.exists_galois_representative
File: Mathlib/CategoryTheory/Galois/Decomposition.lean

tactic: obtain ⟨A, u, a, h1, h2, h3⟩ := fiber_in_connected_component F (selfProd F X)
  (mkSelfProdFib F X)
state_before: C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
⊢ ∃ A a, IsGalois A ∧ Function.Bijective fun f => F.map f a
state_after: case intro.intro.intro.intro.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ ∃ A a, IsGalois A ∧ Function.Bijective fun f => F.map f a

tactic: use A
state_before: case intro.intro.intro.intro.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ ∃ A a, IsGalois A ∧ Function.Bijective fun f => F.map f a
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ ∃ a, IsGalois A ∧ Function.Bijective fun f => F.map f a

tactic: use a
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ ∃ a, IsGalois A ∧ Function.Bijective fun f => F.map f a
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ IsGalois A ∧ Function.Bijective fun f => F.map f a

tactic: constructor
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ IsGalois A ∧ Function.Bijective fun f => F.map f a
state_after: case h.left
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ IsGalois A

case h.right
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ Function.Bijective fun f => F.map f a

tactic: refine (isGalois_iff_pretransitive F A).mpr ⟨fun x y ↦ ?_⟩
state_before: case h.left
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ IsGalois A
state_after: case h.left
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
⊢ ∃ g, g • x = y

tactic: obtain ⟨fi1, hfi1⟩ := subobj_selfProd_trans h1 x
state_before: case h.left
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
⊢ ∃ g, g • x = y
state_after: case h.left.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
⊢ ∃ g, g • x = y

tactic: obtain ⟨fi2, hfi2⟩ := subobj_selfProd_trans h1 y
state_before: case h.left.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
⊢ ∃ g, g • x = y
state_after: case h.left.intro.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ ∃ g, g • x = y

tactic: use fi1 ≪≫ fi2.symm
state_before: case h.left.intro.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ ∃ g, g • x = y
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ fi1 ≪≫ fi2.symm • x = y

tactic: show F.map (fi1.hom ≫ fi2.inv) x = y
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ fi1 ≪≫ fi2.symm • x = y
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ F.map (fi1.hom ≫ fi2.inv) x = y

tactic: simp only [map_comp, FintypeCat.comp_apply]
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ F.map (fi1.hom ≫ fi2.inv) x = y
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ F.map fi2.inv (F.map fi1.hom x) = y

tactic: rw [hfi1, ← hfi2]
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ F.map fi2.inv (F.map fi1.hom x) = y
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ F.map fi2.inv (F.map fi2.hom y) = y

tactic: exact congr_fun (F.mapIso fi2).hom_inv_id y
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x y : ↑(F.obj A)
fi1 : A ≅ A
hfi1 : F.map fi1.hom x = a
fi2 : A ≅ A
hfi2 : F.map fi2.hom y = a
⊢ F.map fi2.inv (F.map fi2.hom y) = y
state_after: no goals

tactic: refine ⟨evaluation_injective_of_isConnected F A X a, ?_⟩
state_before: case h.right
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ Function.Bijective fun f => F.map f a
state_after: case h.right
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ Function.Surjective fun f => F.map f a

tactic: intro x
state_before: case h.right
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
⊢ Function.Surjective fun f => F.map f a
state_after: case h.right
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x : ↑(F.obj X)
⊢ ∃ a_1, (fun f => F.map f a) a_1 = x

tactic: use u ≫ Pi.π _ x
state_before: case h.right
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x : ↑(F.obj X)
⊢ ∃ a_1, (fun f => F.map f a) a_1 = x
state_after: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x : ↑(F.obj X)
⊢ (fun f => F.map f a) (u ≫ Pi.π (fun x => X) x) = x

tactic: exact (selfProdProj_fiber h1) x
state_before: case h
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X A : C
u : A ⟶ CategoryTheory.PreGaloisCategory.selfProd F X
a : ↑(F.obj A)
h1 : F.map u a = CategoryTheory.PreGaloisCategory.mkSelfProdFib F X
h2 : IsConnected A
h3 : Mono u
x : ↑(F.obj X)
⊢ (fun f => F.map f a) (u ≫ Pi.π (fun x => X) x) = x
state_after: no goals