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

tactic: let Y : C := pullback i j
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
⊢ ∃ f, F.map f.hom a = b

tactic: let u : Y ⟶ A := pullback.fst
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
⊢ ∃ f, F.map f.hom a = b

tactic: let v : Y ⟶ B := pullback.snd
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
⊢ ∃ f, F.map f.hom a = b

tactic: let G := F ⋙ FintypeCat.incl
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
⊢ ∃ f, F.map f.hom a = b

tactic: let e : F.obj Y ≃ { p : F.obj A × F.obj B // F.map i p.1 = F.map j p.2 } :=
  fiberPullbackEquiv F i j
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
⊢ ∃ f, F.map f.hom a = b

tactic: let y : F.obj Y := e.symm ⟨(a, b), h⟩
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
⊢ ∃ f, F.map f.hom a = b

tactic: have hn : IsInitial Y → False := not_initial_of_inhabited F y
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
⊢ ∃ f, F.map f.hom a = b

tactic: have : IsIso u := IsConnected.noTrivialComponent Y u hn
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this : IsIso u
⊢ ∃ f, F.map f.hom a = b

tactic: have : IsIso v := IsConnected.noTrivialComponent Y v hn
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this : IsIso u
⊢ ∃ f, F.map f.hom a = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ ∃ f, F.map f.hom a = b

tactic: use (asIso u).symm ≪≫ asIso v
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ ∃ f, F.map f.hom a = b
state_after: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom a = b

tactic: have hu : G.map u y = a := by
  simp only [y, e, ← PreservesPullback.iso_hom_fst G, fiberPullbackEquiv, Iso.toEquiv_comp,
    Equiv.symm_trans_apply, Iso.toEquiv_symm_fun, types_comp_apply, inv_hom_id_apply]
  rw [Types.pullbackIsoPullback_inv_fst_apply (F.map i) (F.map j)]
state_before: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom a = b
state_after: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom a = b

tactic: have hv : G.map v y = b := by
  simp only [y, e, ← PreservesPullback.iso_hom_snd G, fiberPullbackEquiv, Iso.toEquiv_comp,
    Equiv.symm_trans_apply, Iso.toEquiv_symm_fun, types_comp_apply, inv_hom_id_apply]
  rw [Types.pullbackIsoPullback_inv_snd_apply (F.map i) (F.map j)]
state_before: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom a = b
state_after: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
hv : G.map v y = b
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom a = b

tactic: rw [← hu, ← hv]
state_before: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
hv : G.map v y = b
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom a = b
state_after: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
hv : G.map v y = b
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom (G.map u y) = G.map v y

tactic: show (F.toPrefunctor.map u ≫ F.toPrefunctor.map _) y = F.toPrefunctor.map v y
state_before: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
hv : G.map v y = b
⊢ F.map ((asIso u).symm ≪≫ asIso v).hom (G.map u y) = G.map v y
state_after: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
hv : G.map v y = b
⊢ (F.map u ≫ F.map ((asIso u).symm ≪≫ asIso v).hom) y = F.map v y

tactic: simp only [← F.map_comp, Iso.trans_hom, Iso.symm_hom, asIso_inv, asIso_hom,
  IsIso.hom_inv_id_assoc]
state_before: case h
C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
hv : G.map v y = b
⊢ (F.map u ≫ F.map ((asIso u).symm ≪≫ asIso v).hom) y = F.map v y
state_after: no goals

tactic: simp only [y, e, ← PreservesPullback.iso_hom_fst G, fiberPullbackEquiv, Iso.toEquiv_comp,
  Equiv.symm_trans_apply, Iso.toEquiv_symm_fun, types_comp_apply, inv_hom_id_apply]
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ G.map u y = a
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ pullback.fst ((Types.pullbackIsoPullback (F.map i) (F.map j)).inv ⟨(a, b), h⟩) = a

tactic: rw [Types.pullbackIsoPullback_inv_fst_apply (F.map i) (F.map j)]
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
⊢ pullback.fst ((Types.pullbackIsoPullback (F.map i) (F.map j)).inv ⟨(a, b), h⟩) = a
state_after: no goals

tactic: simp only [y, e, ← PreservesPullback.iso_hom_snd G, fiberPullbackEquiv, Iso.toEquiv_comp,
  Equiv.symm_trans_apply, Iso.toEquiv_symm_fun, types_comp_apply, inv_hom_id_apply]
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
⊢ G.map v y = b
state_after: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
⊢ pullback.snd ((Types.pullbackIsoPullback (F.map i) (F.map j)).inv ⟨(a, b), h⟩) = b

tactic: rw [Types.pullbackIsoPullback_inv_snd_apply (F.map i) (F.map j)]
state_before: C : Type u₁
inst✝⁶ : Category.{u₂, u₁} C
inst✝⁵ : GaloisCategory C
F : C ⥤ FintypeCat
inst✝⁴ : FiberFunctor F
X A B : C
inst✝³ : IsConnected A
inst✝² : IsConnected B
a : ↑(F.obj A)
b : ↑(F.obj B)
i : A ⟶ X
j : B ⟶ X
h : F.map i a = F.map j b
inst✝¹ : Mono i
inst✝ : Mono j
Y : C := pullback i j
u : Y ⟶ A := pullback.fst
v : Y ⟶ B := pullback.snd
G : C ⥤ Type w := F ⋙ FintypeCat.incl
e : ↑(F.obj Y) ≃ { p // F.map i p.1 = F.map j p.2 } := fiberPullbackEquiv F i j
y : ↑(F.obj Y) := e.symm ⟨(a, b), h⟩
hn : IsInitial Y → False
this✝ : IsIso u
this : IsIso v
hu : G.map u y = a
⊢ pullback.snd ((Types.pullbackIsoPullback (F.map i) (F.map j)).inv ⟨(a, b), h⟩) = b
state_after: no goals