Section Every_Cone_Equalizes.
Context (Cn : Cone D).
Local Hint Extern 1 => progress cbn.
Program Definition Cone_to_DF_DCone : Cone (DF (D _o)%object) :=
{|
cone_apex := Cn;
cone_edge :=
@NatTrans_compose
_ _
(Cn ∘ (Functor_To_1_Cat (Discr_Cat J)))
(Discr_Func ((Cn ∘ (Functor_To_1_Cat J))%functor _o)%object) _
{|Trans := fun _ => id |} (Discretize (cone_edge Cn))
|}.
Definition From_Cone_to_OPR : (Cn –≻ OPR)%morphism :=
Trans (LRKE_morph_ex OPR Cone_to_DF_DCone) tt.
Program Definition Cone_to_DF_DTrag_Cone : Cone (DF DTarg) :=
{|
cone_apex := Cn;
cone_edge := {|Trans :=
fun c => Trans (Discretize (cone_edge Cn)) (Targ c)|}
|}.
Program Definition Cone_Morph_From_Cone_to_DF_DTrag_Cone_to_HPR_1 :
Cone_Morph _ Cone_to_DF_DTrag_Cone HPR :=
{|
cone_morph :=
{|Trans :=
fun f =>
match f as u return (((Cn _o) u)%object –≻ (_ u))%morphism
with
| tt => (Projs ∘ From_Cone_to_OPR)%morphism
end
|}
|}.
Next Obligation.
Next Obligation.
Next Obligation.
Program Definition Cone_Morph_From_Cone_to_DF_DTrag_Cone_to_HPR_2 :
Cone_Morph _ Cone_to_DF_DTrag_Cone HPR :=
{|
cone_morph :=
{|Trans :=
fun f =>
match f as u return (((Cn _o)%object u) –≻ (_ u))%morphism
with
| tt => (D_imgs ∘ From_Cone_to_OPR)%morphism
end
|}
|}.
Next Obligation.
Next Obligation.
Next Obligation.

Lemma From_Cone_to_Obj_Prod_Equalizes :
(Projs ∘ From_Cone_to_OPR = D_imgs ∘ From_Cone_to_OPR)%morphism.