---
layout: default
title : "Examples.Structures.Basic module (Agda Universal Algebra Library)"
date : "2021-07-29"
author: "agda-algebras development team"
---

### 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][].

<!--
```agda
{-# 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
`šŸ`, `šŸ`.

```agda
-- 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}).


```agda
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
                 }
```