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

tactic: obtain ⟨ι, f, g, hl, hc, he⟩ := has_decomp_connected_components X
state_before: C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
x : ↑(F.obj X)
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i

tactic: have : Fintype ι := Fintype.ofFinite ι
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i

tactic: let s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i

tactic: let s' : IsColimit s := isColimitOfPreserves F hl
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i

tactic: obtain ⟨⟨j⟩, z, h⟩ := Concrete.isColimit_exists_rep _ s' x
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 : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i
state_after: case intro.intro.intro.intro.intro.intro.mk.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
j : ι
z : (forget FintypeCat).obj ((Discrete.functor f ⋙ F).obj { as := j })
h : (s.ι.app { as := j }) z = x
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i

tactic: refine ⟨f j, g j, z, ⟨?_, hc j, MonoCoprod.mono_inj _ (Cofan.mk X g) hl j⟩⟩
state_before: case intro.intro.intro.intro.intro.intro.mk.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
j : ι
z : (forget FintypeCat).obj ((Discrete.functor f ⋙ F).obj { as := j })
h : (s.ι.app { as := j }) z = x
⊢ ∃ Y i y, F.map i y = x ∧ IsConnected Y ∧ Mono i
state_after: case intro.intro.intro.intro.intro.intro.mk.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
j : ι
z : (forget FintypeCat).obj ((Discrete.functor f ⋙ F).obj { as := j })
h : (s.ι.app { as := j }) z = x
⊢ F.map (g j) z = x

tactic: subst h
state_before: case intro.intro.intro.intro.intro.intro.mk.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
x : ↑(F.obj X)
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
j : ι
z : (forget FintypeCat).obj ((Discrete.functor f ⋙ F).obj { as := j })
h : (s.ι.app { as := j }) z = x
⊢ F.map (g j) z = x
state_after: case intro.intro.intro.intro.intro.intro.mk.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
j : ι
z : (forget FintypeCat).obj ((Discrete.functor f ⋙ F).obj { as := j })
⊢ F.map (g j) z = (s.ι.app { as := j }) z

tactic: rfl
state_before: case intro.intro.intro.intro.intro.intro.mk.intro
C : Type u₁
inst✝² : Category.{u₂, u₁} C
inst✝¹ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝ : FiberFunctor F
X : C
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
he : Finite ι
this : Fintype ι
s : Cocone (Discrete.functor f ⋙ F) := F.mapCocone (Cofan.mk X g)
s' : IsColimit s := isColimitOfPreserves F hl
j : ι
z : (forget FintypeCat).obj ((Discrete.functor f ⋙ F).obj { as := j })
⊢ F.map (g j) z = (s.ι.app { as := j }) z
state_after: no goals