Built with Alectryon. 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 the kernel of a homomorphism [cong_ker], the image of a homomorphism [in_image_hom], and it proves the first
isomorphism theorem [isomorphic_first_isomorphism]. The first
identification theorem [id_first_isomorphism] follows. *)
Require Import
Basics.Notations
HSet
Colimits.Quotient
Classes.interfaces.canonical_names
Classes.theory.ua_isomorphic
Classes.theory.ua_subalgebra
Classes.theory.ua_quotient_algebra.Import
algebra_notations
quotient_algebra_notations
subalgebra_notations
isomorphic_notations.(** The following section defines the kernel of a homomorphism [cong_ker], and shows that it is a congruence.*)Sectioncong_ker.Context
{σ : Signature} {AB : Algebra σ} `{IsHSetAlgebra B}
(f : ∀s, A s → B s) `{!IsHomomorphism f}.Definitioncong_ker (s : Sort σ) : Relation (A s)
:= λ (xy : A s), f s x = f s y.(* Leave the following results about [cong_ker] opaque because they are h-props. *)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ
EquivRel (cong_ker s)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ
EquivRel (cong_ker s)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ
Symmetric (cong_ker s)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ
Transitive (cong_ker s)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ
Symmetric (cong_ker s)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ x, y: A s
cong_ker s x y -> cong_ker s y x
exact inverse.
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ
Transitive (cong_ker s)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f s: Sort σ x, y, z: A s
cong_ker s x y -> cong_ker s y z -> cong_ker s x z
exact concat.Qed.
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f w: SymbolType σ β: Operation B w a, b: FamilyProd A (dom_symboltype w) R: for_all_2_family_prod A A cong_ker a b
ap_operation β (map_family_prod f a) = ap_operation β (map_family_prod f b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f w: SymbolType σ β: Operation B w a, b: FamilyProd A (dom_symboltype w) R: for_all_2_family_prod A A cong_ker a b
ap_operation β (map_family_prod f a) = ap_operation β (map_family_prod f b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ β: Operation B (ne_list.one t) a, b: FamilyProd A (dom_symboltype (ne_list.one t)) R: for_all_2_family_prod A A cong_ker a b
ap_operation β (map_family_prod f a) = ap_operation β (map_family_prod f b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) β: Operation B (ne_list.cons t w) a, b: FamilyProd A (dom_symboltype (ne_list.cons t w)) R: for_all_2_family_prod A A cong_ker a b IHw: forall (β0 : Operation B w) (a0b0 : FamilyProd A (dom_symboltype w)),
for_all_2_family_prod A A cong_ker a0 b0 ->
ap_operation β0 (map_family_prod f a0) =
ap_operation β0 (map_family_prod f b0)
ap_operation β (map_family_prod f a) = ap_operation β (map_family_prod f b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ β: Operation B (ne_list.one t) a, b: FamilyProd A (dom_symboltype (ne_list.one t)) R: for_all_2_family_prod A A cong_ker a b
ap_operation β (map_family_prod f a) = ap_operation β (map_family_prod f b)
reflexivity.
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) β: Operation B (ne_list.cons t w) a, b: FamilyProd A (dom_symboltype (ne_list.cons t w)) R: for_all_2_family_prod A A cong_ker a b IHw: forall (β0 : Operation B w) (a0b0 : FamilyProd A (dom_symboltype w)),
for_all_2_family_prod A A cong_ker a0 b0 ->
ap_operation β0 (map_family_prod f a0) =
ap_operation β0 (map_family_prod f b0)
ap_operation β (map_family_prod f a) = ap_operation β (map_family_prod f b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) β: Operation B (ne_list.cons t w) x: A t a: Core.fold_right (λ (i : Sort σ) (A0 : Type), A i * A0) Unit
(dom_symboltype w) y: A t b: Core.fold_right (λ (i : Sort σ) (A0 : Type), A i * A0) Unit
(dom_symboltype w) r: cong_ker t x y R: for_all_2_family_prod A A cong_ker a b IHw: forall (β0 : Operation B w) (a0b0 : FamilyProd A (dom_symboltype w)),
for_all_2_family_prod A A cong_ker a0 b0 ->
ap_operation β0 (map_family_prod f a0) =
ap_operation β0 (map_family_prod f b0)
ap_operation β (map_family_prod f (x, a)) =
ap_operation β (map_family_prod f (y, b))
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) β: Operation B (ne_list.cons t w) x: A t a: Core.fold_right (λ (i : Sort σ) (A0 : Type), A i * A0) Unit
(dom_symboltype w) y: A t b: Core.fold_right (λ (i : Sort σ) (A0 : Type), A i * A0) Unit
(dom_symboltype w) r: cong_ker t x y R: for_all_2_family_prod A A cong_ker a b IHw: forall (β0 : Operation B w) (a0b0 : FamilyProd A (dom_symboltype w)),
for_all_2_family_prod A A cong_ker a0 b0 ->
ap_operation β0 (map_family_prod f a0) =
ap_operation β0 (map_family_prod f b0)
ap_operation (β (f t x)) (map_family_prod f a) =
ap_operation (β (f t y)) (map_family_prod f b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) β: Operation B (ne_list.cons t w) x: A t a: Core.fold_right (λ (i : Sort σ) (A0 : Type), A i * A0) Unit
(dom_symboltype w) y: A t b: Core.fold_right (λ (i : Sort σ) (A0 : Type), A i * A0) Unit
(dom_symboltype w) R: for_all_2_family_prod A A cong_ker a b IHw: forall (β0 : Operation B w) (a0b0 : FamilyProd A (dom_symboltype w)),
for_all_2_family_prod A A cong_ker a0 b0 ->
ap_operation β0 (map_family_prod f a0) =
ap_operation β0 (map_family_prod f b0)
ap_operation (β (f t x)) (map_family_prod f a) =
ap_operation (β (f t x)) (map_family_prod f b)
byapply IHw.Qed.
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f
OpsCompatible A cong_ker
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f
OpsCompatible A cong_ker
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f u: Symbol σ a, b: FamilyProd A (dom_symboltype (σ u)) R: for_all_2_family_prod A A cong_ker a b
cong_ker (cod_symboltype (σ u)) (ap_operation u.#A a) (ap_operation u.#A b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f u: Symbol σ a, b: FamilyProd A (dom_symboltype (σ u)) R: for_all_2_family_prod A A cong_ker a b
f (cod_symboltype (σ u)) (ap_operation u.#A a) =
f (cod_symboltype (σ u)) (ap_operation u.#A b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f u: Symbol σ a, b: FamilyProd A (dom_symboltype (σ u)) R: for_all_2_family_prod A A cong_ker a b
ap_operation u.#B (map_family_prod f a) =
f (cod_symboltype (σ u)) (ap_operation u.#A b)
σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f u: Symbol σ a, b: FamilyProd A (dom_symboltype (σ u)) R: for_all_2_family_prod A A cong_ker a b
ap_operation u.#B (map_family_prod f a) =
ap_operation u.#B (map_family_prod f b)
byapply path_ap_operation_ker_related.Qed.#[export] Instanceis_congruence_ker : IsCongruence A cong_ker
:= BuildIsCongruence A cong_ker.Endcong_ker.(** The next section defines an "in image predicate", [in_image_hom]. It gives rise to the homomorphic image of a homomorphism. *)Sectionin_image_hom.Context
`{Funext} {σ : Signature} {A B : Algebra σ}
(f : ∀s, A s → B s) {hom : IsHomomorphism f}.Definitionin_image_hom (s : Sort σ) (y : B s) : HProp
:= merely (hfiber (f s) y).
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f w: SymbolType σ α: Operation A w β: Operation B w P: OpPreserving f α β
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f w: SymbolType σ α: Operation A w β: Operation B w P: OpPreserving f α β
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) P: OpPreserving f α β
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) P: OpPreserving f α β IHw: forall (α0 : Operation A w) (β0 : Operation B w),
OpPreserving f α0 β0 ->
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β0
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) P: OpPreserving f α β
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β
exact (tr (α; P)).
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) P: OpPreserving f α β IHw: forall (α0 : Operation A w) (β0 : Operation B w),
OpPreserving f α0 β0 ->
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β0
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) β
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) P: OpPreserving f α β IHw: forall (α0 : Operation A w) (β0 : Operation B w),
OpPreserving f α0 β0 ->
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) β0 y: B t
in_image_hom t y ->
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) (β y)
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) P: OpPreserving f α β IHw: forall (α0 : Operation A w) (β0 : Operation B w),
OpPreserving f α0 β0 ->
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) β0 y: B t
hfiber (f t) y ->
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) (β y)
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) P: OpPreserving f α β IHw: forall (α0 : Operation A w) (β0 : Operation B w),
OpPreserving f α0 β0 ->
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) β0 y: B t x: A t p: f t x = y
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) (β y)
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) P: OpPreserving f α β IHw: forall (α0 : Operation A w) (β0 : Operation B w),
OpPreserving f α0 β0 ->
ClosedUnderOp B (λ (s : Sort σ) (y0 : B s), in_image_hom s y0) β0 y: B t x: A t p: f t x = y
OpPreserving f (α x) (β y)
bydestruct p.Qed.
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
IsClosedUnderOps B (λ (s : Sort σ) (y : B s), in_image_hom s y)
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
IsClosedUnderOps B (λ (s : Sort σ) (y : B s), in_image_hom s y)
H: Funext σ: Signature A, B: Algebra σ f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f u: Symbol σ
ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom s y) u.#B
eapply closed_under_op_in_image_hom, hom.Qed.#[export] Instanceis_subalgebra_predicate_in_image_hom
: IsSubalgebraPredicate B in_image_hom
:= BuildIsSubalgebraPredicate is_closed_under_ops_in_image_hom.Endin_image_hom.(** The following section proves the first isomorphism theorem, [isomorphic_first_isomorphism] and the first identification theorem [id_first_isomorphism]. *)Sectionfirst_isomorphism.Context
`{Univalence} {σ} {A B : Algebra σ} `{IsHSetAlgebra B}
(f : ∀s, A s → B s) {hom : IsHomomorphism f}.(** The homomorphism [def_first_isomorphism] is informally given by<< def_first_isomorphism s (class_of _ x) := f s x.>>*)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
(A / cong_ker f) s ->
(B && (λ (s0 : Sort σ) (y : B s0), in_image_hom f s0 y)) s
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
(A / cong_ker f) s ->
(B && (λ (s0 : Sort σ) (y : B s0), in_image_hom f s0 y)) s
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
forallab : A s, cong_ker f s a b -> (f s a; tr (a; 1)) = (f s b; tr (b; 1))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x, y: A s p: cong_ker f s x y
(f s x; tr (x; 1)) = (f s y; tr (y; 1))
byapply path_sigma_hprop.Defined.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f w: SymbolType σ α: Operation A w β: Operation B w γ: Operation (A / cong_ker f) w C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ
OpPreserving def_first_isomorphism γ
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f w: SymbolType σ α: Operation A w β: Operation B w γ: Operation (A / cong_ker f) w C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ
OpPreserving def_first_isomorphism γ
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) γ: Operation (A / cong_ker f) (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ
OpPreserving def_first_isomorphism γ
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0)
OpPreserving def_first_isomorphism γ
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) γ: Operation (A / cong_ker f) (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ
OpPreserving def_first_isomorphism γ
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) γ: Operation (A / cong_ker f) (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ
(def_first_isomorphism t γ).1 =
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C).1
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β
forallγ : Operation (A / cong_ker f) (ne_list.one t),
ComputeOpQuotient A (cong_ker f) α γ ->
(def_first_isomorphism t γ).1 =
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C).1
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β
foralla : A t,
ComputeOpQuotient A (cong_ker f) α (class_of (cong_ker f t) a) ->
(def_first_isomorphism t (class_of (cong_ker f t) a)).1 =
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C).1
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) β: Operation B (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β x: A t G: ComputeOpQuotient A (cong_ker f) α (class_of (cong_ker f t) x)
(def_first_isomorphism t (class_of (cong_ker f t) x)).1 =
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C).1
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ α: Operation A (ne_list.one t) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) (f t α) x: A t G: ComputeOpQuotient A (cong_ker f) α (class_of (cong_ker f t) x)
(def_first_isomorphism t (class_of (cong_ker f t) x)).1 =
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) (f t α) C).1
apply (related_quotient_paths (cong_ker f t) _ _ (G tt)).
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0)
OpPreserving def_first_isomorphism γ
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0)
foralla : A t,
(fix OpPreserving (w0 : SymbolType σ) :
Operation (A / cong_ker f) w0 ->
Operation (B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)) w0 ->
Type :=
match
w0 as w1
return
(Operation (A / cong_ker f) w1 ->
Operation (B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)) w1 ->
Type)
with
| ne_list.one s =>
λ (α0 : Operation (A / cong_ker f) (ne_list.one s))
(β0 : Operation
(B && (λ (s0 : Sort σ) (y : B s0), in_image_hom f s0 y))
(ne_list.one s)),
def_first_isomorphism s α0 = β0
| ne_list.cons s y =>
λ (α0 : Operation (A / cong_ker f) (ne_list.cons s y))
(β0 : Operation
(B && (λ (s0 : Sort σ) (y0 : B s0), in_image_hom f s0 y0))
(ne_list.cons s y)),
forallx : (A / cong_ker f) s,
OpPreserving y (α0 x) (β0 (def_first_isomorphism s x))
end)
w (γ (class_of (cong_ker f t) a))
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C
(def_first_isomorphism t (class_of (cong_ker f t) a)))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0) x: A t
(fix OpPreserving (w0 : SymbolType σ) :
Operation (A / cong_ker f) w0 ->
Operation (B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)) w0 ->
Type :=
match
w0 as w1
return
(Operation (A / cong_ker f) w1 ->
Operation (B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)) w1 ->
Type)
with
| ne_list.one s =>
λ (α0 : Operation (A / cong_ker f) (ne_list.one s))
(β0 : Operation
(B && (λ (s0 : Sort σ) (y : B s0), in_image_hom f s0 y))
(ne_list.one s)),
def_first_isomorphism s α0 = β0
| ne_list.cons s y =>
λ (α0 : Operation (A / cong_ker f) (ne_list.cons s y))
(β0 : Operation
(B && (λ (s0 : Sort σ) (y0 : B s0), in_image_hom f s0 y0))
(ne_list.cons s y)),
forallx0 : (A / cong_ker f) s,
OpPreserving y (α0 x0) (β0 (def_first_isomorphism s x0))
end)
w (γ (class_of (cong_ker f t) x))
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β C
(def_first_isomorphism t (class_of (cong_ker f t) x)))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0) x: A t
OpPreserving f (α x) (β (f t x))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0) x: A t
ComputeOpQuotient A (cong_ker f) (α x) (γ (class_of (cong_ker f t) x))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0) x: A t
OpPreserving f (α x) (β (f t x))
exact (P x).
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0) x: A t
ComputeOpQuotient A (cong_ker f) (α x) (γ (class_of (cong_ker f t) x))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f t: Sort σ w: ne_list.notations.ne_list (Sort σ) α: Operation A (ne_list.cons t w) β: Operation B (ne_list.cons t w) γ: Operation (A / cong_ker f) (ne_list.cons t w) C: ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β P: OpPreserving f α β G: ComputeOpQuotient A (cong_ker f) α γ IHw: forall (α0 : Operation A w) (β0 : Operation B w)
(γ0 : Operation (A / cong_ker f) w)
(C0 : ClosedUnderOp B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0),
OpPreserving f α0 β0 ->
ComputeOpQuotient A (cong_ker f) α0 γ0 ->
OpPreserving def_first_isomorphism γ0
(op_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y) β0 C0) x: A t a: FamilyProd A (dom_symboltype w)
ap_operation (γ (class_of (cong_ker f t) x))
(map_family_prod (λs : Sort σ, class_of (cong_ker f s)) a) =
class_of (cong_ker f (cod_symboltype w)) (ap_operation (α x) a)
exact (G (x,a)).Qed.(* Leave [is_homomorphism_first_isomorphism] opaque because [IsHomomorphism] is an hprop when [B] is a set algebra. *)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
IsHomomorphism def_first_isomorphism
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
IsHomomorphism def_first_isomorphism
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f u: Symbol σ
OpPreserving def_first_isomorphism u.#(A / cong_ker f)
u.#(B && (λ (s : Sort σ) (y : B s), in_image_hom f s y))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f u: Symbol σ
OpPreserving f u.#A u.#B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f u: Symbol σ
ComputeOpQuotient A (cong_ker f) u.#A u.#(A / cong_ker f)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f u: Symbol σ
OpPreserving f u.#A u.#B
apply hom.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f u: Symbol σ
ComputeOpQuotient A (cong_ker f) u.#A u.#(A / cong_ker f)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
IsEmbedding (hom_first_isomorphism s)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
IsEmbedding (hom_first_isomorphism s)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
IsInjective (hom_first_isomorphism s)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
forall (a : A s) (y : (A / cong_ker f) s),
hom_first_isomorphism s (class_of (cong_ker f s) a) =
hom_first_isomorphism s y -> class_of (cong_ker f s) a = y
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: A s
forally : (A / cong_ker f) s,
hom_first_isomorphism s (class_of (cong_ker f s) x) =
hom_first_isomorphism s y -> class_of (cong_ker f s) x = y
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: A s
foralla : A s,
hom_first_isomorphism s (class_of (cong_ker f s) x) =
hom_first_isomorphism s (class_of (cong_ker f s) a) ->
class_of (cong_ker f s) x = class_of (cong_ker f s) a
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x, y: A s p: hom_first_isomorphism s (class_of (cong_ker f s) x) =
hom_first_isomorphism s (class_of (cong_ker f s) y)
class_of (cong_ker f s) x = class_of (cong_ker f s) y
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x, y: A s p: hom_first_isomorphism s (class_of (cong_ker f s) x) =
hom_first_isomorphism s (class_of (cong_ker f s) y)
cong_ker f s x y
exact (p..1).Qed.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
forallb : (B && (λ (s0 : Sort σ) (y : B s0), in_image_hom f s0 y)) s,
merely (hfiber (hom_first_isomorphism s) b)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: B s M: in_image_hom f s x
merely (hfiber (hom_first_isomorphism s) (x; M))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: B s M: in_image_hom f s x
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: B s M: in_image_hom f s x y: A s Y: f s y = x
merely (hfiber (hom_first_isomorphism s) (x; M))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: B s M: in_image_hom f s x y: A s Y: f s y = x
hfiber (hom_first_isomorphism s) (x; M)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ x: B s M: in_image_hom f s x y: A s Y: f s y = x
hom_first_isomorphism s (class_of (cong_ker f s) y) = (x; M)
byapply path_sigma_hprop.Qed.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
IsIsomorphism hom_first_isomorphism
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
IsIsomorphism hom_first_isomorphism
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 hom: IsHomomorphism f s: Sort σ
IsEquiv (hom_first_isomorphism s)
apply isequiv_surj_emb; exact _.Qed.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
A / cong_ker f ≅ B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
A / cong_ker f ≅ B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)
exact (BuildIsomorphic def_first_isomorphism).Defined.(* The first identification theorem [id_first_isomorphism] is an h-prop, so we can leave it opaque. *)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
A / cong_ker f = B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s hom: IsHomomorphism f
A / cong_ker f = B && (λ (s : Sort σ) (y : B s), in_image_hom f s y)
exact (id_isomorphic isomorphic_first_isomorphism).Qed.Endfirst_isomorphism.(** The next section gives a specialization of the first isomorphism theorem, where the homomorphism is surjective. *)Sectionfirst_isomorphism_surjection.Context
`{Univalence} {σ} {A B : Algebra σ} `{IsHSetAlgebra B}
(f : ∀s, A s → B s) `{!IsHomomorphism f} {S : ∀s, IsSurjection (f s)}.
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
IsIsomorphism
(hom_inc_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
IsIsomorphism
(hom_inc_subalgebra B (λ (s : Sort σ) (y : B s), in_image_hom f s y))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
forall (s : Sort σ) (x : B s), in_image_hom f s x
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f S: foralls0 : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s0) s: Sort σ x: B s
Trunc (-1) (hfiber (f s) x)
apply center, S.Qed.(** The homomorphism [hom_first_isomorphism_surjection] is the composition of two isomorphisms, so it is an isomorphism. *)Definitionhom_first_isomorphism_surjection
: Homomorphism (A / cong_ker f) B
:= hom_compose
(hom_inc_subalgebra B (in_image_hom f))
(hom_first_isomorphism f).
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
A / cong_ker f ≅ B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
A / cong_ker f = B
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f S: foralls : Sort σ, ReflectiveSubuniverse.IsConnMap (Tr (-1)) (f s)
A / cong_ker f = B
exact (id_isomorphic isomorphic_first_isomorphism_surjection).Qed.Endfirst_isomorphism_surjection.(** The next section specializes the first isomorphism theorem to the case where the homomorphism is injective. It proves that an injective homomorphism is an isomorphism between its domain and its image. *)Sectionfirst_isomorphism_inj.Context
`{Univalence} {σ} {A B : Algebra σ} `{IsHSetAlgebra B}
(f : ∀s, A s → B s) `{!IsHomomorphism f} (inj : ∀s, IsInjective (f s)).
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f inj: foralls : Sort σ, IsInjective (f s)
IsIsomorphism (hom_quotient (cong_ker f))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f inj: foralls : Sort σ, IsInjective (f s)
IsIsomorphism (hom_quotient (cong_ker f))
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls : Sort σ, A s -> B s IsHomomorphism0: IsHomomorphism f inj: foralls : Sort σ, IsInjective (f s)
forall (s : Sort σ) (xy : A s), cong_ker f s x y -> x = y
H: Univalence σ: Signature A, B: Algebra σ IsHSetAlgebra0: IsHSetAlgebra B f: foralls0 : Sort σ, A s0 -> B s0 IsHomomorphism0: IsHomomorphism f inj: foralls0 : Sort σ, IsInjective (f s0) s: Sort σ x, y: A s p: cong_ker f s x y
x = y
apply inj, p.Qed.(** The homomorphism [hom_first_isomorphism_inj] is the composition of two isomorphisms, so it is an isomorphism. *)Definitionhom_first_isomorphism_inj
: Homomorphism A (B && in_image_hom f)
:= hom_compose
(hom_first_isomorphism f)
(hom_quotient (cong_ker f)).Definitionisomorphic_first_isomorphism_inj : A ≅ B && in_image_hom f
:= BuildIsomorphic hom_first_isomorphism_inj.Definitionid_first_isomorphism_inj : A = B && in_image_hom f
:= id_isomorphic isomorphic_first_isomorphism_inj.Endfirst_isomorphism_inj.