Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import WildCat.Core WildCat.Opposite. Require Import WildCat.Equiv. (** A wild category is pointed if the initial and terminal object are the same. *) Class IsPointedCat (A : Type) `{Is1Cat A} := { zero_object : A; isinitial_zero_object : IsInitial zero_object; isterminal_zero_object : IsTerminal zero_object; }. Global Existing Instance isinitial_zero_object. Global Existing Instance isterminal_zero_object. (** The zero morphism between objects [a] and [b] of a pointed category [A] is the unique morphism that factors throguh the zero object. *) Definition zero_morphism {A : Type} `{IsPointedCat A} {a b : A} : a $-> b := (mor_initial _ b) $o (mor_terminal a _). Section ZeroLaws. Context {A : Type} `{IsPointedCat A} {a b c : A} (f : a $-> b) (g : b $-> c). Definition cat_zero_source (h : zero_object $-> a) : h $== zero_morphism := (mor_initial_unique _ _ _)^$ $@ (mor_initial_unique _ _ _). Definition cat_zero_target (h : a $-> zero_object) : h $== zero_morphism := (mor_terminal_unique _ _ _)^$ $@ (mor_terminal_unique _ _ _). (** We show the last two arguments so that end pointes can easily be specified. *) Arguments zero_morphism {_ _ _ _ _ _} _ _.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c

zero_morphism b c $o f $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c

zero_morphism b c $o f $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c

mor_terminal a zero_object $-> mor_terminal b zero_object $o f
apply mor_terminal_unique. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c

g $o zero_morphism a b $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c

g $o zero_morphism a b $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c

mor_initial zero_object c $== g $o mor_initial zero_object b
apply mor_initial_unique. Defined. (** Any morphism which factors through an object equivalent to the zero object is homotopic to the zero morphism. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c
HasEquivs0: HasEquivs A
be: b $<~> zero_object

g $o f $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c
HasEquivs0: HasEquivs A
be: b $<~> zero_object

g $o f $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c
HasEquivs0: HasEquivs A
be: b $<~> zero_object

g $o (be^-1$ $o (be $o f)) $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c
HasEquivs0: HasEquivs A
be: b $<~> zero_object

g $o be^-1$ $o (be $o f) $== zero_morphism a c
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
a, b, c: A
f: a $-> b
g: b $-> c
HasEquivs0: HasEquivs A
be: b $<~> zero_object

g $o be^-1$ $o mor_terminal a zero_object $== zero_morphism a c
exact ((mor_initial_unique _ _ _)^$ $@R _). Defined. End ZeroLaws. (** We make the last two arguments explicit so that end points can easily be specified. We had to do this again, since the section encapsulated the previous attempt. *) Local Arguments zero_morphism {_ _ _ _ _ _} _ _. (** A functor is pointed if it preserves the zero object. *) Class IsPointedFunctor {A B : Type} (F : A -> B) `{Is1Functor A B F} := { preservesinitial_pfunctor : PreservesInitial F ; preservesterminal_pfunctor : PreservesTerminal F ; }. Global Existing Instances preservesinitial_pfunctor preservesterminal_pfunctor. (** Here is an alternative constructor using preservation of the zero object. This requires more structure on the categories however. *)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object

IsPointedFunctor F
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object

IsPointedFunctor F
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object

PreservesInitial F
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
PreservesTerminal F
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object

PreservesInitial F
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
inx: IsInitial x

IsInitial (F x)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
inx: IsInitial x

zero_object $<~> F x
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
inx: IsInitial x

F x $<~> zero_object
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
inx: IsInitial x

F x $<~> F zero_object
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
inx: IsInitial x

x $<~> zero_object
rapply cate_isinitial.
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object

PreservesTerminal F
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
tex: IsTerminal x

IsTerminal (F x)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
tex: IsTerminal x

F x $<~> zero_object
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
tex: IsTerminal x

F x $<~> F zero_object
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H0: Is1Cat B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedCat0: IsPointedCat A
IsPointedCat1: IsPointedCat B
HasEquivs0: HasEquivs A
HasEquivs1: HasEquivs B
p: F zero_object $<~> zero_object
x: A
tex: IsTerminal x

x $<~> zero_object
rapply cate_isterminal. Defined. (** Pointed functors preserve the zero object upto isomorphism. *)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F

F zero_object $<~> zero_object
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F

F zero_object $<~> zero_object
rapply cate_isinitial. Defined. (** Pointed functors preserve the zero morphism upto homotopy *)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

fmap F (zero_morphism a b) $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

fmap F (zero_morphism a b) $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

fmap F (mor_initial zero_object b) $o fmap F (mor_terminal a zero_object) $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

fmap F (mor_initial zero_object b) $== ?Goal
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A
?Goal $o fmap F (mor_terminal a zero_object) $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

mor_initial (F zero_object) (F b) $o fmap F (mor_terminal a zero_object) $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

fmap F (mor_terminal a zero_object) $== ?Goal
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A
mor_initial (F zero_object) (F b) $o ?Goal $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

mor_initial (F zero_object) (F b) $o mor_terminal (F a) (F zero_object) $== zero_morphism (F a) (F b)
A, B: Type
F: A -> B
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsGraph1: IsGraph B
Is2Graph1: Is2Graph B
Is01Cat1: Is01Cat B
H1: Is1Cat B
H2: IsPointedCat B
HasEquivs0: HasEquivs B
Is0Functor0: Is0Functor F
Is1Functor0: Is1Functor F
IsPointedFunctor0: IsPointedFunctor F
a, b: A

F zero_object $<~> zero_object
rapply pfunctor_zero. Defined. (** Opposite category of a pointed category is also pointed. *)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A

IsPointedCat A^op
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A

IsPointedCat A^op
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A

A^op
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsInitial ?zero_object
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsTerminal ?zero_object
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A

IsInitial (zero_object : A^op)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
H0: IsPointedCat A
IsTerminal (zero_object : A^op)
1,2: exact _. Defined.