Let’s say that cat
is the type of categories (I don’t think its precise formalization really matters here). I define the type of « initial structures » of a category ℭ as follows:
Record weak_initial := {
w_initial_obj :> obj ℭ;
arrow0D (D : obj ℭ) : hom w_initial_obj D;
}.
Record initial := {
w_initial :> weak_initial;
initialP : ∀ {D} (f : hom w_initial D), f = arrow0D w_initial D;
}.
I can show:
Lemma eq_initial : ∀ (p q : initial), w_initial p = w_initial q ->
p = q.
In « usual » mathematics we have something stronger:
∀ (p q : initial), w_initial_obj p = w_initial_obj q ->
p = q.
I don’t think this is provable because we don’t have functional extensionality. I don’t see how to define initial structures in such a way that this statement would be provable. Anyway, given two initial structures on the same object and some object D
:
Variable initial1 initial2 : initial.
Variable P : w_initial_obj initial1 = w_initial_obj initial2.
Variable D : ℭ.
I can prove
Lemma equal_homs : eq_rect (w_initial_obj initial1)
(λ _ : ℭ, Type)
(hom (w_initial_obj initial1) D)
(w_initial_obj initial2) P =
hom (w_initial_obj initial2) D.
but can we prove a statement that relates arrow0D initial1 D
and arrow0D initial2 D
?