{-# OPTIONS --without-K --exact-split --safe #-}
open import Fragment.Equational.Theory
module Fragment.Equational.Model.Base (Θ : Theory) where
open import Fragment.Equational.Model.Satisfaction {Σ Θ}
open import Fragment.Algebra.Algebra (Σ Θ) hiding (∥_∥/≈)
open import Fragment.Algebra.Free (Σ Θ)
open import Level using (Level; _⊔_; suc)
open import Function using (_∘_)
open import Data.Fin using (Fin)
open import Data.Nat using (ℕ)
open import Relation.Binary using (Setoid)
private
variable
a ℓ : Level
Models : Algebra {a} {ℓ} → Set (a ⊔ ℓ)
Models S = ∀ {n} → (eq : eqs Θ n) → S ⊨ (Θ ⟦ eq ⟧ₑ)
module _ (S : Setoid a ℓ) where
record IsModel : Set (a ⊔ ℓ) where
field
isAlgebra : IsAlgebra S
models : Models (algebra S isAlgebra)
open IsAlgebra isAlgebra public
record Model : Set (suc a ⊔ suc ℓ) where
field
∥_∥/≈ : Setoid a ℓ
isModel : IsModel ∥_∥/≈
∥_∥ₐ : Algebra
∥_∥ₐ = algebra ∥_∥/≈ (IsModel.isAlgebra isModel)
∥_∥ₐ-models : Models ∥_∥ₐ
∥_∥ₐ-models = IsModel.models isModel
open Algebra (algebra ∥_∥/≈ (IsModel.isAlgebra isModel))
hiding (∥_∥/≈) public
open Model public