open import Cubical.Foundations.Prelude
module SignatureAlgebra.Signature (ℓi : Level) where
open import Cubical.Foundations.Structure
open import DCPO ℓi
open import SignatureAlgebra.Monomial ℓi
private
variable
ℓd ℓt ℓc ℓmb ℓmc ℓmct ℓv : Level
record PreSignature (ℓc ℓmb ℓmc ℓmct : Level)
: Type (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-suc ℓi) (ℓ-suc ℓc)) (ℓ-suc ℓmb)) (ℓ-suc ℓmc)) (ℓ-suc ℓmct)) where
constructor presignature
field
constructorNames : Type ℓc
constructors : constructorNames → Monomial ℓmb ℓmc ℓmct
open PreSignature public
data Term (Σ : PreSignature ℓc ℓmb ℓmc ℓmct) (V : Type ℓv)
: Type (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-suc ℓi) ℓc) (ℓ-suc ℓmb)) (ℓ-suc ℓmc)) (ℓ-suc ℓmct)) ℓv) where
var : (x : V) → Term Σ V
constr : (c : constructorNames Σ)
→ (Monomial.B (constructors Σ c) → Term Σ V)
→ ⟨ Monomial.C (constructors Σ c) ⟩
→ Term Σ V
⟦_⟧ₜ : {Σ : PreSignature ℓc ℓmb ℓmc ℓmct} {V : Type ℓv}
→ Term Σ V
→ (D : DCPO ℓd ℓt)
→ ((c : constructorNames Σ) → ⟨ ⟦ constructors Σ c ⟧ₘ D ⟩ → ⟨ D ⟩)
→ (V → ⟨ D ⟩) → ⟨ D ⟩
⟦ var x ⟧ₜ D interpretation ρ = ρ x
⟦ constr cName f c ⟧ₜ D interpretation ρ =
interpretation cName ((λ b → ⟦ f b ⟧ₜ D interpretation ρ) , c)
record Inequality (Σ : PreSignature ℓc ℓmb ℓmc ℓmct) (ℓv : Level)
: Type (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-suc ℓi) ℓc) (ℓ-suc ℓmb)) (ℓ-suc ℓmc)) (ℓ-suc ℓmct)) (ℓ-suc ℓv)) where
constructor inequality
field
V : Type ℓv
lhs : Term Σ V
rhs : Term Σ V
open Inequality public
record Signature (ℓc ℓmb ℓmc ℓmct ℓe ℓv : Level)
: Type (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-suc ℓi) (ℓ-suc ℓc)) (ℓ-suc ℓmb)) (ℓ-suc ℓmc)) (ℓ-suc ℓmct)) (ℓ-suc ℓe)) (ℓ-suc ℓv)) where
constructor signature
field
preSignature : PreSignature ℓc ℓmb ℓmc ℓmct
inequalityNames : Type ℓe
inequalities : inequalityNames → Inequality preSignature ℓv
open PreSignature preSignature public
open Signature public