{-# OPTIONS --without-K --exact-split --safe #-}
module Fragment.Equational.Theory.Bundles where
open import Fragment.Algebra.Signature
open import Fragment.Equational.Theory.Base
open import Fragment.Equational.Theory.Combinators
open import Data.Nat using (ℕ)
module _ where
data MagmaOp : ℕ → Set where
• : MagmaOp 2
Σ-magma : Signature
Σ-magma = record { ops = MagmaOp }
import Fragment.Equational.Theory.Laws Σ-magma as L
data MagmaEq : ℕ → Set where
magma-eqs : ∀ {n} → MagmaEq n → Eq Σ-magma n
magma-eqs ()
data SemigroupEq : ℕ → Set where
assoc : SemigroupEq 3
semigroup-eqs : ∀ {n} → SemigroupEq n → Eq Σ-magma n
semigroup-eqs assoc = L.assoc •
data CSemigroupEq : ℕ → Set where
comm : CSemigroupEq 2
assoc : CSemigroupEq 3
csemigroup-eqs : ∀ {n} → CSemigroupEq n → Eq Σ-magma n
csemigroup-eqs comm = L.comm •
csemigroup-eqs assoc = L.assoc •
Θ-magma : Theory
Θ-magma = record { Σ = Σ-magma
; eqs = MagmaEq
; _⟦_⟧ₑ = magma-eqs
}
Θ-semigroup : Theory
Θ-semigroup = record { Σ = Σ-magma
; eqs = SemigroupEq
; _⟦_⟧ₑ = semigroup-eqs
}
Θ-csemigroup : Theory
Θ-csemigroup = record { Σ = Σ-magma
; eqs = CSemigroupEq
; _⟦_⟧ₑ = csemigroup-eqs
}
Θ-monoid : Theory
Θ-monoid = AddId Θ-semigroup •
Θ-cmonoid : Theory
Θ-cmonoid = AddId Θ-csemigroup •