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.
Require Import Basics.Notations.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import
HSet
Colimits.Quotient
Spaces.List.Core
Classes.interfaces.canonical_names
Classes.theory.ua_homomorphism.LocalOpen Scope list_scope.Import algebra_notations ne_list.notations.Sectionquotient_algebra.Context
`{Funext} {σ : Signature} (A : Algebra σ)
(Φ : ∀s, Relation (A s)) `{!IsCongruence A Φ}.(** The quotient algebra carriers is the family of set-quotients induced by [Φ]. *)Definitioncarriers_quotient_algebra : Carriers σ
:= λs, Quotient (Φ s).(** Specialization of [quotient_ind_prop]. Suppose [P : FamilyProd carriers_quotient_algebra w → Type] and [∀ a, IsHProp (P a)]. To show that [P a] holds for all [a : FamilyProd carriers_quotient_algebra w], it is sufficient to show that [P (class_of _ x1, ..., class_of _ xn, tt)] holds for all [(x1, ..., xn, tt) : FamilyProd A w]. *)Fixpointquotient_ind_prop_family_prod {w : list (Sort σ)}
: ∀ (P : FamilyProd carriers_quotient_algebra w → Type)
`{!∀a, IsHProp (P a)}
(dclass : ∀x, P (map_family_prod (λs, class_of (Φ s)) x))
(a : FamilyProd carriers_quotient_algebra w), P a
:= match w with
| nil => λP_dclass'tt, dclass tt
| s :: w' => λP_dclassa,
Quotient_ind_hprop (Φ s) (λa, ∀b, P (a,b))
(λa, quotient_ind_prop_family_prod
(λc, P (class_of (Φ s) a, c)) (λc, dclass (a, c)))
(fst a) (snd a)
end.(** Let [f : Operation A w], [g : Operation carriers_quotient_algebra w]. If [g] is the quotient algebra operation induced by [f], then we want [ComputeOpQuotient f g] to hold, since then<< β (class_of _ a1, class_of _ a2, ..., class_of _ an) = class_of _ (α (a1, a2, ..., an)),>> where [α] is the uncurried [f] operation and [β] is the uncurried [g] operation. *)DefinitionComputeOpQuotient {w : SymbolType σ}
(f : Operation A w) (g : Operation carriers_quotient_algebra w)
:= ∀ (a : FamilyProd A (dom_symboltype w)),
ap_operation g (map_family_prod (λs, class_of (Φ s)) a)
= class_of (Φ (cod_symboltype w)) (ap_operation f a).Local NotationQuotOp w :=
(∀ (f : Operation A w),
OpCompatible A Φ f →
∃g : Operation carriers_quotient_algebra w,
ComputeOpQuotient f g) (only parsing).Local Notationop_qalg_cons q f P x :=
(q _ (f x) (op_compatible_cons Φ _ _ f x P)).1 (only parsing).
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y
(q w (f x) (op_compatible_cons Φ s w f x P)).1 =
(q w (f y) (op_compatible_cons Φ s w f y P)).1
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y
(q w (f x) (op_compatible_cons Φ s w f x P)).1 =
(q w (f y) (op_compatible_cons Φ s w f y P)).1
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y
foralla : FamilyProd carriers_quotient_algebra
(dom_symboltype w),
ap_operation
(q w (f x) (op_compatible_cons Φ s w f x P)).1 a =
ap_operation
(q w (f y) (op_compatible_cons Φ s w f y P)).1 a
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y
forallx0 : FamilyProd A (dom_symboltype w),
ap_operation
(q w (f x) (op_compatible_cons Φ s w f x P)).1
(map_family_prod (λs : Sort σ, class_of (Φ s)) x0) =
ap_operation
(q w (f y) (op_compatible_cons Φ s w f y P)).1
(map_family_prod (λs : Sort σ, class_of (Φ s)) x0)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y a: FamilyProd A (dom_symboltype w)
ap_operation
(q w (f x) (op_compatible_cons Φ s w f x P)).1
(map_family_prod (λs : Sort σ, class_of (Φ s)) a) =
ap_operation
(q w (f y) (op_compatible_cons Φ s w f y P)).1
(map_family_prod (λs : Sort σ, class_of (Φ s)) a)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y a: FamilyProd A (dom_symboltype w) g1: Operation carriers_quotient_algebra w P1: ComputeOpQuotient (f x) g1
ap_operation (g1; P1).1
(map_family_prod (λs : Sort σ, class_of (Φ s)) a) =
ap_operation
(q w (f y) (op_compatible_cons Φ s w f y P)).1
(map_family_prod (λs : Sort σ, class_of (Φ s)) a)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y a: FamilyProd A (dom_symboltype w) g1: Operation carriers_quotient_algebra w P1: ComputeOpQuotient (f x) g1 g2: Operation carriers_quotient_algebra w P2: ComputeOpQuotient (f y) g2
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y a: FamilyProd A (dom_symboltype w) g1: Operation carriers_quotient_algebra w P1: ComputeOpQuotient (f x) g1 g2: Operation carriers_quotient_algebra w P2: ComputeOpQuotient (f y) g2
class_of (Φ (cod_symboltype w)) (ap_operation (f x) a) =
class_of (Φ (cod_symboltype w)) (ap_operation (f y) a)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ q: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g} s: Sort σ w: SymbolType σ f: Operation A (s ::: w) P: OpCompatible A Φ f x, y: A s C: Φ s x y a: FamilyProd A (dom_symboltype w) g1: Operation carriers_quotient_algebra w P1: ComputeOpQuotient (f x) g1 g2: Operation carriers_quotient_algebra w P2: ComputeOpQuotient (f y) g2
Φ (cod_symboltype w) (ap_operation (f x) a)
(ap_operation (f y) a)
exact (P (x,a) (y,a) (C, reflexive_for_all_2_family_prod A Φ a)).Defined.(* Given an operation [f : A s1 → A s2 → ... A sn → A t] and a witness [C : OpCompatible A Φ f], then [op_quotient_algebra f C] is a dependent pair with first component an operation [g : Q s1 → Q s2 → ... Q sn → Q t], where [Q := carriers_quotient_algebra], and second component a proof of [ComputeOpQuotient f g]. The first component [g] is the quotient algebra operation corresponding to [f]. The second component proof of [ComputeOpQuotient f g] is passed to the [op_quotient_algebra_well_def] lemma, which is used to show that the quotient algebra operation [g] is well defined, i.e. that<< Φ s1 x1 y1 ∧ Φ s2 x2 y2 ∧ ... ∧ Φ sn xn yn>> implies<< g (class_of _ x1) (class_of _ x2) ... (class_of _ xn) = g (class_of _ y1) (class_of _ y2) ... (class_of _ yn).>>*)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ op_quotient_algebra: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g
: Operation
carriers_quotient_algebra w
& ComputeOpQuotient f g} w: SymbolType σ
forallf : Operation A w,
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g}
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ op_quotient_algebra: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g
: Operation
carriers_quotient_algebra w
& ComputeOpQuotient f g} w: SymbolType σ
forallf : Operation A w,
OpCompatible A Φ f ->
{g : Operation carriers_quotient_algebra w &
ComputeOpQuotient f g}
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ op_quotient_algebra: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g
: Operation
carriers_quotient_algebra w
& ComputeOpQuotient f g} w: SymbolType σ s: Sort σ w': ne_list (Sort σ) f: A s -> Operation A w' P: OpCompatible A Φ f
ComputeOpQuotient f
(Quotient_rec (Φ s)
(Operation carriers_quotient_algebra w')
(λx : A s,
(op_quotient_algebra w' (f x)
(op_compatible_cons Φ s w' f x P)).1)
(op_quotient_algebra_well_def op_quotient_algebra
s w' f P))
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ op_quotient_algebra: forall (w : SymbolType σ)
(f : Operation A w),
OpCompatible A Φ f ->
{g
: Operation
carriers_quotient_algebra w
& ComputeOpQuotient f g} w: SymbolType σ s: Sort σ w': ne_list (Sort σ) f: A s -> Operation A w' P: OpCompatible A Φ f x: A s a: fold_right (λ (i : Sort σ) (A0 : Type), A i * A0)
Unit (dom_symboltype w')
ap_operation
(Quotient_rec (Φ s)
(Operation carriers_quotient_algebra w')
(λx : A s,
(op_quotient_algebra w' (f x)
(op_compatible_cons Φ s w' f x P)).1)
(op_quotient_algebra_well_def op_quotient_algebra
s w' f P))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(x, a)) =
class_of (Φ (cod_symboltype (s ::: w')))
(ap_operation f (x, a))
apply (op_quotient_algebra w' (f x) (op_compatible_cons Φ s w' f x P)).Defined.Definitionops_quotient_algebra (u : Symbol σ)
: Operation carriers_quotient_algebra (σ u)
:= (op_quotient_algebra u.#A (ops_compatible_cong A Φ u)).1.(** Definition of quotient algebra. See Lemma [compute_op_quotient] below for the computation rule of quotient algebra operations. *)DefinitionQuotientAlgebra : Algebra σ
:= BuildAlgebra carriers_quotient_algebra ops_quotient_algebra.(** The quotient algebra carriers are always sets. *)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
IsHSetAlgebra QuotientAlgebra
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
exact _.Qed.(** The following lemma gives the computation rule for the quotient algebra operations. It says that for [(a1, a2, ..., an) : A s1 * A s2 * ... * A sn],<< β (class_of _ a1, class_of _ a2, ..., class_of _ an) = class_of _ (α (a1, a2, ..., an))>> where [α] is the uncurried [u.#A] operation and [β] is the uncurried [u.#QuotientAlgebra] operation. *)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ u: Symbol σ
ComputeOpQuotient u.#A u.#QuotientAlgebra
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ u: Symbol σ
ComputeOpQuotient u.#A u.#QuotientAlgebra
apply op_quotient_algebra.Defined.Endquotient_algebra.Modulequotient_algebra_notations.GlobalNotation"A / Φ" := (QuotientAlgebra A Φ) : Algebra_scope.Endquotient_algebra_notations.Import quotient_algebra_notations.(** The next section shows that A/Φ = A/Ψ whenever [Φ s x y <-> Ψ s x y] for all [s], [x], [y]. *)Sectionpath_quotient_algebra.Context
{σ : Signature} (A : Algebra σ)
(Φ : ∀s, Relation (A s)) {CΦ : IsCongruence A Φ}
(Ψ : ∀s, Relation (A s)) {CΨ : IsCongruence A Ψ}.
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Funext p: Φ = Ψ
A / Φ = A / Ψ
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Funext p: Φ = Ψ
A / Φ = A / Ψ
bydestruct p, (path_ishprop CΦ CΨ).Defined.
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Univalence R: forall (s : Sort σ) (xy : A s),
Φ s x y <-> Ψ s x y
A / Φ = A / Ψ
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Univalence R: forall (s : Sort σ) (xy : A s),
Φ s x y <-> Ψ s x y
A / Φ = A / Ψ
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Univalence R: forall (s : Sort σ) (xy : A s),
Φ s x y <-> Ψ s x y
Φ = Ψ
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Univalence R: forall (s : Sort σ) (xy : A s),
Φ s x y <-> Ψ s x y s: Sort σ x, y: A s
Φ s x y = Ψ s x y
σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) CΦ: IsCongruence A Φ Ψ: foralls : Sort σ, Relation (A s) CΨ: IsCongruence A Ψ H: Univalence R: forall (s : Sort σ) (xy : A s),
Φ s x y <-> Ψ s x y s: Sort σ x, y: A s
Φ s x y <~> Ψ s x y
apply equiv_iff_hprop; apply R.Defined.Endpath_quotient_algebra.(** The following section defines the quotient homomorphism [hom_quotient : Homomorphism A (A/Φ)]. *)Sectionhom_quotient.Context
`{Funext} {σ} {A : Algebra σ}
(Φ : ∀s, Relation (A s)) `{!IsCongruence A Φ}.Definitiondef_hom_quotient : ∀ (s : Sort σ), A s → (A/Φ) s :=
λsx, class_of (Φ s) x.
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext w: SymbolType σ g: Operation (A / Φ) w α: Operation A w G: ComputeOpQuotient A Φ α g
OpPreserving def_hom_quotient α g
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext w: SymbolType σ g: Operation (A / Φ) w α: Operation A w G: ComputeOpQuotient A Φ α g
OpPreserving def_hom_quotient α g
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext w: SymbolType σ g: Operation (A / Φ) w α: Operation A w G: foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod (λs : Sort σ, class_of (Φ s))
a) =
class_of (Φ (cod_symboltype w)) (ap_operation α a)
OpPreserving def_hom_quotient α g
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ g: carriers_quotient_algebra A Φ t α: A t G: Unit -> g = class_of (Φ t) α
def_hom_quotient t α = g
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving def_hom_quotient α g
forallx : A t,
OpPreserving def_hom_quotient
(α x) (g (def_hom_quotient t x))
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ g: carriers_quotient_algebra A Φ t α: A t G: Unit -> g = class_of (Φ t) α
def_hom_quotient t α = g
bydestruct (G tt)^.
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving def_hom_quotient α g
forallx : A t,
OpPreserving def_hom_quotient (α x)
(g (def_hom_quotient t x))
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving def_hom_quotient α g x: A t
OpPreserving def_hom_quotient (α x)
(g (def_hom_quotient t x))
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving def_hom_quotient α g x: A t
foralla : FamilyProd A (dom_symboltype w),
ap_operation (g (def_hom_quotient t x))
(map_family_prod (λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w)) (ap_operation (α x) a)
H: Funext σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ H0: Funext t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving def_hom_quotient α g x: A t a: FamilyProd A (dom_symboltype w)
ap_operation (g (def_hom_quotient t x))
(map_family_prod (λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w)) (ap_operation (α x) a)
apply issurj_class_of.Qed.Endhom_quotient.(** If [Φ s x y] implies [x = y], then homomorphism [hom_quotient Φ] is an isomorphism. *)
H: Univalence σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ P: forall (s : Sort σ) (xy : A s), Φ s x y -> x = y
IsIsomorphism (hom_quotient Φ)
H: Univalence σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ P: forall (s : Sort σ) (xy : A s), Φ s x y -> x = y
IsIsomorphism (hom_quotient Φ)
H: Univalence σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ P: forall (s : Sort σ) (xy : A s), Φ s x y -> x = y s: Sort σ
IsEquiv (hom_quotient Φ s)
H: Univalence σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ P: forall (s : Sort σ) (xy : A s), Φ s x y -> x = y s: Sort σ
IsEmbedding (hom_quotient Φ s)
H: Univalence σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ P: forall (s : Sort σ) (xy : A s), Φ s x y -> x = y s: Sort σ
IsInjective (hom_quotient Φ s)
H: Univalence σ: Signature A: Algebra σ Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ P: forall (s : Sort σ) (xy : A s), Φ s x y -> x = y s: Sort σ x, y: A s p: hom_quotient Φ s x = hom_quotient Φ s y
x = y
byapply P, (related_quotient_paths (Φ s)).Qed.(** This section develops the universal mapping property [ump_quotient_algebra] of the quotient algebra. *)Sectionump_quotient_algebra.Context
`{Univalence} {σ} {A B : Algebra σ} `{!IsHSetAlgebra B}
(Φ : ∀s, Relation (A s)) `{!IsCongruence A Φ}.(** In the nested section below we show that if [f : Homomorphism A B] maps elements related by [Φ] to equal elements, there is a [Homomorphism (A/Φ) B] out of the quotient algebra satisfying [compute_quotient_algebra_mapout] below. *)Sectionquotient_algebra_mapout.Context
(f : Homomorphism A B)
(R : ∀s (xy : A s), Φ s x y → f s x = f s y).Definitiondef_hom_quotient_algebra_mapout
: ∀ (s : Sort σ), (A/Φ) s → B s
:= λs, (equiv_quotient_ump (Φ s) (Build_HSet (B s)))^-1 (f s; R s).
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y w: SymbolType σ g: Operation (A / Φ) w α: Operation A w β: Operation B w G: ComputeOpQuotient A Φ α g P: OpPreserving f α β
OpPreserving def_hom_quotient_algebra_mapout g β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y w: SymbolType σ g: Operation (A / Φ) w α: Operation A w β: Operation B w G: ComputeOpQuotient A Φ α g P: OpPreserving f α β
OpPreserving def_hom_quotient_algebra_mapout g β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y w: SymbolType σ g: Operation (A / Φ) w α: Operation A w β: Operation B w G: foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod (λs : Sort σ, class_of (Φ s))
a) =
class_of (Φ (cod_symboltype w)) (ap_operation α a) P: OpPreserving f α β
OpPreserving def_hom_quotient_algebra_mapout g β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ g: carriers_quotient_algebra A Φ t α: A t β: B t G: Unit -> g = class_of (Φ t) α P: f t α = β
Quotient_rec (Φ t) (B t) (f t) (R t) g = β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ g: carriers_quotient_algebra A Φ t α: A t β: B t G: Unit -> g = class_of (Φ t) α P: f t α = β
Quotient_rec (Φ t) (B t) (f t) (R t) g = β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ α: A t β: B t G: Unit -> class_of (Φ t) α = class_of (Φ t) α P: f t α = β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β x: A t
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β x: A t
foralla : FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) x))
(map_family_prod (λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w)) (ap_operation (α x) a)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β x: A t
OpPreserving f (α x) (β (f t x))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β x: A t
foralla : FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) x))
(map_family_prod (λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w)) (ap_operation (α x) a)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β x: A t a: FamilyProd A (dom_symboltype w)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y t: Sort σ w: ne_list (Sort σ) g: carriers_quotient_algebra A Φ t ->
Operation (carriers_quotient_algebra A Φ) w α: A t -> Operation A w β: B t -> Operation B w G: foralla : A t * FamilyProd A (dom_symboltype w),
ap_operation (g (class_of (Φ t) (fst a)))
(map_family_prod (λs : Sort σ, class_of (Φ s))
(snd a)) =
class_of (Φ (cod_symboltype w))
(ap_operation (α (fst a)) (snd a)) P: forallx : A t, OpPreserving f (α x) (β (f t x)) IHw: forall
(g : Operation (carriers_quotient_algebra A Φ) w)
(α : Operation A w)
(β : Operation B w),
(foralla : FamilyProd A (dom_symboltype w),
ap_operation g
(map_family_prod
(λs : Sort σ, class_of (Φ s)) a) =
class_of (Φ (cod_symboltype w))
(ap_operation α a)) ->
OpPreserving f α β ->
OpPreserving def_hom_quotient_algebra_mapout g β x: A t
OpPreserving f (α x) (β (f t x))
apply P.Defined.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y
IsHomomorphism def_hom_quotient_algebra_mapout
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y
IsHomomorphism def_hom_quotient_algebra_mapout
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y u: Symbol σ
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y u: Symbol σ
ComputeOpQuotient A Φ ?α u.#(A / Φ)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y u: Symbol σ
OpPreserving f ?α u.#B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y u: Symbol σ
ComputeOpQuotient A Φ ?α u.#(A / Φ)
apply compute_op_quotient.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y u: Symbol σ
OpPreserving f u.#A u.#B
apply f.Defined.Definitionhom_quotient_algebra_mapout
: Homomorphism (A/Φ) B
:= BuildHomomorphism def_hom_quotient_algebra_mapout.(** The computation rule for [hom_quotient_algebra_mapout] is<< hom_quotient_algebra_mapout s (class_of (Φ s) x) = f s x.>>*)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y
forall (s : Sort σ) (x : A s),
hom_quotient_algebra_mapout s (class_of (Φ s) x) =
f s x
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B R: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y
forall (s : Sort σ) (x : A s),
hom_quotient_algebra_mapout s (class_of (Φ s) x) =
f s x
reflexivity.Defined.Endquotient_algebra_mapout.Definitionhom_quotient_algebra_mapin (g : Homomorphism (A/Φ) B)
: Homomorphism A B
:= hom_compose g (hom_quotient Φ).
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y} -> Homomorphism (A / Φ) B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y} -> Homomorphism (A / Φ) B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B P: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y
Homomorphism (A / Φ) B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ f: Homomorphism A B P: forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y
IsHomomorphism (hom_quotient_algebra_mapout f P)
exact _.Defined.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
Homomorphism (A / Φ) B ->
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y}
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
Homomorphism (A / Φ) B ->
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y}
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ g: Homomorphism (A / Φ) B
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y}
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ g: Homomorphism (A / Φ) B
forall (s : Sort σ) (xy : A s),
Φ s x y ->
hom_quotient_algebra_mapin g s x =
hom_quotient_algebra_mapin g s y
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ g: Homomorphism (A / Φ) B s: Sort σ x, y: A s E: Φ s x y
hom_quotient_algebra_mapin g s x =
hom_quotient_algebra_mapin g s y
exact (transport (λz, g s (class_of (Φ s) x) = g s z)
(qglue E) idpath).Defined.(** The universal mapping property of the quotient algebra. For each homomorphism [f : Homomorphism A B], mapping elements related by [Φ] to equal elements, there is a unique homomorphism [g : Homomorphism (A/Φ) B] satisfying<< f = hom_compose g (hom_quotient Φ).>>*)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y} <~> Homomorphism (A / Φ) B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
{f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y} <~> Homomorphism (A / Φ) B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ G: Homomorphism (A / Φ) B
ump_quotient_algebra_lr (ump_quotient_algebra_rl G) =
G
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ G: Homomorphism (A / Φ) B
ump_quotient_algebra_lr (ump_quotient_algebra_rl G) =
G
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ G: Homomorphism (A / Φ) B s: Sort σ
ump_quotient_algebra_lr (ump_quotient_algebra_rl G) s =
G s
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ
(λx : {f : Homomorphism A B &
forall (s : Sort σ) (xy : A s),
Φ s x y -> f s x = f s y},
ump_quotient_algebra_rl (ump_quotient_algebra_lr x)) ==
idmap
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ F: {f : Homomorphism A B &
forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y}
ump_quotient_algebra_rl (ump_quotient_algebra_lr F) =
F
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B Φ: foralls : Sort σ, Relation (A s) IsCongruence0: IsCongruence A Φ F: {f : Homomorphism A B &
forall (s : Sort σ)
(xy : A s), Φ s x y -> f s x = f s y}