Timings for Sum.v
Require Import Basics.Overture Basics.Tactics.
Require Import WildCat.Core.
Instance isgraph_sum A B `{IsGraph A} `{IsGraph B}
: IsGraph (A + B).
intros [a1 | b1] [a2 | b2].
Instance is01cat_sum A B `{ Is01Cat A } `{ Is01Cat B}
: Is01Cat (A + B).
intros [a | b]; cbn; apply Id.
intros [a | b] [a1 | b1] [a2 | b2];
try contradiction; cbn; exact cat_comp.
Instance is2graph_sum A B `{Is2Graph A, Is2Graph B}
: Is2Graph (A + B).
intros x y; apply Build_IsGraph.
destruct x as [a1 | b1], y as [a2 | b2];
try contradiction; cbn; exact Hom.
(* Note: [try contradiction] deals with empty cases. *)
Instance is1cat_sum A B `{ Is1Cat A } `{ Is1Cat B}
: Is1Cat (A + B).
srapply Build_Is01Cat; destruct x as [a1 | b1], y as [a2 | b2].
1,2: intros a b c; exact cat_comp.
intros x y; srapply Build_Is0Gpd.
destruct x as [a1 | b1], y as [a2 | b2].
all: cbn; intros f g; exact gpd_rev.
intros x y z h; srapply Build_Is0Functor.
destruct x as [a1 | b1], y as [a2 | b2].
all: destruct z as [a3 | b3].
all: cbn in *; change (f $== g) in p; exact (h $@L p).
intros x y z h; srapply Build_Is0Functor.
destruct x as [a1 | b1], y as [a2 | b2].
all: destruct z as [a3 | b3].
all: cbn in *; change (f $== g) in p; exact (p $@R h).
intros [a1 | b1] [a2 | b2].
all: intros f g h; cbn; apply cat_assoc.
intros [a1 | b1] [a2 | b2].
all: intros f g h; cbn; apply cat_assoc_opp.
intros [a1 | b1] [a2 | b2] f.
intros [a1 | b1] [a2 | b2] f.