Theorem: CategoryTheory.OverPresheafAux.YonedaCollection.ext
File: Mathlib/CategoryTheory/Comma/Presheaf.lean

tactic: rw [h]
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p q : YonedaCollection F X
h : p.fst = q.fst
⊢ { unop := CostructuredArrow.mk q.fst } = { unop := CostructuredArrow.mk p.fst }
state_after: no goals

tactic: rcases p with ⟨p, p'⟩
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p q : YonedaCollection F X
h : p.fst = q.fst
h' : F.map (eqToHom ⋯) q.snd = p.snd
⊢ p = q
state_after: case mk
C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
q : YonedaCollection F X
p : A.obj { unop := X }
p' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
h : fst ⟨p, p'⟩ = q.fst
h' : F.map (eqToHom ⋯) q.snd = snd ⟨p, p'⟩
⊢ ⟨p, p'⟩ = q

tactic: rcases q with ⟨q, q'⟩
state_before: case mk
C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
q : YonedaCollection F X
p : A.obj { unop := X }
p' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
h : fst ⟨p, p'⟩ = q.fst
h' : F.map (eqToHom ⋯) q.snd = snd ⟨p, p'⟩
⊢ ⟨p, p'⟩ = q
state_after: case mk.mk
C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p : A.obj { unop := X }
p' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
q : A.obj { unop := X }
q' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm q) }
h : fst ⟨p, p'⟩ = fst ⟨q, q'⟩
h' : F.map (eqToHom ⋯) (snd ⟨q, q'⟩) = snd ⟨p, p'⟩
⊢ ⟨p, p'⟩ = ⟨q, q'⟩

tactic: obtain rfl : p = q := yonedaEquiv.symm.injective h
state_before: case mk.mk
C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p : A.obj { unop := X }
p' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
q : A.obj { unop := X }
q' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm q) }
h : fst ⟨p, p'⟩ = fst ⟨q, q'⟩
h' : F.map (eqToHom ⋯) (snd ⟨q, q'⟩) = snd ⟨p, p'⟩
⊢ ⟨p, p'⟩ = ⟨q, q'⟩
state_after: case mk.mk
C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p : A.obj { unop := X }
p' q' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
h : fst ⟨p, p'⟩ = fst ⟨p, q'⟩
h' : F.map (eqToHom ⋯) (snd ⟨p, q'⟩) = snd ⟨p, p'⟩
⊢ ⟨p, p'⟩ = ⟨p, q'⟩

tactic: exact Sigma.ext rfl (by simpa [snd] using h'.symm)
state_before: case mk.mk
C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p : A.obj { unop := X }
p' q' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
h : fst ⟨p, p'⟩ = fst ⟨p, q'⟩
h' : F.map (eqToHom ⋯) (snd ⟨p, q'⟩) = snd ⟨p, p'⟩
⊢ ⟨p, p'⟩ = ⟨p, q'⟩
state_after: no goals

tactic: simpa [snd] using h'.symm
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
p : A.obj { unop := X }
p' q' : F.obj { unop := CostructuredArrow.mk (yonedaEquiv.symm p) }
h : fst ⟨p, p'⟩ = fst ⟨p, q'⟩
h' : F.map (eqToHom ⋯) (snd ⟨p, q'⟩) = snd ⟨p, p'⟩
⊢ HEq ⟨p, p'⟩.snd ⟨p, q'⟩.snd
state_after: no goals