Skip to content

Examples.Structures.Basic

Examples of Structures

This is the Examples.Structures.Basic module of the Agda Universal Algebra Library.

Two tiny worked examples of the general structure type of the frozen Legacy.Base tree, which packages operation symbols and relation symbols in one signature pair: a purely algebraic structure and a purely relational one. The signatures come from Examples.Structures.Signatures.

{-# OPTIONS --without-K --exact-split --safe #-}

module Examples.Structures.Basic where

open import Level                           using ( 0ā„“ )
open import Data.Product                    using ( _,_ ; _Ɨ_  )
open import Relation.Unary                  using ( Pred ; _∈_ )

open import Overture                        using ( šŸš ; šŸ› )
open import Legacy.Base.Structures          using ( structure )
open import Examples.Structures.Signatures  using ( S001 ; Sāˆ… ; S0001 )

SL is a three-element meet semilattice presented as a structure with one binary operation symbol (S001) and no relation symbols (Sāˆ…). The meet of two distinct elements is šŸŽ, so the induced order has bottom šŸŽ below the incomparable pair šŸ, šŸ.

-- An example of a (purely) algebraic structure is a 3-element meet semilattice.

SL : structure  S001   -- (one binary operation symbol)
                Sāˆ…     -- (no relation symbols)
                {ρ = 0ā„“}

SL = record { carrier = šŸ›
            ; op = Ī» _ x → meet (x šŸš.šŸŽ) (x šŸš.šŸ)
            ; rel = Ī» ()
            } where
              meet : šŸ› → šŸ› → šŸ›
              meet šŸ›.šŸŽ šŸ›.šŸŽ = šŸ›.šŸŽ
              meet šŸ›.šŸŽ šŸ›.šŸ = šŸ›.šŸŽ
              meet šŸ›.šŸŽ šŸ›.šŸ = šŸ›.šŸŽ
              meet šŸ›.šŸ šŸ›.šŸŽ = šŸ›.šŸŽ
              meet šŸ›.šŸ šŸ›.šŸ = šŸ›.šŸ
              meet šŸ›.šŸ šŸ›.šŸ = šŸ›.šŸŽ
              meet šŸ›.šŸ šŸ›.šŸŽ = šŸ›.šŸŽ
              meet šŸ›.šŸ šŸ›.šŸ = šŸ›.šŸŽ
              meet šŸ›.šŸ šŸ›.šŸ = šŸ›.šŸ

An example of a (purely) relational structure is the 2 element structure with the ternary NAE-3-SAT relation, R = S³ - {(0,0,0), (1,1,1)} (where S = {0, 1}).

data NAE3SAT : Pred (šŸš Ɨ šŸš Ɨ šŸš) 0ā„“ where
  r1 : (šŸš.šŸŽ , šŸš.šŸŽ , šŸš.šŸ) ∈ NAE3SAT
  r2 : (šŸš.šŸŽ , šŸš.šŸ , šŸš.šŸŽ) ∈ NAE3SAT
  r3 : (šŸš.šŸŽ , šŸš.šŸ , šŸš.šŸ) ∈ NAE3SAT
  r4 : (šŸš.šŸ , šŸš.šŸŽ , šŸš.šŸŽ) ∈ NAE3SAT
  r5 : (šŸš.šŸ , šŸš.šŸŽ , šŸš.šŸ) ∈ NAE3SAT
  r6 : (šŸš.šŸ , šŸš.šŸ , šŸš.šŸŽ) ∈ NAE3SAT

nae3sat : structure Sāˆ…    -- (no operation symbols)
                    S0001 -- (one ternary relation symbol)

nae3sat = record { carrier = šŸš
                 ; op = Ī» ()
                 ; rel = Ī» _ x → ((x šŸ›.šŸŽ) , (x šŸ›.šŸ) , (x šŸ›.šŸ)) ∈ NAE3SAT
                 }