Skip to content

Examples.Structures.Basic

Examples of Structures

{-# OPTIONS --cubical-compatible --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 )
-- 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
                 }