Library UniMath.CategoryTheory.MarkovCategories.Univalence
Require Import UniMath.Foundations.All.
Require Import UniMath.MoreFoundations.All.
Require Import UniMath.CategoryTheory.Core.Prelude.
Require Import UniMath.CategoryTheory.Limits.Terminal.
Require Import UniMath.CategoryTheory.Monoidal.Categories.
Require Import UniMath.CategoryTheory.Monoidal.Structure.Cartesian.
Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric.
Require Import UniMath.CategoryTheory.MarkovCategories.MarkovCategory.
Import MonoidalNotations.
Require Import UniMath.CategoryTheory.MarkovCategories.Determinism.
Local Open Scope cat.
Local Open Scope moncat.
Local Open Scope markov.
Definition idtodet_iso
{C : markov_category}
{x y : C}
(p : x = y)
: deterministic_iso x y.
Proof.
induction p.
apply identity_deterministic_iso.
Defined.
Definition is_markov_univalent
(C : markov_category)
: UU
:= ∏ (x y : C), isweq (idtodet_iso (x := x) (y := y)).
Proposition isaprop_is_markov_univalent
(C : markov_category)
: isaprop (is_markov_univalent C).
Proof.
do 2 (use impred ; intro).
apply isapropisweq.
Qed.
Definition all_isos_deterministic
(C : markov_category)
: UU
:= ∏ (x y : C) (f : z_iso x y), is_deterministic f.
Proposition isaprop_all_isos_deterministic
(C : markov_category)
: isaprop (all_isos_deterministic C).
Proof.
do 3 (use impred ; intro).
apply isaprop_is_deterministic.
Qed.
Definition iso_weq_det_iso_all_deterministic
{C : markov_category}
(H : all_isos_deterministic C)
(x y : C)
: z_iso x y ≃ deterministic_iso x y.
Proof.
use weq_iso.
- intro f.
refine (f ,, _).
apply H.
- intro f.
exact (pr1 f). - abstract
(intro f ;
reflexivity).
- abstract
(intro f ;
use subtypePath ; [ intro ; apply isaprop_is_deterministic | ] ;
reflexivity).
Defined.
Proposition univalence_weq_markov_univalence
{C : markov_category}
(H : all_isos_deterministic C)
: is_univalent C ≃ is_markov_univalent C.
Proof.
use weqimplimpl.
- intros HC x y.
use weqhomot.
+ refine (iso_weq_det_iso_all_deterministic H x y ∘ _)%weq.
use make_weq.
* apply idtoiso.
* apply HC.
+ intro p.
induction p.
use subtypePath.
{
intro.
apply isaprop_is_deterministic.
}
cbn.
reflexivity.
- intros HC x y.
use weqhomot.
+ refine (invweq (iso_weq_det_iso_all_deterministic H x y) ∘ _)%weq.
use make_weq.
* apply idtodet_iso.
* apply HC.
+ intro p.
induction p.
cbn.
reflexivity.
- apply isaprop_is_univalent.
- apply isaprop_is_markov_univalent.
Qed.