Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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.(** ** Opposite categories *)Definitionop (A : Type) := A.Notation"A ^op" := (op A).(** This stops typeclass search from trying to unfold op. *)#[global] Typeclasses Opaque op.
A: Type H: IsGraph A
IsGraph A^op
A: Type H: IsGraph A
IsGraph A^op
A: Type H: IsGraph A
A -> A -> Type
intros a b; exact (Hom b a).Defined.
A: Type H: IsGraph A H0: Is01Cat A
Is01Cat A^op
A: Type H: IsGraph A H0: Is01Cat A
Is01Cat A^op
A: Type H: IsGraph A H0: Is01Cat A
foralla : A, a $-> a
A: Type H: IsGraph A H0: Is01Cat A
forallabc : A, (c $-> b) -> (b $-> a) -> c $-> a
A: Type H: IsGraph A H0: Is01Cat A
foralla : A, a $-> a
exact Id.
A: Type H: IsGraph A H0: Is01Cat A
forallabc : A, (c $-> b) -> (b $-> a) -> c $-> a
intros a b c f g; exact (cat_comp g f).Defined.(** We don't invert 2-cells as this is op on the first level. *)
A: Type H: IsGraph A H0: Is2Graph A
Is2Graph A^op
A: Type H: IsGraph A H0: Is2Graph A
Is2Graph A^op
A: Type H: IsGraph A H0: Is2Graph A
forallab : A, IsGraph (b $-> a)
intros a b; exact (isgraph_hom b a).Defined.
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
Is1Cat A^op
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
Is1Cat A^op
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is01Cat (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is0Gpd (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abc : A) (g : c $-> b),
Is0Functor (fung0 : b $-> a => g0 $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abc : A) (f : b $-> a),
Is0Functor (fung : c $-> b => f $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o (g $o h) $-> f $o g $o h
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o g $o h $-> f $o (g $o h)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), f $o Id b $-> f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), Id a $o f $-> f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is01Cat (b $-> a)
intros a b; exact (is01cat_hom b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is0Gpd (b $-> a)
intros a b; exact (is0gpd_hom b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abc : A) (g : c $-> b),
Is0Functor (fung0 : b $-> a => g0 $o g)
intros a b c; exact (is0functor_precomp c b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abc : A) (f : b $-> a),
Is0Functor (fung : c $-> b => f $o g)
intros a b c; exact (is0functor_postcomp c b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o (g $o h) $-> f $o g $o h
intros a b c d f g h; exact (cat_assoc_opp h g f).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o g $o h $-> f $o (g $o h)
intros a b c d f g h; exact (cat_assoc h g f).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), f $o Id b $-> f
intros a b; exact cat_idr.
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), Id a $o f $-> f
intros a b; exact cat_idl.Defined.
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
Is1Cat_Strong A^op
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
Is1Cat_Strong A^op
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forallab : A, Is01Cat (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forallab : A, Is0Gpd (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abc : A) (g : c $-> b),
Is0Functor (fung0 : b $-> a => g0 $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abc : A) (f : b $-> a),
Is0Functor (fung : c $-> b => f $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o (g $o h) = f $o g $o h
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o g $o h = f $o (g $o h)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A) (f : b $-> a), f $o Id b = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A) (f : b $-> a), Id a $o f = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forallab : A, Is01Cat (b $-> a)
intros a b; exact (is01cat_hom_strong b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forallab : A, Is0Gpd (b $-> a)
intros a b; exact (is0gpd_hom_strong b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abc : A) (g : c $-> b),
Is0Functor (fung0 : b $-> a => g0 $o g)
intros a b c; exact (is0functor_precomp_strong c b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abc : A) (f : b $-> a),
Is0Functor (fung : c $-> b => f $o g)
intros a b c; exact (is0functor_postcomp_strong c b a).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o (g $o h) = f $o g $o h
intros a b c d f g h; exact (cat_assoc_opp_strong h g f).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A) (f : b $-> a)
(g : c $-> b) (h : d $-> c),
f $o g $o h = f $o (g $o h)
intros a b c d f g h; exact (cat_assoc_strong h g f).
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A) (f : b $-> a), f $o Id b = f
intros a b; exact cat_idr_strong.
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A) (f : b $-> a), Id a $o f = f
intros a b; exact cat_idl_strong.Defined.(** Opposite groupoids *)
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A
Is0Gpd A^op
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A
Is0Gpd A^op
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A
forallab : A, (b $-> a) -> a $-> b
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A a, b: A
(b $-> a) -> a $-> b
exact gpd_rev.Defined.
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A
Is0Functor (idmap : A^op -> A)
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A
Is0Functor (idmap : A^op -> A)
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A
forallab : A, (b $-> a) -> a $-> b
A: Type H: IsGraph A H0: Is01Cat A H1: Is0Gpd A a, b: A
A, B: Type F: A -> B H: IsGraph A H0: IsGraph B x: Is0Functor F
Is0Functor (F : A^op -> B^op)
A, B: Type F: A -> B H: IsGraph A H0: IsGraph B x: Is0Functor F
Is0Functor (F : A^op -> B^op)
A, B: Type F: A -> B H: IsGraph A H0: IsGraph B x: Is0Functor F
forallab : A, (b $-> a) -> F b $-> F a
intros a b; exact (fmap F).Defined.
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
Is1Functor (F : A^op -> B^op)
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
Is1Functor (F : A^op -> B^op)
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
forall (ab : A) (fg : b $-> a),
(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 Is1Functor0: Is1Functor F
foralla : A, fmap F (Id a) $-> Id (F a)
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
forall (abc : A) (f : b $-> a)
(g : c $-> b),
fmap F (f $o g) $-> fmap F f $o 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 Is1Functor0: Is1Functor F
forall (ab : A) (fg : b $-> a),
(f $-> g) -> fmap F f $-> fmap F g
intros a b f g; exact (fmap2 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
foralla : A, fmap F (Id a) $-> Id (F a)
exact (fmap_id 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
forall (abc : A) (f : b $-> a)
(g : c $-> b),
fmap F (f $o g) $-> fmap F f $o fmap F g
intros a b c f g; exact (fmap_comp F g f).Defined.(** Since [Is01Cat] structures are definitionally involutive (see test/WildCat/Opposite.v), we can use [is0functor_op] to transform in the reverse direction as well. This result makes that much easier to use in practice. *)Instanceis0functor_op'AB (F : A^op -> B^op)
`{IsGraph A, IsGraph B, Fop : !Is0Functor (F : A^op -> B^op)}
: Is0Functor (F : A -> B)
:= is0functor_op A^op B^op F.(** [Is1Cat] structures are also definitionally involutive. *)Instanceis1functor_op'AB (F : A^op -> B^op)
`{Is1Cat A, Is1Cat B, !Is0Functor (F : A^op -> B^op), Fop2 : !Is1Functor (F : A^op -> B^op)}
: Is1Functor (F : A -> B)
:= is1functor_op A^op B^op F.
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A H0: HasMorExt A
HasMorExt A^op
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A H0: HasMorExt A
HasMorExt A^op
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat A H0: HasMorExt A
HasMorExt A
intros a b; exact (isequiv_Htpy_path b a).Defined.Instanceisinitial_op_isterminal {A : Type} `{Is1Cat A} (x : A)
{t : IsTerminal x} : IsInitial (A := A^op) x
:= t.Instanceisterminal_op_isinitial {A : Type} `{Is1Cat A} (x : A)
{i : IsInitial x} : IsTerminal (A := A^op) x
:= i.