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 .
(** This file defines [SetAlgebra], a specialized [Algebra] where
the carriers are always sets. *)
Require Export HoTT.Classes.interfaces.ua_algebra.[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done ]
Record SetAlgebra {σ : Signature} : Type := BuildSetAlgebra
{ algebra_setalgebra : Algebra σ
; is_hset_algebra_setalgebra :: IsHSetAlgebra algebra_setalgebra }.
Arguments SetAlgebra : clear implicits .
Global Coercion algebra_setalgebra : SetAlgebra >-> Algebra.
(** To find a path [A = B] between set algebras [A B : SetAlgebra σ],
it is enough to find a path between the defining algebras,
[algebra_setalgebra A = algebra_setalgebra B]. *)
Lemma path_setalgebra `{Funext} {σ} (A B : SetAlgebra σ)
(p : algebra_setalgebra A = algebra_setalgebra B)
: A = B.H : Funext σ : Signature A, B : SetAlgebra σ p : A = B
A = B
Proof .H : Funext σ : Signature A, B : SetAlgebra σ p : A = B
A = B
destruct A as [A AH], B as [B BH].H : Funext σ : Signature A : Algebra σ AH : IsHSetAlgebra A B : Algebra σ BH : IsHSetAlgebra B p : {|
algebra_setalgebra := A;
is_hset_algebra_setalgebra := AH
|} =
{|
algebra_setalgebra := B;
is_hset_algebra_setalgebra := BH
|}
{|
algebra_setalgebra := A;
is_hset_algebra_setalgebra := AH
|} =
{|
algebra_setalgebra := B;
is_hset_algebra_setalgebra := BH
|}
cbn in *.H : Funext σ : Signature A : Algebra σ AH : IsHSetAlgebra A B : Algebra σ BH : IsHSetAlgebra B p : A = B
{|
algebra_setalgebra := A;
is_hset_algebra_setalgebra := AH
|} =
{|
algebra_setalgebra := B;
is_hset_algebra_setalgebra := BH
|}
transparent assert (a : (p#AH = BH)) by apply path_ishprop. H : Funext σ : Signature A : Algebra σ AH : IsHSetAlgebra A B : Algebra σ BH : IsHSetAlgebra B p : A = B H0 := path_ishprop (transport IsHSetAlgebra p AH) BH : transport IsHSetAlgebra p AH = BH
{|
algebra_setalgebra := A;
is_hset_algebra_setalgebra := AH
|} =
{|
algebra_setalgebra := B;
is_hset_algebra_setalgebra := BH
|}
by path_induction.
Defined .
(** The id path is mapped to the id path by [path_setalgebra]. *)
Lemma path_setalgebra_1 `{Funext} {σ} (A : SetAlgebra σ)
: path_setalgebra A A idpath = idpath.H : Funext σ : Signature A : SetAlgebra σ
path_setalgebra A A 1 = 1
Proof .H : Funext σ : Signature A : SetAlgebra σ
path_setalgebra A A 1 = 1
transparent assert (p :
(∀ I : IsHSetAlgebra A, path_ishprop I I = idpath)). H : Funext σ : Signature A : SetAlgebra σ
forall I : IsHSetAlgebra A, path_ishprop I I = 1
- H : Funext σ : Signature A : SetAlgebra σ
forall I : IsHSetAlgebra A, path_ishprop I I = 1
intros .H : Funext σ : Signature A : SetAlgebra σ I : IsHSetAlgebra A
path_ishprop I I = 1
apply path_ishprop.
- H : Funext σ : Signature A : SetAlgebra σ p := λ I : IsHSetAlgebra A,
path_ishprop (path_ishprop I I) 1 : forall I : IsHSetAlgebra A, path_ishprop I I = 1
path_setalgebra A A 1 = 1
unfold path_setalgebra.H : Funext σ : Signature A : SetAlgebra σ p := λ I : IsHSetAlgebra A,
path_ishprop (path_ishprop I I) 1 : forall I : IsHSetAlgebra A, path_ishprop I I = 1
paths_rect (IsHSetAlgebra A)
(transport IsHSetAlgebra 1
(is_hset_algebra_setalgebra A))
(λ (BH : IsHSetAlgebra A)
(_ : transport IsHSetAlgebra 1
(is_hset_algebra_setalgebra A) = BH),
{|
algebra_setalgebra := A;
is_hset_algebra_setalgebra :=
is_hset_algebra_setalgebra A
|} =
{|
algebra_setalgebra := A;
is_hset_algebra_setalgebra := BH
|})
(paths_rect (Algebra σ) A
(λ (B : Algebra σ) (p : A = B),
{|
algebra_setalgebra := A;
is_hset_algebra_setalgebra :=
is_hset_algebra_setalgebra A
|} =
{|
algebra_setalgebra := B;
is_hset_algebra_setalgebra :=
transport IsHSetAlgebra p
(is_hset_algebra_setalgebra A)
|}) 1 A 1 ) (is_hset_algebra_setalgebra A)
(path_ishprop
(transport IsHSetAlgebra 1
(is_hset_algebra_setalgebra A))
(is_hset_algebra_setalgebra A)) = 1
by rewrite p.
Qed .
(** The function [path_setalgebra A B] is an equivalence with inverse
[ap algebra_setalgebra]. *)
Instance isequiv_path_setalgebra `{Funext} {σ : Signature}
(A B : SetAlgebra σ)
: IsEquiv (path_setalgebra A B).H : Funext σ : Signature A, B : SetAlgebra σ
IsEquiv (path_setalgebra A B)
Proof .H : Funext σ : Signature A, B : SetAlgebra σ
IsEquiv (path_setalgebra A B)
refine (isequiv_adjointify
(path_setalgebra A B) (ap algebra_setalgebra) _ _).H : Funext σ : Signature A, B : SetAlgebra σ
(λ x : A = B,
path_setalgebra A B (ap algebra_setalgebra x)) ==
idmap
- H : Funext σ : Signature A, B : SetAlgebra σ
(λ x : A = B,
path_setalgebra A B (ap algebra_setalgebra x)) ==
idmap
abstract (intro p; induction p; by rewrite path_setalgebra_1).
- H : Funext σ : Signature A, B : SetAlgebra σ
(λ x : A = B,
ap algebra_setalgebra (path_setalgebra A B x)) ==
idmap
abstract (
intro e; destruct A as [A AH], B as [B BH];
cbn in e; destruct e;
unfold path_setalgebra; by destruct path_ishprop).
Defined .