Quotient algebras

module universal-algebra.quotient-algebras where
Imports
open import elementary-number-theory.natural-numbers

open import foundation.dependent-pair-types
open import foundation.equivalence-classes
open import foundation.equivalence-relations
open import foundation.equivalences
open import foundation.functoriality-propositional-truncation
open import foundation.multivariable-functoriality-set-quotients
open import foundation.multivariable-operations
open import foundation.propositional-truncations
open import foundation.propositions
open import foundation.set-quotients
open import foundation.sets
open import foundation.unit-type
open import foundation.universe-levels
open import foundation.vectors-set-quotients

open import linear-algebra.vectors

open import universal-algebra.algebraic-theories
open import universal-algebra.algebras-of-theories
open import universal-algebra.congruences
open import universal-algebra.models-of-signatures
open import universal-algebra.signatures

Idea

The quotient of an algebra by a congruence is the set quotient by that congruence. This quotient again has the structure of an algebra inherited by the original one.

Definitions

module _
  { l1 : Level} ( Sg : signature l1)
  { l2 : Level} ( Th : Theory Sg l2)
  { l3 : Level} ( Alg : Algebra Sg Th l3)
  { l4 : Level} ( R : congruence-Algebra Sg Th Alg l4)
  where

  set-quotient-Algebra : Set (l3  l4)
  set-quotient-Algebra =
    quotient-Set ( eq-rel-congruence-Algebra Sg Th Alg R)

  type-quotient-Algebra : UU (l3  l4)
  type-quotient-Algebra = pr1 set-quotient-Algebra

  is-set-set-quotient-Algebra : is-set type-quotient-Algebra
  is-set-set-quotient-Algebra = pr2 set-quotient-Algebra

  compute-quotient-Algebra :
    equivalence-class
      ( eq-rel-congruence-Algebra Sg Th Alg R) 
      ( type-quotient-Algebra)
  compute-quotient-Algebra =
    compute-set-quotient
      ( eq-rel-congruence-Algebra Sg Th Alg R)

  set-quotient-equivalence-class-Algebra :
    equivalence-class
      ( eq-rel-congruence-Algebra Sg Th Alg R) 
    type-quotient-Algebra
  set-quotient-equivalence-class-Algebra =
    map-equiv compute-quotient-Algebra

  equivalence-class-set-quotient-Algebra :
    type-quotient-Algebra 
    equivalence-class
      ( eq-rel-congruence-Algebra Sg Th Alg R)
  equivalence-class-set-quotient-Algebra =
    map-inv-equiv compute-quotient-Algebra

  vec-type-quotient-vec-type-Algebra :
    { n : } 
    vec type-quotient-Algebra n 
    type-trunc-Prop (vec (type-Algebra Sg Th Alg) n)
  vec-type-quotient-vec-type-Algebra empty-vec = unit-trunc-Prop empty-vec
  vec-type-quotient-vec-type-Algebra (x  v) =
    map-universal-property-trunc-Prop
      ( trunc-Prop _)
      ( λ (z , p) 
        map-trunc-Prop
           v'  z  v')
          ( vec-type-quotient-vec-type-Algebra v))
      ( pr2 (equivalence-class-set-quotient-Algebra x))

  relation-holds-all-vec-all-sim-Eq-Rel :
    { n : }
    ( v v' : multivariable-input n ( λ _  type-Algebra Sg Th Alg)) 
    ( type-Prop
      ( prop-Eq-Rel
        ( all-sim-Eq-Rel n
          ( λ _  type-Algebra Sg Th Alg)
          ( λ _  eq-rel-congruence-Algebra Sg Th Alg R)) v v')) 
    relation-holds-all-vec Sg Th Alg
      ( eq-rel-congruence-Algebra Sg Th Alg R)
      ( vector-multivariable-input n (type-Algebra Sg Th Alg) v)
      ( vector-multivariable-input n (type-Algebra Sg Th Alg) v')
  relation-holds-all-vec-all-sim-Eq-Rel {zero-ℕ} v v' p = raise-star
  relation-holds-all-vec-all-sim-Eq-Rel {succ-ℕ n} (x , v) (x' , v') (p , p') =
    pair p (relation-holds-all-vec-all-sim-Eq-Rel v v' p')

  is-model-set-quotient-Algebra :
    is-model-signature Sg set-quotient-Algebra
  is-model-set-quotient-Algebra op v =
    multivariable-map-set-quotient
      ( arity-operation-signature Sg op)
      ( λ _  type-Algebra Sg Th Alg)
      ( λ _  eq-rel-congruence-Algebra Sg Th Alg R)
      ( eq-rel-congruence-Algebra Sg Th Alg R)
      ( pair
        ( λ v 
          is-model-set-Algebra Sg Th Alg op
            ( vector-multivariable-input
              ( arity-operation-signature Sg op)
              ( type-Algebra Sg Th Alg)
              ( v)))
        ( λ {v} {v'} p 
          preserves-operations-congruence-Algebra Sg Th Alg R op
            ( vector-multivariable-input
              ( arity-operation-signature Sg op)
              ( type-Algebra Sg Th Alg)
              ( v))
            ( vector-multivariable-input
              ( arity-operation-signature Sg op)
              ( type-Algebra Sg Th Alg)
              ( v'))
            (relation-holds-all-vec-all-sim-Eq-Rel v v' p)))
      ( multivariable-input-vector
        ( arity-operation-signature Sg op)
        ( type-quotient-Algebra)
        ( v))