Library UniMath.CategoryTheory.EnrichedCats.Limits.Examples.OppositeEnrichedLimits
Require Import UniMath.Foundations.All.
Require Import UniMath.MoreFoundations.All.
Require Import UniMath.CategoryTheory.Core.Categories.
Require Import UniMath.CategoryTheory.Core.Isos.
Require Import UniMath.CategoryTheory.OppositeCategory.Core.
Require Import UniMath.CategoryTheory.EnrichedCats.Enrichment.
Require Import UniMath.CategoryTheory.EnrichedCats.Examples.OppositeEnriched.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedTerminal.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedBinaryProducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedProducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedEqualizers.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedPowers.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedInitial.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedBinaryCoproducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedCoproducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedCoequalizers.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedCopowers.
Require Import UniMath.CategoryTheory.Monoidal.Categories.
Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric.
Require Import UniMath.CategoryTheory.Monoidal.Structure.Closed.
Require Import UniMath.CategoryTheory.limits.terminal.
Require Import UniMath.CategoryTheory.limits.binproducts.
Require Import UniMath.CategoryTheory.limits.products.
Require Import UniMath.CategoryTheory.limits.equalizers.
Local Open Scope cat.
Local Open Scope moncat.
Import MonoidalNotations.
Section OppositeLimits.
Context {V : sym_monoidal_cat}
{C : category}
(E : enrichment C V).
Let E' : enrichment (C^opp) V := op_enrichment V E.
Require Import UniMath.MoreFoundations.All.
Require Import UniMath.CategoryTheory.Core.Categories.
Require Import UniMath.CategoryTheory.Core.Isos.
Require Import UniMath.CategoryTheory.OppositeCategory.Core.
Require Import UniMath.CategoryTheory.EnrichedCats.Enrichment.
Require Import UniMath.CategoryTheory.EnrichedCats.Examples.OppositeEnriched.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedTerminal.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedBinaryProducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedProducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedEqualizers.
Require Import UniMath.CategoryTheory.EnrichedCats.Limits.EnrichedPowers.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedInitial.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedBinaryCoproducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedCoproducts.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedCoequalizers.
Require Import UniMath.CategoryTheory.EnrichedCats.Colimits.EnrichedCopowers.
Require Import UniMath.CategoryTheory.Monoidal.Categories.
Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric.
Require Import UniMath.CategoryTheory.Monoidal.Structure.Closed.
Require Import UniMath.CategoryTheory.limits.terminal.
Require Import UniMath.CategoryTheory.limits.binproducts.
Require Import UniMath.CategoryTheory.limits.products.
Require Import UniMath.CategoryTheory.limits.equalizers.
Local Open Scope cat.
Local Open Scope moncat.
Import MonoidalNotations.
Section OppositeLimits.
Context {V : sym_monoidal_cat}
{C : category}
(E : enrichment C V).
Let E' : enrichment (C^opp) V := op_enrichment V E.
1. Terminal object
Definition opposite_terminal_enriched
(I : initial_enriched E)
: terminal_enriched E'.
Show proof.
(I : initial_enriched E)
: terminal_enriched E'.
Show proof.
exact I.
2. Binary products
Section OppositeBinaryProducts.
Context {x y : C}
(s : binary_coprod_enriched E x y).
Definition opposite_binary_prod_enriched_is_prod
: is_binary_prod_enriched E' x y (pr1 s).
Show proof.
Definition opposite_binary_prod_enriched
: binary_prod_enriched E' x y.
Show proof.
End OppositeBinaryProducts.
Definition opposite_enrichment_binary_prod
(H : enrichment_binary_coprod E)
: enrichment_binary_prod E'
:= λ x y, opposite_binary_prod_enriched (H x y).
Context {x y : C}
(s : binary_coprod_enriched E x y).
Definition opposite_binary_prod_enriched_is_prod
: is_binary_prod_enriched E' x y (pr1 s).
Show proof.
intro w.
use (isBinProduct_eq_arrow _ _ (pr2 s w)).
- abstract
(unfold E' ;
rewrite op_enrichment_postcomp ;
apply maponpaths ; cbn ;
apply idpath).
- abstract
(unfold E' ;
rewrite op_enrichment_postcomp ;
apply maponpaths ; cbn ;
apply idpath).
use (isBinProduct_eq_arrow _ _ (pr2 s w)).
- abstract
(unfold E' ;
rewrite op_enrichment_postcomp ;
apply maponpaths ; cbn ;
apply idpath).
- abstract
(unfold E' ;
rewrite op_enrichment_postcomp ;
apply maponpaths ; cbn ;
apply idpath).
Definition opposite_binary_prod_enriched
: binary_prod_enriched E' x y.
Show proof.
End OppositeBinaryProducts.
Definition opposite_enrichment_binary_prod
(H : enrichment_binary_coprod E)
: enrichment_binary_prod E'
:= λ x y, opposite_binary_prod_enriched (H x y).
3. Equalizers
Section OppositeEqualizers.
Context {x y : C}
{f g : x --> y}
(e : coequalizer_enriched E f g).
Definition opposite_is_equalizer_enriched
: is_equalizer_enriched E' f g (pr1 e).
Show proof.
Definition opposite_equalizer_enriched : equalizer_enriched E' f g
:= pr1 e ,, opposite_is_equalizer_enriched.
End OppositeEqualizers.
Context {x y : C}
{f g : x --> y}
(e : coequalizer_enriched E f g).
Definition opposite_is_equalizer_enriched
: is_equalizer_enriched E' f g (pr1 e).
Show proof.
intro w.
use (isEqualizer_eq _ _ _ _ _ (pr2 e w)).
- abstract
(refine (!_) ;
apply op_enrichment_postcomp).
- abstract
(refine (!_) ;
apply op_enrichment_postcomp).
- abstract
(refine (!_) ;
apply op_enrichment_postcomp).
use (isEqualizer_eq _ _ _ _ _ (pr2 e w)).
- abstract
(refine (!_) ;
apply op_enrichment_postcomp).
- abstract
(refine (!_) ;
apply op_enrichment_postcomp).
- abstract
(refine (!_) ;
apply op_enrichment_postcomp).
Definition opposite_equalizer_enriched : equalizer_enriched E' f g
:= pr1 e ,, opposite_is_equalizer_enriched.
End OppositeEqualizers.
4. Type indexed products
Section OppositeProducts.
Context {J : UU}
(ys : J → C)
(s : coprod_enriched E ys).
Definition opposite_prod_enriched_is_prod
: is_prod_enriched E' ys (pr1 s).
Show proof.
Definition opposite_prod_enriched
: prod_enriched E' ys.
Show proof.
End OppositeProducts.
End OppositeLimits.
Context {J : UU}
(ys : J → C)
(s : coprod_enriched E ys).
Definition opposite_prod_enriched_is_prod
: is_prod_enriched E' ys (pr1 s).
Show proof.
intro w.
use (isProduct_eq_arrow _ (pr2 s w)).
abstract
(intro j ;
unfold E' ;
rewrite op_enrichment_postcomp ;
apply maponpaths ; cbn ;
apply idpath).
use (isProduct_eq_arrow _ (pr2 s w)).
abstract
(intro j ;
unfold E' ;
rewrite op_enrichment_postcomp ;
apply maponpaths ; cbn ;
apply idpath).
Definition opposite_prod_enriched
: prod_enriched E' ys.
Show proof.
End OppositeProducts.
End OppositeLimits.
5. Powers
Definition opposite_power_enriched
{V : sym_mon_closed_cat}
{C : category}
(E : enrichment C V)
{v : V} {x : C}
(e : copower_cocone E v x)
(He : is_copower_enriched E v x e)
: is_power_enriched (op_enrichment V E) v x e.
Show proof.
Definition opposite_enrichment_power
{V : sym_mon_closed_cat}
{C : category}
(E : enrichment C V)
(HE : enrichment_copower E)
: enrichment_power (op_enrichment V E)
:= λ v x, pr1 (HE v x) ,, opposite_power_enriched _ _ (pr2 (HE v x)).
{V : sym_mon_closed_cat}
{C : category}
(E : enrichment C V)
{v : V} {x : C}
(e : copower_cocone E v x)
(He : is_copower_enriched E v x e)
: is_power_enriched (op_enrichment V E) v x e.
Show proof.
intros w.
use (is_z_isomorphism_path _ (He w)).
abstract
(unfold is_copower_enriched_map, is_power_enriched_map ;
use internal_funext ;
intros a h ;
rewrite tensor_split ;
rewrite !assoc' ;
rewrite internal_beta ;
refine (!_) ;
rewrite tensor_split ;
rewrite !assoc' ;
rewrite internal_beta ;
do 2 apply maponpaths ;
cbn -[sym_mon_braiding] ;
rewrite !assoc ;
rewrite sym_mon_braiding_inv ;
apply id_left).
use (is_z_isomorphism_path _ (He w)).
abstract
(unfold is_copower_enriched_map, is_power_enriched_map ;
use internal_funext ;
intros a h ;
rewrite tensor_split ;
rewrite !assoc' ;
rewrite internal_beta ;
refine (!_) ;
rewrite tensor_split ;
rewrite !assoc' ;
rewrite internal_beta ;
do 2 apply maponpaths ;
cbn -[sym_mon_braiding] ;
rewrite !assoc ;
rewrite sym_mon_braiding_inv ;
apply id_left).
Definition opposite_enrichment_power
{V : sym_mon_closed_cat}
{C : category}
(E : enrichment C V)
(HE : enrichment_copower E)
: enrichment_power (op_enrichment V E)
:= λ v x, pr1 (HE v x) ,, opposite_power_enriched _ _ (pr2 (HE v x)).