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^op -> A^op -> Type
unfold op; exact (funab => 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^op, a $-> a
A: Type H: IsGraph A H0: Is01Cat A
forallabc : A^op, (b $-> c) -> (a $-> b) -> a $-> c
A: Type H: IsGraph A H0: Is01Cat A
foralla : A^op, a $-> a
cbv; exact Id.
A: Type H: IsGraph A H0: Is01Cat A
forallabc : A^op, (b $-> c) -> (a $-> b) -> a $-> c
cbv; exact (funabcgf => f $o g).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
intros a b; unfold op in *; cbn; exact _.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: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is01Cat (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is0Gpd (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forall (abc : A) (g : c $-> b),
Is0Functor (funf : b $-> a => f $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) 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: forallab : A, IsGraph (a $-> b) 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: forallab : A, IsGraph (a $-> b) 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: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), f $o Id b $-> f
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), Id a $o f $-> f
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is01Cat (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b: A
Is01Cat (b $-> a)
apply is01cat_hom.
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forallab : A, Is0Gpd (b $-> a)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b: A
Is0Gpd (b $-> a)
apply is0gpd_hom.
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forall (abc : A) (g : c $-> b),
Is0Functor (funf : b $-> a => f $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: c $-> b
Is0Functor (funf : b $-> a => f $o h)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: c $-> b
foralla0b0 : b $-> a,
(a0 $-> b0) ->
(funf : b $-> a => f $o h) a0 $->
(funf : b $-> a => f $o h) b0
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: c $-> b f, g: b $-> a p: f $-> g
(funf : b $-> a => f $o h) f $->
(funf : b $-> a => f $o h) g
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: c $-> b f, g: b $-> a p: f $-> g
f $o h $-> g $o h
exact (p $@R h).
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) 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: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: b $-> a
Is0Functor (fung : c $-> b => h $o g)
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: b $-> a
foralla0b0 : c $-> b,
(a0 $-> b0) ->
(fung : c $-> b => h $o g) a0 $->
(fung : c $-> b => h $o g) b0
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: b $-> a f, g: c $-> b p: f $-> g
(fung : c $-> b => h $o g) f $->
(fung : c $-> b => h $o g) g
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A a, b, c: A h: b $-> a f, g: c $-> b p: f $-> g
h $o f $-> h $o g
exact (h $@L p).
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) 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: forallab : A, IsGraph (a $-> b) 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: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), f $o Id b $-> f
intros a b f; exact (cat_idr f).
A: Type IsGraph0: IsGraph A Is2Graph0: forallab : A, IsGraph (a $-> b) Is01Cat0: Is01Cat A H: Is1Cat A
forall (ab : A) (f : b $-> a), Id a $o f $-> f
intros a b f; exact (cat_idl f).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^op, Is01Cat (a $-> b)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forallab : A^op, Is0Gpd (a $-> b)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abc : A^op) (g : b $-> c),
Is0Functor (cat_postcomp a g)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abc : A^op) (f : a $-> b),
Is0Functor (cat_precomp c f)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A^op)
(f : a $-> b) (g : b $-> c)
(h : c $-> d), h $o g $o f = h $o (g $o f)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A^op)
(f : a $-> b) (g : b $-> c)
(h : c $-> d), h $o (g $o f) = h $o g $o f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A^op) (f : a $-> b), Id b $o f = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A^op) (f : a $-> b), f $o Id a = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A^op)
(f : a $-> b) (g : b $-> c)
(h : c $-> d), h $o g $o f = h $o (g $o f)
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A^op)
(f : a $-> b) (g : b $-> c)
(h : c $-> d), h $o (g $o f) = h $o g $o f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A^op) (f : a $-> b), Id b $o f = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A^op) (f : a $-> b), f $o Id a = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A^op)
(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^op)
(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^op) (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^op) (f : b $-> a), Id a $o f = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (abcd : A^op)
(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^op)
(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^op) (f : b $-> a), f $o Id b = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A a, b: A^op f: b $-> a
f $o Id b = f
apply cat_idr_strong.
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A
forall (ab : A^op) (f : b $-> a), Id a $o f = f
A: Type IsGraph0: IsGraph A Is2Graph0: Is2Graph A Is01Cat0: Is01Cat A H: Is1Cat_Strong A a, b: A^op f: 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^op, (a $-> b) -> F a $-> F b
A, B: Type F: A -> B H: IsGraph A H0: IsGraph B x: Is0Functor F a, b: A^op
(b $-> a) -> F b $-> F a
A, B: Type F: A -> B H: IsGraph A H0: IsGraph B x: Is0Functor F a, b: A^op
Is0Functor F
assumption.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^op) (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^op, 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^op) (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^op) (fg : b $-> a),
f $== g -> fmap F f $== fmap F g
intros a b; rapply fmap2.
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^op, 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^op) (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 a, b: A^op f, g: a $-> b
IsEquiv GpdHom_path
exact (@isequiv_Htpy_path _ _ _ _ _ H0 b a f g).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.