Library Modules.Signatures.PreservesEpi
Epi-signatures
- see sig_preservesNatEpiMonad, and its pointwise variant sig_preservesNatEpiMonad_pw
- algebraic signatures are such ones algSig_NatEpi
- the tautological signature is such a signature tautological_epiSig
- derivation preserves this property deriv_epiSig
- binary products preserve this property binProd_epiSig
Require Import UniMath.Foundations.PartD.
Require Import UniMath.Foundations.Propositions.
Require Import UniMath.Foundations.Sets.
Require Import UniMath.CategoryTheory.Core.Prelude.
Require Import UniMath.CategoryTheory.FunctorCategory.
Require Import UniMath.CategoryTheory.categories.HSET.All.
Require Import UniMath.CategoryTheory.limits.bincoproducts.
Require Import UniMath.CategoryTheory.limits.terminal.
Require Import UniMath.CategoryTheory.limits.binproducts.
Require Import UniMath.CategoryTheory.Epis.
Require Import UniMath.CategoryTheory.EpiFacts.
Require Import UniMath.CategoryTheory.Monads.Monads.
Require Import UniMath.CategoryTheory.Monads.LModules.
Require Import UniMath.CategoryTheory.DisplayedCats.Auxiliary.
Require Import UniMath.CategoryTheory.DisplayedCats.Core.
Require Import UniMath.CategoryTheory.DisplayedCats.Constructions.
Require Import UniMath.CategoryTheory.DisplayedCats.Fibrations.
Require Import Modules.Prelims.lib.
Require Import Modules.Prelims.EpiComplements.
Require Import Modules.Signatures.Signature.
Require Import UniMath.SubstitutionSystems.Signatures.
Require Import UniMath.SubstitutionSystems.BindingSigToMonad.
Require Import Modules.Signatures.SigWithStrengthToSignature.
Require Import Modules.Signatures.BindingSig.
Require Import Modules.Signatures.SignatureDerivation.
Require Import Modules.Signatures.SignatureBinproducts.
Require Import UniMath.Foundations.Propositions.
Require Import UniMath.Foundations.Sets.
Require Import UniMath.CategoryTheory.Core.Prelude.
Require Import UniMath.CategoryTheory.FunctorCategory.
Require Import UniMath.CategoryTheory.categories.HSET.All.
Require Import UniMath.CategoryTheory.limits.bincoproducts.
Require Import UniMath.CategoryTheory.limits.terminal.
Require Import UniMath.CategoryTheory.limits.binproducts.
Require Import UniMath.CategoryTheory.Epis.
Require Import UniMath.CategoryTheory.EpiFacts.
Require Import UniMath.CategoryTheory.Monads.Monads.
Require Import UniMath.CategoryTheory.Monads.LModules.
Require Import UniMath.CategoryTheory.DisplayedCats.Auxiliary.
Require Import UniMath.CategoryTheory.DisplayedCats.Core.
Require Import UniMath.CategoryTheory.DisplayedCats.Constructions.
Require Import UniMath.CategoryTheory.DisplayedCats.Fibrations.
Require Import Modules.Prelims.lib.
Require Import Modules.Prelims.EpiComplements.
Require Import Modules.Signatures.Signature.
Require Import UniMath.SubstitutionSystems.Signatures.
Require Import UniMath.SubstitutionSystems.BindingSigToMonad.
Require Import Modules.Signatures.SigWithStrengthToSignature.
Require Import Modules.Signatures.BindingSig.
Require Import Modules.Signatures.SignatureDerivation.
Require Import Modules.Signatures.SignatureBinproducts.
An epi-signature preserves epimorphicity of natural
transformations. Note that this is not implied by the axiom of choice
because the retract may not be a monad morphism.
(see algSig_NatEpi in PresentableSignature for the example of algebraic signatures
Definition sig_preservesNatEpiMonad {C : category} (c : signature C)
: UU
:= ∏ (M N : Monad C) (f : Monad_Mor M N),
: UU
:= ∏ (M N : Monad C) (f : Monad_Mor M N),
pointwise epis and epi as natural transformation are equivalent in Set
isEpi (C := functor_category _ _) ( f : nat_trans _ _) -> isEpi (C:= functor_category _ _)
(pr1 (#c f)%ar).
these are equivalent in Set
Definition sig_preservesNatEpiMonad_pw {C : category} (c : signature C)
: UU
:= ∏ (M N : Monad C) (f : Monad_Mor M N),
: UU
:= ∏ (M N : Monad C) (f : Monad_Mor M N),
pointwise epis and epi as natural transformation are equivalent in Set
Actually, this is a logical equivalence
Lemma sig_preservesNatEpiMonad_reduce_pw_SET (S : signature SET) :
sig_preservesNatEpiMonad_pw S -> sig_preservesNatEpiMonad S.
Proof.
intros h M N f epif.
apply is_nat_trans_epi_from_pointwise_epis.
intro X.
apply h.
apply epi_nt_SET_pw.
exact epif.
Qed.
sig_preservesNatEpiMonad_pw S -> sig_preservesNatEpiMonad S.
Proof.
intros h M N f epif.
apply is_nat_trans_epi_from_pointwise_epis.
intro X.
apply h.
apply epi_nt_SET_pw.
exact epif.
Qed.
Proof that an epiSig preserves natural epimorphicity
Lemma epiSig_NatEpi {C : category} (S : Signature C (homset_property C) C (homset_property C))
(epiS : preserves_Epi (S : functor _ _)) : sig_preservesNatEpiMonad (sigWithStrength_to_sig S).
Proof.
intros M N f.
intro epif.
assert (epip := (epiS _ _ (pr1 f) epif )).
revert epip.
apply transportf.
cbn.
apply pathsinv0.
apply (id_right (C := [C,C]) (#S (pr1 f : nat_trans _ _))).
Qed.
(epiS : preserves_Epi (S : functor _ _)) : sig_preservesNatEpiMonad (sigWithStrength_to_sig S).
Proof.
intros M N f.
intro epif.
assert (epip := (epiS _ _ (pr1 f) epif )).
revert epip.
apply transportf.
cbn.
apply pathsinv0.
apply (id_right (C := [C,C]) (#S (pr1 f : nat_trans _ _))).
Qed.
An algebraic signature preserves natural epimorphicity
Corollary algSig_NatEpi (S : BindingSig)
: sig_preservesNatEpiMonad
(sigWithStrength_to_sig (C := SET)
(BindingSigToSignature (homset_property SET)
BinProductsHSET
BinCoproductsHSET TerminalHSET
S
(CoproductsHSET (BindingSigIndexhSet S) (setproperty _)))
).
Proof.
apply epiSig_NatEpi.
apply BindingSigAreEpiSig.
Qed.
: sig_preservesNatEpiMonad
(sigWithStrength_to_sig (C := SET)
(BindingSigToSignature (homset_property SET)
BinProductsHSET
BinCoproductsHSET TerminalHSET
S
(CoproductsHSET (BindingSigIndexhSet S) (setproperty _)))
).
Proof.
apply epiSig_NatEpi.
apply BindingSigAreEpiSig.
Qed.
The tautological arity preserves epi
Definition tautological_epiSig {C : category} : sig_preservesNatEpiMonad (tautological_signature (C := C)) :=
fun R S f h => h.
fun R S f h => h.
Derivation preserves epi-sig
Lemma deriv_epiSig {C : category} bc T (Sig : signature C) (h : sig_preservesNatEpiMonad_pw Sig)
: (sig_preservesNatEpiMonad_pw (signature_deriv bc T Sig )).
Proof.
intros R S f epif.
intro o.
cbn.
repeat rewrite id_right.
apply h.
exact epif.
Qed.
Lemma binProd_epiSig {C : category} bp
: (sig_preservesNatEpiMonad_pw (signature_deriv bc T Sig )).
Proof.
intros R S f epif.
intro o.
cbn.
repeat rewrite id_right.
apply h.
exact epif.
Qed.
Lemma binProd_epiSig {C : category} bp
products of epis are epis
This is true of regular epis in a regular category such as Set.
(e.g. in a topos, pullbacks of epis are epis)
(productEpis : products_preserves_Epis (C := C) bp)
(S1 S2 : signature C)
(h1 : sig_preservesNatEpiMonad_pw S1)
(h2 : sig_preservesNatEpiMonad_pw S2)
: sig_preservesNatEpiMonad_pw (BinProductObject _ (signature_BinProducts bp S1 S2)).
Proof.
intros R S f epif.
intro o.
cbn.
rewrite id_right.
apply productEpis;[apply h1|apply h2]; exact epif.
Defined.
Definition binProd_epiSigSET
(S1 S2 : signature SET)
(h1 : sig_preservesNatEpiMonad_pw S1)
(h2 : sig_preservesNatEpiMonad_pw S2)
: sig_preservesNatEpiMonad_pw (BinProductObject _ (signature_BinProducts (C := SET) BinProductsHSET S1 S2))
:=
binProd_epiSig (C := SET) BinProductsHSET (@productEpisSET) S1 S2 h1 h2.
(S1 S2 : signature C)
(h1 : sig_preservesNatEpiMonad_pw S1)
(h2 : sig_preservesNatEpiMonad_pw S2)
: sig_preservesNatEpiMonad_pw (BinProductObject _ (signature_BinProducts bp S1 S2)).
Proof.
intros R S f epif.
intro o.
cbn.
rewrite id_right.
apply productEpis;[apply h1|apply h2]; exact epif.
Defined.
Definition binProd_epiSigSET
(S1 S2 : signature SET)
(h1 : sig_preservesNatEpiMonad_pw S1)
(h2 : sig_preservesNatEpiMonad_pw S2)
: sig_preservesNatEpiMonad_pw (BinProductObject _ (signature_BinProducts (C := SET) BinProductsHSET S1 S2))
:=
binProd_epiSig (C := SET) BinProductsHSET (@productEpisSET) S1 S2 h1 h2.