case rel
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : Types.Quot.Rel (F ⋙ coyoneda.obj d.op) x✝ y✝
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)

case refl
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ : (X : C) × (d ⟶ F.obj X)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk x✝.snd)

case symm
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a_ih✝ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
⊢ Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk x✝.snd)

case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ : (X : C) × (d ⟶ F.obj X)
t : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) f₁ f₂
⊢ Zigzag (StructuredArrow.mk f₁.snd) (StructuredArrow.mk f₂.snd)
induction t
case refl
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ : (X : C) × (d ⟶ F.obj X)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk x✝.snd)

case symm
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a_ih✝ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
⊢ Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk x✝.snd)

case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case rel
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : Types.Quot.Rel (F ⋙ coyoneda.obj d.op) x✝ y✝
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)

case refl
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ : (X : C) × (d ⟶ F.obj X)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk x✝.snd)

case symm
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a_ih✝ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
⊢ Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk x✝.snd)

case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case rel x y r =>
  obtain ⟨f, w⟩ := r
  fconstructor
  swap; fconstructor
  left; fconstructor
  exact StructuredArrow.homMk f
case symm
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a_ih✝ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
⊢ Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk x✝.snd)

case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case refl
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ : (X : C) × (d ⟶ F.obj X)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk x✝.snd)

case symm
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a_ih✝ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
⊢ Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk x✝.snd)

case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case refl => fconstructor
case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case symm
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a_ih✝ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
⊢ Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk x✝.snd)

case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case symm x y _ ih =>
  apply zigzag_symmetric
  exact ih
no goals
case trans
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ y✝ z✝ : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x✝ y✝
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y✝ z✝
a_ih✝¹ : Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk y✝.snd)
a_ih✝ : Zigzag (StructuredArrow.mk y✝.snd) (StructuredArrow.mk z✝.snd)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk z✝.snd)
case trans x y z _ _ ih₁ ih₂ =>
  apply Relation.ReflTransGen.trans
  exact ih₁; exact ih₂
case intro
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
r : Types.Quot.Rel (F ⋙ coyoneda.obj d.op) x y
⊢ Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
obtain ⟨f, w⟩ := r
case intro.b
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ StructuredArrow d F

case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk x.snd) ?intro.b

case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zag ?intro.b (StructuredArrow.mk y.snd)
case intro
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
fconstructor
case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk x.snd) ?intro.b

case intro.b
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ StructuredArrow d F

case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zag ?intro.b (StructuredArrow.mk y.snd)
case intro.b
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ StructuredArrow d F

case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk x.snd) ?intro.b

case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zag ?intro.b (StructuredArrow.mk y.snd)
swap
case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk x.snd) ?intro.b

case intro.b
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ StructuredArrow d F

case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zag ?intro.b (StructuredArrow.mk y.snd)
fconstructor
case intro.a.h
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Nonempty (StructuredArrow.mk x.snd ⟶ StructuredArrow.mk y.snd)
case intro.a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Zag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
left
case intro.a.h.val
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ StructuredArrow.mk x.snd ⟶ StructuredArrow.mk y.snd
case intro.a.h
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ Nonempty (StructuredArrow.mk x.snd ⟶ StructuredArrow.mk y.snd)
fconstructor
no goals
case intro.a.h.val
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
f : x.fst ⟶ y.fst
w : y.snd = (F ⋙ coyoneda.obj d.op).map f x.snd
⊢ StructuredArrow.mk x.snd ⟶ StructuredArrow.mk y.snd
exact StructuredArrow.homMk f
no goals
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x✝ : (X : C) × (d ⟶ F.obj X)
⊢ Zigzag (StructuredArrow.mk x✝.snd) (StructuredArrow.mk x✝.snd)
fconstructor
case a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
ih : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
⊢ Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
ih : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
⊢ Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk x.snd)
apply zigzag_symmetric
no goals
case a
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y : (X : C) × (d ⟶ F.obj X)
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
ih : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
⊢ Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
exact ih
case hab
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk x.snd) ?b

case hbc
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Relation.ReflTransGen Zag ?b (StructuredArrow.mk z.snd)

case b
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ StructuredArrow d F
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk z.snd)
apply Relation.ReflTransGen.trans
case hbc
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
case hab
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk x.snd) ?b

case hbc
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Relation.ReflTransGen Zag ?b (StructuredArrow.mk z.snd)

case b
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ StructuredArrow d F
exact ih₁
no goals
case hbc
C : Type v
inst✝² : Category C
D : Type v
inst✝¹ : Category D
F✝ : C ⥤ D
inst✝ : Final F✝
F : C ⥤ D
d : D
f₁ f₂ x y z : (X : C) × (d ⟶ F.obj X)
a✝¹ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) x y
a✝ : EqvGen (Types.Quot.Rel (F ⋙ coyoneda.obj d.op)) y z
ih₁ : Zigzag (StructuredArrow.mk x.snd) (StructuredArrow.mk y.snd)
ih₂ : Zigzag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
⊢ Relation.ReflTransGen Zag (StructuredArrow.mk y.snd) (StructuredArrow.mk z.snd)
exact ih₂