This is the Base.Homomorphisms.Kernels module of the Agda Universal Algebra Library.
{-# OPTIONS --without-K --exact-split --safe #-} open import Overture using ( Signature; 𝓞 ; 𝓥 ) module Base.Homomorphisms.Kernels {𝑆 : Signature 𝓞 𝓥} where -- Imports from Agda and the Agda Standard Library -------------------------------- open import Data.Product using ( _,_ ) open import Function.Base using ( _∘_ ) open import Level using ( Level ; _⊔_ ; suc ) open import Relation.Binary.PropositionalEquality using ( _≡_ ; module ≡-Reasoning ; refl ) -- Imports from the Agda Universal Algebras Library -------------------------------- open import Overture using ( ∣_∣ ; ∥_∥ ; _⁻¹ ) open import Base.Functions using ( Image_∋_ ; IsSurjective ) open import Base.Equality using ( swelldef ) open import Base.Relations using ( ker ; ker-IsEquivalence ; ⟪_⟫ ; mkblk ) open import Base.Algebras {𝑆 = 𝑆} using ( Algebra ; compatible ; _̂_ ; Con ; mkcon ; _╱_ ; IsCongruence ; /-≡ ) open import Base.Homomorphisms.Basic {𝑆 = 𝑆} using ( hom ; epi ; epi→hom ) private variable α β : Level
The kernel of a homomorphism is a congruence relation and conversely for every congruence relation θ, there exists a homomorphism with kernel θ (namely, that canonical projection onto the quotient modulo θ).
module _ {𝑨 : Algebra α} where open ≡-Reasoning homker-comp : swelldef 𝓥 β → {𝑩 : Algebra β}(h : hom 𝑨 𝑩) → compatible 𝑨 (ker ∣ h ∣) homker-comp wd {𝑩} h f {u}{v} kuv = ∣ h ∣((f ̂ 𝑨) u) ≡⟨ ∥ h ∥ f u ⟩ (f ̂ 𝑩)(∣ h ∣ ∘ u) ≡⟨ wd(f ̂ 𝑩)(∣ h ∣ ∘ u)(∣ h ∣ ∘ v)kuv ⟩ (f ̂ 𝑩)(∣ h ∣ ∘ v) ≡⟨ (∥ h ∥ f v)⁻¹ ⟩ ∣ h ∣((f ̂ 𝑨) v) ∎
(Notice, it is here that the swelldef postulate comes into play, and because it
is needed to prove homker-comp, it is postulated by all the lemmas below that
depend upon homker-comp.)
It is convenient to define a function that takes a homomorphism and constructs a
congruence from its kernel. We call this function kercon.
kercon : swelldef 𝓥 β → {𝑩 : Algebra β} → hom 𝑨 𝑩 → Con{α}{β} 𝑨 kercon wd {𝑩} h = ker ∣ h ∣ , mkcon (ker-IsEquivalence ∣ h ∣)(homker-comp wd {𝑩} h)
With this congruence we construct the corresponding quotient, along with some syntactic sugar to denote it.
kerquo : swelldef 𝓥 β → {𝑩 : Algebra β} → hom 𝑨 𝑩 → Algebra (α ⊔ suc β) kerquo wd {𝑩} h = 𝑨 ╱ (kercon wd {𝑩} h) ker[_⇒_]_↾_ : (𝑨 : Algebra α)(𝑩 : Algebra β) → hom 𝑨 𝑩 → swelldef 𝓥 β → Algebra (α ⊔ suc β) ker[ 𝑨 ⇒ 𝑩 ] h ↾ wd = kerquo wd {𝑩} h
Thus, given h : hom 𝑨 𝑩, we can construct the quotient of 𝑨 modulo the kernel
of h, and the syntax for this quotient in the
agda-algebras library is
𝑨 [ 𝑩 ]/ker h ↾ fe.
Given an algebra 𝑨 and a congruence θ, the canonical projection is a map
from 𝑨 onto 𝑨 ╱ θ that is constructed, and proved epimorphic, as follows.
module _ {α β : Level}{𝑨 : Algebra α} where πepi : (θ : Con{α}{β} 𝑨) → epi 𝑨 (𝑨 ╱ θ) πepi θ = (λ a → ⟪ a ⟫) , (λ _ _ → refl) , cπ-is-epic where cπ-is-epic : IsSurjective (λ a → ⟪ a ⟫) cπ-is-epic (C , mkblk a refl ) = Image_∋_.eq a refl
In may happen that we don’t care about the surjectivity of πepi, in which case
would might prefer to work with the homomorphic reduct of πepi. This is
obtained by applying epi-to-hom, like so.
πhom : (θ : Con{α}{β} 𝑨) → hom 𝑨 (𝑨 ╱ θ) πhom θ = epi→hom (𝑨 ╱ θ) (πepi θ)
We combine the foregoing to define a function that takes 𝑆-algebras 𝑨 and 𝑩,
and a homomorphism h : hom 𝑨 𝑩 and returns the canonical epimorphism from 𝑨
onto 𝑨 [ 𝑩 ]/ker h. (Recall, the latter is the special notation we defined above
for the quotient of 𝑨 modulo the kernel of h.)
πker : (wd : swelldef 𝓥 β){𝑩 : Algebra β}(h : hom 𝑨 𝑩) → epi 𝑨 (ker[ 𝑨 ⇒ 𝑩 ] h ↾ wd) πker wd {𝑩} h = πepi (kercon wd {𝑩} h)
The kernel of the canonical projection of 𝑨 onto 𝑨 / θ is equal to θ, but
since equality of inhabitants of certain types (like Congruence or Rel) can be
a tricky business, we settle for proving the containment 𝑨 / θ ⊆ θ. Of the two
containments, this is the easier one to prove; luckily it is also the one we need
later.
open IsCongruence ker-in-con : {wd : swelldef 𝓥 (α ⊔ suc β)}(θ : Con 𝑨) → ∀ {x}{y} → ∣ kercon wd {𝑨 ╱ θ} (πhom θ) ∣ x y → ∣ θ ∣ x y ker-in-con θ hyp = /-≡ θ hyp
← Base.Homomorphisms.Properties Base.Homomorphisms.Products →