This is the Base.Varieties.EquationalLogic module of the Agda Universal Algebra Library where the binary βmodelsβ relation β§
, relating algebras (or classes of algebras) to the identities that they satisfy, is defined.
Let π
be a signature. By an identity or equation in π
we mean an ordered pair of terms, written p β q
, from the term algebra π» X
. If π¨
is an π
-algebra we say that π¨
satisfies p β q
provided p Μ π¨ β‘ q Μ π¨
holds. In this situation, we write π¨ β§ p β q
and say that π¨
models the identity p β q
. If π¦
is a class of π
-algebras, then we write π¦ β§ p β q
iff, for every π¨ β π¦
, π¨ β§ p β q
.
Because a class of structures has a different type than a single structure, we must use a slightly different syntax to avoid overloading the relations β§
and β
. As a reasonable alternative to what we would normally express informally as π¦ β§ p β q
, we have settled on π¦ β« p β q
to denote this relation. To reiterate, if π¦
is a class of π
-algebras, we write π¦ β« p β q
iff every π¨ β π¦
satisfies π¨ β§ p β q
.
{-# OPTIONS --without-K --exact-split --safe #-} open import Overture using ( π ; π₯ ; Signature ) module Base.Varieties.EquationalLogic {π : Signature π π₯} where -- Imports from Agda and the Agda Standard Library ---------------- open import Agda.Primitive using () renaming ( Set to Type ) open import Data.Product using ( _Γ_ ; _,_ ; Ξ£-syntax) renaming ( projβ to fst ; projβ to snd ) open import Level using ( Level ; _β_ ) open import Relation.Unary using ( Pred ; _β_ ) -- Imports from the Agda Universal Algebra Library ---------------- open import Overture using ( _β_ ) open import Base.Algebras {π = π} using ( Algebra ; ov ) open import Base.Terms {π = π} using ( Term ; π» ; _β¦_β§ ) private variable Ο Ξ± Ο ΞΉ : Level X : Type Ο
We define the binary βmodelsβ relation β§
using infix syntax so that we may
write, e.g., π¨ β§ p β q
or π¦ β« p β q
, relating algebras (or classes of
algebras) to the identities that they satisfy. We also prove a couple of useful
facts about β§
.
_β§_β_ : Algebra Ξ± β Term X β Term X β Type _ π¨ β§ p β q = π¨ β¦ p β§ β π¨ β¦ q β§ _β«_β_ : Pred(Algebra Ξ±) Ο β Term X β Term X β Type _ π¦ β« p β q = {π¨ : Algebra _} β π¦ π¨ β π¨ β§ p β q
Unicode tip. Type \models
to get β§
; type \||=
to get β«
.
The expression π¨ β§ p β q
represents the assertion that the identity p β q
holds when interpreted in the algebra π¨
; syntactically, π¨ β¦ p β§ β π¨ β¦ q β§
.
The expression π¨ β¦ p β§ β π¨ β¦ q β§
denotes extensional equality; that is,
for each βenvironmentβ Ξ· : X β β£ π¨ β£
(assigning values in the domain of π¨
to the variable symbols in X
) the (intensional) equality π¨ β¦ p β§ Ξ· β‘ π¨ β¦ q β§ Ξ·
holds.
If π¦
denotes a class of structures, then Th π¦
represents the set of identities
modeled by the members of π¦
.
Th : Pred (Algebra Ξ±) (ov Ξ±) β Pred(Term X Γ Term X) _ Th π¦ = Ξ» (p , q) β π¦ β« p β q
We represent Th π¦
as an indexed collection of algebras by taking Th π¦
,
itself, to be the index set.
module _ {X : Type Ο}{π¦ : Pred (Algebra Ξ±) (ov Ξ±)} where β : Type (ov(Ξ± β Ο)) β = Ξ£[ (p , q) β (Term X Γ Term X) ] π¦ β« p β q β° : β β Term X Γ Term X β° ((p , q) , _) = (p , q)
If β°
denotes a set of identities, then Mod β°
is the class of structures
satisfying the identities in β°
.
Mod : Pred(Term X Γ Term X) (ov Ξ±) β Pred(Algebra Ξ±) _ Mod β° = Ξ» π¨ β β p q β (p , q) β β° β π¨ β§ p β q -- (tupled version) Modα΅ : {I : Type ΞΉ} β (I β Term X Γ Term X) β {Ξ± : Level} β Pred(Algebra Ξ±) _ Modα΅ β° = Ξ» π¨ β β i β π¨ β§ (fst (β° i)) β (snd (β° i))