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.
(* -*- mode: coq; mode: visual-line -*-  *)

(* Typeclass instances to allow rewriting in categories. Examples are given later in the file. *)

(* Init.Tactics contains the definition of the Coq stdlib typeclass_inferences database. It must be imported before Basics.Overture. *)

(** Warning: This imports Coq.Setoids.Setoid from the standard library. Currently the setoid rewriting machinery requires this to work, it depends on this file explicitly. This imports the whole standard library into the namespace.

All files that import WildCat/SetoidRewrite.v will also recursively import the entire Coq.Init standard library.  *)

(** Because of this, this file needs to be the *first* file Require'd in any file that uses it.  Otherwise, the typeclasses hintdb is cleared, breaking typeclass inference.  Moreover, if Foo Requires this file, then Foo must also be the first file Require'd in any file that Requires Foo, and so on. In the long term it would be good if this could be avoided.*)

From Coq Require Init.Tactics.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
From HoTT Require Import Types.Forall.
[Loading ML file tauto_plugin.cmxs (using legacy method) ... done]
[Loading ML file cc_plugin.cmxs (using legacy method) ... done]
[Loading ML file firstorder_plugin.cmxs (using legacy method) ... done]
Import CMorphisms.ProperNotations. From HoTT Require Import WildCat.Core WildCat.NatTrans WildCat.Equiv. #[export] Instance reflexive_proper_proxy {A : Type} {R : Relation A} `(Reflexive A R) (x : A) : CMorphisms.ProperProxy R x := reflexivity x. (* forall (x y : A), x $== y -> forall (a b : A), a $== b -> y $== b -> x $==a *)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A

CMorphisms.Proper (GpdHom ==> GpdHom ==> CRelationClasses.flip CRelationClasses.arrow) GpdHom
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A

CMorphisms.Proper (GpdHom ==> GpdHom ==> CRelationClasses.flip CRelationClasses.arrow) GpdHom
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $== y
a, b: A
eq_ab: a $== b
eq_yb: y $== b

x $== a
exact (transitivity eq_xy (transitivity eq_yb (symmetry _ _ eq_ab))). Defined. (* forall (x y : A), x $== y -> forall (a b : A), a $== b -> x $== a -> y $== b *)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A

CMorphisms.Proper (GpdHom ==> GpdHom ==> CRelationClasses.arrow) GpdHom
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A

CMorphisms.Proper (GpdHom ==> GpdHom ==> CRelationClasses.arrow) GpdHom
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $== y
a, b: A
eq_ab: a $== b
eq_yb: x $== a

y $== b
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $== y
a, b: A
eq_ab: a $== b
eq_yb: x $== a

y $== a
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $== y
a, b: A
eq_ab: a $== b
eq_yb: x $== a

y $== x
exact (symmetry _ _ eq_xy). Defined. (* forall a : A, x $== y -> a $== x -> a $== y *)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
a: A

CMorphisms.Proper (GpdHom ==> CRelationClasses.arrow) (GpdHom a)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
a: A

CMorphisms.Proper (GpdHom ==> CRelationClasses.arrow) (GpdHom a)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
a, x, y: A
eq_xy: x $== y
eq_ax: a $== x

a $== y
now transitivity x. Defined. (* forall a : A, x $== y -> a $== y -> a $== x *)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
a: A

CMorphisms.Proper (GpdHom ==> CRelationClasses.flip CRelationClasses.arrow) (GpdHom a)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
a: A

CMorphisms.Proper (GpdHom ==> CRelationClasses.flip CRelationClasses.arrow) (GpdHom a)
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
a, x, y: A
eq_xy: x $== y
eq_ay: a $== y

a $== x
exact (transitivity eq_ay (symmetry _ _ eq_xy)). Defined. Open Scope signatureT_scope.
A, B: Type
f: A -> B
R: Relation A
R': Relation B
H: Symmetric R
H0: CMorphisms.Proper (R ==> R') f

CMorphisms.Proper (R --> R') f
A, B: Type
f: A -> B
R: Relation A
R': Relation B
H: Symmetric R
H0: CMorphisms.Proper (R ==> R') f

CMorphisms.Proper (R --> R') f
A, B: Type
f: A -> B
R: Relation A
R': Relation B
H: Symmetric R
H0: CMorphisms.Proper (R ==> R') f
a, b: A
Rab: CRelationClasses.flip R a b

R' (f a) (f b)
A, B: Type
f: A -> B
R: Relation A
R': Relation B
H: Symmetric R
H0: CMorphisms.Proper (R ==> R') f
a, b: A
Rab: CRelationClasses.flip R a b

R a b
A, B: Type
f: A -> B
R: Relation A
R': Relation B
H: Symmetric R
H0: CMorphisms.Proper (R ==> R') f
a, b: A
Rab: CRelationClasses.flip R a b

R a b
A, B: Type
f: A -> B
R: Relation A
R': Relation B
H: Symmetric R
H0: CMorphisms.Proper (R ==> R') f
a, b: A
Rab: CRelationClasses.flip R a b

R b a
exact Rab. Defined.
A, B, C: Type
R: Relation A
R': Relation B
R'': Relation C
H: Symmetric R'
f: A -> B -> C
H1: CMorphisms.Proper (R ==> R' ==> R'') f

CMorphisms.Proper (R ==> R' --> R'') f
A, B, C: Type
R: Relation A
R': Relation B
R'': Relation C
H: Symmetric R'
f: A -> B -> C
H1: CMorphisms.Proper (R ==> R' ==> R'') f

CMorphisms.Proper (R ==> R' --> R'') f
A, B, C: Type
R: Relation A
R': Relation B
R'': Relation C
H: Symmetric R'
f: A -> B -> C
H1: CMorphisms.Proper (R ==> R' ==> R'') f
a, b: A
Rab: R a b
x, y: B
R'yx: CRelationClasses.flip R' x y

R'' (f a x) (f b y)
apply H1; [ assumption | symmetry; assumption ]. Defined. #[export] Instance IsProper_fmap {A B : Type} `{Is1Cat A} `{Is1Cat A} (F : A -> B) `{Is1Functor _ _ F} (a b : A) : CMorphisms.Proper (GpdHom ==> GpdHom) (@fmap _ _ _ _ F _ a b) := fun _ _ eq => fmap2 F eq.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
g: b $-> c

CMorphisms.Proper (GpdHom ==> GpdHom) (cat_comp g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
g: b $-> c

CMorphisms.Proper (GpdHom ==> GpdHom) (cat_comp g)
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
g: b $-> c
f1, f2: a $-> b

f1 $== f2 -> g $o f1 $== g $o f2
apply (is0functor_postcomp a b c g ). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A

CMorphisms.Proper (GpdHom ==> GpdHom ==> GpdHom) cat_comp
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A

CMorphisms.Proper (GpdHom ==> GpdHom ==> GpdHom) cat_comp
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
g1, g2: b $-> c
eq_g: g1 $== g2
f1, f2: a $-> b
eq_f: f1 $== f2

g1 $o f1 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
g1, g2: b $-> c
eq_g: g1 $== g2
f1, f2: a $-> b
eq_f: f1 $== f2

g1 $o f2 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
g1, g2: b $-> c
eq_g: g1 $== g2
f1, f2: a $-> b
eq_f: f1 $== f2

g1 $-> g2
exact eq_g. Defined.
A, B: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
R: Relation B
F: A -> B
H2: CMorphisms.Proper (GpdHom ==> R) F

CMorphisms.Proper (Hom ==> R) F
A, B: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
R: Relation B
F: A -> B
H2: CMorphisms.Proper (GpdHom ==> R) F

CMorphisms.Proper (Hom ==> R) F
intros a b eq_ab; apply H2; exact eq_ab. Defined.
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A

CMorphisms.Proper (Hom ==> Hom ==> CRelationClasses.arrow) Hom
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A

CMorphisms.Proper (Hom ==> Hom ==> CRelationClasses.arrow) Hom
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $-> y
a, b: A
eq_ab: a $-> b
f: x $-> a

y $-> b
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $-> y
a, b: A
eq_ab: a $-> b
f: x $-> a

y $-> a
A: Type
H: IsGraph A
H0: Is01Cat A
H1: Is0Gpd A
x, y: A
eq_xy: x $-> y
a, b: A
eq_ab: a $-> b
f: x $-> a

y $-> x
symmetry; exact eq_xy. Defined.
A: Type
H: IsGraph A
H0: Is01Cat A
x: A

CMorphisms.Proper (Hom ==> CRelationClasses.arrow) (Hom x)
A: Type
H: IsGraph A
H0: Is01Cat A
x: A

CMorphisms.Proper (Hom ==> CRelationClasses.arrow) (Hom x)
A: Type
H: IsGraph A
H0: Is01Cat A
x, y, z: A
g: y $-> z
f: x $-> y

x $-> z
exact (g $o f). Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b: A
f: a $-> b

SectionOf f -> Epic f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b: A
f: a $-> b

SectionOf f -> Epic f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b: A
f: a $-> b
section: SectionOf f
c: A
g, h: b $-> c
eq_gf_hf: g $o f $== h $o f

g $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b: A
f: a $-> b
right_inverse: b $-> a
is_section: f $o right_inverse $== Id b
c: A
g, h: b $-> c
eq_gf_hf: g $o f $== h $o f

g $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b: A
f: a $-> b
right_inverse: b $-> a
is_section: f $o right_inverse $== Id b
c: A
g, h: b $-> c
eq_gf_hf: g $o f $o right_inverse $-> h $o f $o right_inverse

g $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b: A
f: a $-> b
right_inverse: b $-> a
is_section: f $o right_inverse $== Id b
c: A
g, h: b $-> c
eq_gf_hf: g $-> h

g $== h
exact eq_gf_hf. Defined.
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
b, c: A
f: b $-> c

RetractionOf f -> Monic f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
b, c: A
f: b $-> c

RetractionOf f -> Monic f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
b, c: A
f: b $-> c
retraction: RetractionOf f
a: A
g, h: a $-> b
eq_fg_fh: f $o g $== f $o h

g $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
b, c: A
f: b $-> c
left_inverse: c $-> b
is_retraction: left_inverse $o f $== Id b
a: A
g, h: a $-> b
eq_fg_fh: f $o g $== f $o h

g $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
b, c: A
f: b $-> c
left_inverse: c $-> b
is_retraction: left_inverse $o f $== Id b
a: A
g, h: a $-> b
eq_fg_fh: left_inverse $o (f $o g) $-> left_inverse $o (f $o h)

g $== h
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
b, c: A
f: b $-> c
left_inverse: c $-> b
is_retraction: left_inverse $o f $== Id b
a: A
g, h: a $-> b
eq_fg_fh: g $-> h

g $== h
assumption. Defined.
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G

Faithful F -> Faithful G
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G

Faithful F -> Faithful G
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: fmap G f $== fmap G g

f $== g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: cat_precomp (G y) (tau x) (fmap G f) $-> cat_precomp (G y) (tau x) (fmap G g)

f $== g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: cat_precomp (G y) (tau x) (fmap G f) $-> cat_precomp (G y) (tau x) (fmap G g)

f $== g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: fmap G f $o tau x $-> fmap G g $o tau x

f $== g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> fmap G g $o tau x

f $== g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

f $== g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

fmap F f $== fmap F g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

RetractionOf (tau y)
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g
X: RetractionOf (tau y)
fmap F f $== fmap F g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

RetractionOf (tau y)
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

G y $-> F y
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g
?comp_left_inverse $o tau y $== Id (F y)
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

G y $-> F y
exact ((tau y)^-1$).
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g

(tau y)^-1$ $o tau y $== Id (F y)
exact (cate_issect _ ).
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g
X: RetractionOf (tau y)

fmap F f $== fmap F g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: tau y $o fmap F f $-> tau y $o fmap F g
X: Monic (tau y)

fmap F f $== fmap F g
A, B: Type
F, G: 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
H1: Is1Functor F
Is0Functor1: Is0Functor G
Is1Functor0: Is1Functor G
HasEquivs0: HasEquivs B
tau: NatEquiv F G
faithful_F: Faithful F
x, y: A
f, g: x $-> y
eq_Gf_Gg: fmap F f $== fmap F g
X: Monic (tau y)

fmap F f $== fmap F g
assumption. Defined. Section SetoidRewriteTests.

forall (A : Type) (H0 : IsGraph A) (H1 : Is01Cat A) (H : Is0Gpd A) (a b c : A), a $== b -> b $== c -> a $== c

forall (A : Type) (H0 : IsGraph A) (H1 : Is01Cat A) (H : Is0Gpd A) (a b c : A), a $== b -> b $== c -> a $== c
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

a $== c
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

b $== b
Abort.

forall (A : Type) (H0 : IsGraph A) (H1 : Is01Cat A) (H : Is0Gpd A) (a b c : A), a $== b -> b $== c -> a $== c

forall (A : Type) (H0 : IsGraph A) (H1 : Is01Cat A) (H : Is0Gpd A) (a b c : A), a $== b -> b $== c -> a $== c
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

a $== c
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

c $== a
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

b $== b
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

c $== c
A: Type
H0: IsGraph A
H1: Is01Cat A
H: Is0Gpd A
a, b, c: A
eq_ab: a $== b
eq_bc: b $== c

b $== b
Abort.

forall (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), Is1Functor F -> forall (a b : A) (f g : a $-> b), f $== g -> fmap F f $== fmap F g

forall (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), Is1Functor F -> forall (a b : A) (f g : a $-> b), f $== g -> fmap F f $== fmap F g
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
H1: Is1Functor F
a, b: A
f, g: a $-> b

f $== g -> fmap F f $== fmap F g
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
H1: Is1Functor F
a, b: A
f, g: a $-> b
eq_fg: f $== g

fmap F f $== fmap F g
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
H1: Is1Functor F
a, b: A
f, g: a $-> b
eq_fg: f $== g

fmap F g $== fmap F g
Abort.

forall (A : Type) (IsGraph0 : IsGraph A) (Is2Graph0 : Is2Graph A) (Is01Cat0 : Is01Cat A) (H : Is1Cat A) (a b c : A) (f1 f2 : a $-> b) (g : b $-> c), f1 $== f2 -> g $o f1 $== g $o f2

forall (A : Type) (IsGraph0 : IsGraph A) (Is2Graph0 : Is2Graph A) (Is01Cat0 : Is01Cat A) (H : Is1Cat A) (a b c : A) (f1 f2 : a $-> b) (g : b $-> c), f1 $== f2 -> g $o f1 $== g $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g: b $-> c

f1 $== f2 -> g $o f1 $== g $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g: b $-> c
eq: f1 $== f2

g $o f1 $== g $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g: b $-> c
eq: f1 $== f2

g $o f1 $== g $o f1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g: b $-> c
eq: f1 $== f2

g $o f2 $== g $o f2
Abort.

forall (A : Type) (IsGraph0 : IsGraph A) (Is2Graph0 : Is2Graph A) (Is01Cat0 : Is01Cat A) (H : Is1Cat A) (a b c : A) (f : a $-> b) (g1 g2 : b $-> c), g1 $== g2 -> g1 $o f $== g2 $o f

forall (A : Type) (IsGraph0 : IsGraph A) (Is2Graph0 : Is2Graph A) (Is01Cat0 : Is01Cat A) (H : Is1Cat A) (a b c : A) (f : a $-> b) (g1 g2 : b $-> c), g1 $== g2 -> g1 $o f $== g2 $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f: a $-> b
g1, g2: b $-> c

g1 $== g2 -> g1 $o f $== g2 $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f: a $-> b
g1, g2: b $-> c
eq: g1 $== g2

g1 $o f $== g2 $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f: a $-> b
g1, g2: b $-> c
eq: g1 $== g2

g1 $o f $== g1 $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f: a $-> b
g1, g2: b $-> c
eq: g1 $== g2

g2 $o f $== g2 $o f
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f: a $-> b
g1, g2: b $-> c
eq: g1 $== g2

g1 $o f $== g1 $o f
Abort.

forall (A : Type) (IsGraph0 : IsGraph A) (Is2Graph0 : Is2Graph A) (Is01Cat0 : Is01Cat A) (H : Is1Cat A) (a b c : A) (f1 f2 : a $-> b) (g1 g2 : b $-> c), g1 $== g2 -> f1 $== f2 -> g1 $o f1 $== g2 $o f2

forall (A : Type) (IsGraph0 : IsGraph A) (Is2Graph0 : Is2Graph A) (Is01Cat0 : Is01Cat A) (H : Is1Cat A) (a b c : A) (f1 f2 : a $-> b) (g1 g2 : b $-> c), g1 $== g2 -> f1 $== f2 -> g1 $o f1 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g1, g2: b $-> c

g1 $== g2 -> f1 $== f2 -> g1 $o f1 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g1, g2: b $-> c
eq_g: g1 $== g2
eq_f: f1 $== f2

g1 $o f1 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g1, g2: b $-> c
eq_g: g1 $== g2
eq_f: f1 $== f2

g2 $o f1 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g1, g2: b $-> c
eq_g: g1 $== g2
eq_f: f1 $== f2

g2 $o f1 $== g2 $o f1
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g1, g2: b $-> c
eq_g: g1 $== g2
eq_f: f1 $== f2

g2 $o f2 $== g2 $o f2
A: Type
IsGraph0: IsGraph A
Is2Graph0: Is2Graph A
Is01Cat0: Is01Cat A
H: Is1Cat A
a, b, c: A
f1, f2: a $-> b
g1, g2: b $-> c
eq_g: g1 $== g2
eq_f: f1 $== f2

g1 $o f2 $== g1 $o f2
Abort. End SetoidRewriteTests.