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]
Import algebra_notations ne_list.notations.(** The following section defines product algebra [ProdAlgebra]. Section [bin_prod_algebra] specialises the definition to binary product algebra. *)Sectionprod_algebra.Context `{Funext} {σ : Signature} (I : Type) (A : I → Algebra σ).Definitioncarriers_prod_algebra : Carriers σ
:= λ (s : Sort σ), ∀ (i:I), A i s.Fixpointop_prod_algebra (w : SymbolType σ)
: (∀i, Operation (A i) w) →
Operation carriers_prod_algebra w :=
match w return (∀i, Operation (A i) w) →
Operation carriers_prod_algebra w
with
| [:_:] => idmap
| _ ::: g => λfp, op_prod_algebra g (λi, f i (p i))
end.Definitionops_prod_algebra (u : Symbol σ)
: Operation carriers_prod_algebra (σ u)
:= op_prod_algebra (σ u) (λ (i:I), u.#(A i)).DefinitionProdAlgebra : Algebra σ
:= BuildAlgebra carriers_prod_algebra ops_prod_algebra.
H: Funext σ: Signature I: Type A: I -> Algebra σ n: trunc_index H0: foralli : I, IsTruncAlgebra n (A i)
IsTruncAlgebra n ProdAlgebra
H: Funext σ: Signature I: Type A: I -> Algebra σ n: trunc_index H0: foralli : I, IsTruncAlgebra n (A i)
IsTruncAlgebra n ProdAlgebra
H: Funext σ: Signature I: Type A: I -> Algebra σ n: trunc_index H0: foralli : I, IsTruncAlgebra n (A i) s: Sort σ
IsTrunc n (ProdAlgebra s)
exact _.Qed.Endprod_algebra.(** The next section defines the product projection homomorphisms. *)Sectionhom_proj_prod_algebra.Context `{Funext} {σ : Signature} (I : Type) (A : I → Algebra σ).Definitiondef_proj_prod_algebra (i:I) (s : Sort σ) (c : ProdAlgebra I A s)
: A i s
:= c i.
H: Funext σ: Signature I: Type A: I -> Algebra σ w: SymbolType σ i: I v: foralli : I, Operation (A i) w α: Operation (A i) w P: v i = α
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A w v) α
H: Funext σ: Signature I: Type A: I -> Algebra σ w: SymbolType σ i: I v: foralli : I, Operation (A i) w α: Operation (A i) w P: v i = α
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A w v) α
H: Funext σ: Signature I: Type A: I -> Algebra σ t: Sort σ i: I v: foralli : I, Operation (A i) [:t:] α: Operation (A i) [:t:] P: v i = α
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A [:t:] v) α
H: Funext σ: Signature I: Type A: I -> Algebra σ t: Sort σ w: ne_list (Sort σ) i: I v: foralli : I, Operation (A i) (t ::: w) α: Operation (A i) (t ::: w) P: v i = α IHw: forall (v : foralli : I, Operation (A i) w) (α : Operation (A i) w),
v i = α -> OpPreserving (def_proj_prod_algebra i) (op_prod_algebra I A w v) α
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A (t ::: w) v) α
H: Funext σ: Signature I: Type A: I -> Algebra σ t: Sort σ i: I v: foralli : I, Operation (A i) [:t:] α: Operation (A i) [:t:] P: v i = α
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A [:t:] v) α
exact P.
H: Funext σ: Signature I: Type A: I -> Algebra σ t: Sort σ w: ne_list (Sort σ) i: I v: foralli : I, Operation (A i) (t ::: w) α: Operation (A i) (t ::: w) P: v i = α IHw: forall (v : foralli : I, Operation (A i) w) (α : Operation (A i) w),
v i = α -> OpPreserving (def_proj_prod_algebra i) (op_prod_algebra I A w v) α
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A (t ::: w) v) α
H: Funext σ: Signature I: Type A: I -> Algebra σ t: Sort σ w: ne_list (Sort σ) i: I v: foralli : I, Operation (A i) (t ::: w) α: Operation (A i) (t ::: w) P: v i = α IHw: forall (v : foralli : I, Operation (A i) w) (α : Operation (A i) w),
v i = α -> OpPreserving (def_proj_prod_algebra i) (op_prod_algebra I A w v) α p: ProdAlgebra I A t
OpPreserving (def_proj_prod_algebra i)
(op_prod_algebra I A (t ::: w) v p)
(α (def_proj_prod_algebra i t p))
H: Funext σ: Signature I: Type A: I -> Algebra σ t: Sort σ w: ne_list (Sort σ) i: I v: foralli : I, Operation (A i) (t ::: w) α: Operation (A i) (t ::: w) P: v i = α IHw: forall (v : foralli : I, Operation (A i) w) (α : Operation (A i) w),
v i = α -> OpPreserving (def_proj_prod_algebra i) (op_prod_algebra I A w v) α p: ProdAlgebra I A t
v i (p i) = α (p i)
f_ap.Defined.
H: Funext σ: Signature I: Type A: I -> Algebra σ i: I
IsHomomorphism (def_proj_prod_algebra i)
H: Funext σ: Signature I: Type A: I -> Algebra σ i: I
IsHomomorphism (def_proj_prod_algebra i)
H: Funext σ: Signature I: Type A: I -> Algebra σ i: I u: Symbol σ
OpPreserving (def_proj_prod_algebra i)
u.#(ProdAlgebra I A) u.#(A i)
byapply oppreserving_proj_prod_algebra.Defined.Definitionhom_proj_prod_algebra (i : I)
: Homomorphism (ProdAlgebra I A) (A i)
:= BuildHomomorphism (def_proj_prod_algebra i).Endhom_proj_prod_algebra.(** The product algebra universal mapping property [ump_prod_algebra]. *)Sectionump_prod_algebra.Context
`{Funext}
{σ : Signature}
(I : Type)
(A : I → Algebra σ)
(C : Algebra σ).Definitionhom_prod_algebra_mapout
(f : Homomorphism C (ProdAlgebra I A)) (i:I)
: Homomorphism C (A i)
:= hom_compose (hom_proj_prod_algebra I A i) f.Definitiondef_prod_algebra_mapin (f : ∀ (i:I) s, C s → A i s)
: ∀ (s : Sort σ) , C s → ProdAlgebra I A s
:= λ (s : Sort σ) (x : C s) (i : I), f i s x.
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ w: SymbolType σ f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) w β: Operation C w P: foralli : I, OpPreserving (f i) β (α i)
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ w: SymbolType σ f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) w β: Operation C w P: foralli : I, OpPreserving (f i) β (α i)
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) [:t:] β: Operation C [:t:] P: foralli : I, OpPreserving (f i) β (α i)
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A [:t:] (λi : I, α i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ w: ne_list (Sort σ) f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) (t ::: w) β: Operation C (t ::: w) P: foralli : I, OpPreserving (f i) β (α i) IHw: forall (α : foralli : I, Operation (A i) w) (β : Operation C w),
(foralli : I, OpPreserving (f i) β (α i)) ->
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i))
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A (t ::: w) (λi : I, α i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) [:t:] β: Operation C [:t:] P: foralli : I, OpPreserving (f i) β (α i)
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A [:t:] (λi : I, α i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) [:t:] β: Operation C [:t:] P: foralli : I, OpPreserving (f i) β (α i) i: I
def_prod_algebra_mapin f t β i =
op_prod_algebra I A [:t:] (λi : I, α i) i
apply P.
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ w: ne_list (Sort σ) f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) (t ::: w) β: Operation C (t ::: w) P: foralli : I, OpPreserving (f i) β (α i) IHw: forall (α : foralli : I, Operation (A i) w) (β : Operation C w),
(foralli : I, OpPreserving (f i) β (α i)) ->
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i))
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A (t ::: w) (λi : I, α i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ w: ne_list (Sort σ) f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) (t ::: w) β: Operation C (t ::: w) P: foralli : I, OpPreserving (f i) β (α i) IHw: forall (α : foralli : I, Operation (A i) w) (β : Operation C w),
(foralli : I, OpPreserving (f i) β (α i)) ->
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i)) x: C t
OpPreserving (def_prod_algebra_mapin f) (β x)
(op_prod_algebra I A (t ::: w) (λi : I, α i)
(def_prod_algebra_mapin f t x))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ w: ne_list (Sort σ) f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) (t ::: w) β: Operation C (t ::: w) P: foralli : I, OpPreserving (f i) β (α i) IHw: forall (α : foralli : I, Operation (A i) w) (β : Operation C w),
(foralli : I, OpPreserving (f i) β (α i)) ->
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i)) x: C t
foralli : I,
OpPreserving (f i) (β x)
(α i (def_prod_algebra_mapin f t x i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ t: Sort σ w: ne_list (Sort σ) f: forall (i : I) (s : Sort σ), C s -> A i s α: foralli : I, Operation (A i) (t ::: w) β: Operation C (t ::: w) P: foralli : I, OpPreserving (f i) β (α i) IHw: forall (α : foralli : I, Operation (A i) w) (β : Operation C w),
(foralli : I, OpPreserving (f i) β (α i)) ->
OpPreserving (def_prod_algebra_mapin f) β
(op_prod_algebra I A w (λi : I, α i)) x: C t i: I
OpPreserving (f i) (β x)
(α i (def_prod_algebra_mapin f t x i))
apply P.Defined.
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ f: foralli : I, Homomorphism C (A i)
IsHomomorphism (def_prod_algebra_mapin (λi : I, f i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ f: foralli : I, Homomorphism C (A i)
IsHomomorphism (def_prod_algebra_mapin (λi : I, f i))
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ f: foralli : I, Homomorphism C (A i) u: Symbol σ
OpPreserving (def_prod_algebra_mapin (λi : I, f i))
u.#C u.#(ProdAlgebra I A)
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ f: foralli : I, Homomorphism C (A i) u: Symbol σ
foralli : I, OpPreserving (f i) u.#C u.#(A i)
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ f: foralli : I, Homomorphism C (A i) u: Symbol σ i: I
OpPreserving (f i) u.#C u.#(A i)
apply f.Defined.Definitionhom_prod_algebra_mapin (f : ∀i, Homomorphism C (A i))
: Homomorphism C (ProdAlgebra I A)
:= BuildHomomorphism (def_prod_algebra_mapin f).(** Given a family of homomorphisms [h : ∀ (i:I), Homomorphism C (A i)] there is a unique homomorphism [f : Homomorphism C (ProdAlgebra I A)] such that [h i = hom_compose (pr i) f], where<< pr i = hom_proj_prod_algebra I A i>> is the ith projection homomorphism. *)
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i)
(foralli : I, Homomorphism C (A i)) <~>
Homomorphism C (ProdAlgebra I A)
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i)
(foralli : I, Homomorphism C (A i)) <~>
Homomorphism C (ProdAlgebra I A)
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i)
(λx : Homomorphism C (ProdAlgebra I A),
hom_prod_algebra_mapin (hom_prod_algebra_mapout x)) ==
idmap
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i)
(λx : foralli : I, Homomorphism C (A i),
hom_prod_algebra_mapout (hom_prod_algebra_mapin x)) ==
idmap
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i)
(λx : Homomorphism C (ProdAlgebra I A),
hom_prod_algebra_mapin (hom_prod_algebra_mapout x)) ==
idmap
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i) f: Homomorphism C (ProdAlgebra I A)
hom_prod_algebra_mapin (hom_prod_algebra_mapout f) = f
byapply path_hset_homomorphism.
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i)
(λx : foralli : I, Homomorphism C (A i),
hom_prod_algebra_mapout (hom_prod_algebra_mapin x)) ==
idmap
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i) f: foralli : I, Homomorphism C (A i)
hom_prod_algebra_mapout (hom_prod_algebra_mapin f) = f
H: Funext σ: Signature I: Type A: I -> Algebra σ C: Algebra σ H0: foralli : I, IsHSetAlgebra (A i) f: foralli : I, Homomorphism C (A i) i: I
hom_prod_algebra_mapout (hom_prod_algebra_mapin f) i =
f i
byapply path_hset_homomorphism.Defined.Endump_prod_algebra.(** Binary product algebra. *)Sectionbin_prod_algebra.Context `{Funext} {σ : Signature} (A B : Algebra σ).Definitionbin_prod_algebras (b:Bool) : Algebra σ
:= if b then B else A.
H: Funext σ: Signature A, B: Algebra σ n: trunc_index IsTruncAlgebra0: IsTruncAlgebra n A IsTruncAlgebra1: IsTruncAlgebra n B
forallb : Bool,
IsTruncAlgebra n (bin_prod_algebras b)
H: Funext σ: Signature A, B: Algebra σ n: trunc_index IsTruncAlgebra0: IsTruncAlgebra n A IsTruncAlgebra1: IsTruncAlgebra n B
forallb : Bool,
IsTruncAlgebra n (bin_prod_algebras b)
intros []; exact _.Qed.DefinitionBinProdAlgebra : Algebra σ :=
ProdAlgebra Bool bin_prod_algebras.Definitionfst_prod_algebra : Homomorphism BinProdAlgebra A
:= hom_proj_prod_algebra Bool bin_prod_algebras false.Definitionsnd_prod_algebra : Homomorphism BinProdAlgebra B
:= hom_proj_prod_algebra Bool bin_prod_algebras true.Endbin_prod_algebra.Moduleprod_algebra_notations.GlobalNotation"A × B" := (BinProdAlgebra A B) : Algebra_scope.Endprod_algebra_notations.Import prod_algebra_notations.(** Specialization of the product algebra universal mapping property to binary product. *)Sectionump_bin_prod_algebra.Context
`{Funext}
{σ : Signature}
(A B C : Algebra σ)
`{!IsHSetAlgebra A} `{!IsHSetAlgebra B}.
H: Funext σ: Signature A, B, C: Algebra σ IsHSetAlgebra0: IsHSetAlgebra A IsHSetAlgebra1: IsHSetAlgebra B
Homomorphism C A * Homomorphism C B <~>
Homomorphism C (A × B)
H: Funext σ: Signature A, B, C: Algebra σ IsHSetAlgebra0: IsHSetAlgebra A IsHSetAlgebra1: IsHSetAlgebra B
Homomorphism C A * Homomorphism C B <~>
Homomorphism C (A × B)
H: Funext σ: Signature A, B, C: Algebra σ IsHSetAlgebra0: IsHSetAlgebra A IsHSetAlgebra1: IsHSetAlgebra B k:= λb : Bool,
Homomorphism C (bin_prod_algebras A B b): Bool -> Type
Homomorphism C A * Homomorphism C B <~>
Homomorphism C (A × B)
exact (equiv_compose
(ump_prod_algebra Bool (bin_prod_algebras A B) C)
(equiv_bool_forall_prod k)^-1).Defined.Endump_bin_prod_algebra.