module A201602.LFFOL where
open import Data.Nat
using (ℕ; zero; suc; _+_; _*_; _<_)
open import Data.Product
using (Σ; _×_)
open import Data.Sum
using (_⊎_)
open import Relation.Binary.PropositionalEquality
using (_≡_)
open import Relation.Nullary
using (¬_)
Var : Set
Var = ℕ
data ι : Set where
‘zero’ : ι
‘suc’ : ι → ι
_‘+’_ : ι → ι → ι
_‘*’_ : ι → ι → ι
data o : Set where
_‘≡’_ : ι → ι → o
_‘<’_ : ι → ι → o
‘¬’_ : o → o
_‘∧’_ : o → o → o
_‘∨’_ : o → o → o
_‘→’_ : o → o → o
‘∀’_ : (ι → o) → o
‘∃’_ : (ι → o) → o
δ⟦_⟧ι : ι → ℕ
δ⟦ ‘zero’ ⟧ι = zero
δ⟦ ‘suc’ t ⟧ι = suc δ⟦ t ⟧ι
δ⟦ t ‘+’ u ⟧ι = δ⟦ t ⟧ι + δ⟦ u ⟧ι
δ⟦ t ‘*’ u ⟧ι = δ⟦ t ⟧ι * δ⟦ u ⟧ι
δ⟦_⟧o : o → Set
δ⟦ t ‘≡’ u ⟧o = δ⟦ t ⟧ι ≡ δ⟦ u ⟧ι
δ⟦ t ‘<’ u ⟧o = δ⟦ t ⟧ι < δ⟦ u ⟧ι
δ⟦ ‘¬’ φ ⟧o = ¬ δ⟦ φ ⟧o
δ⟦ φ ‘∧’ ψ ⟧o = δ⟦ φ ⟧o × δ⟦ ψ ⟧o
δ⟦ φ ‘∨’ ψ ⟧o = δ⟦ φ ⟧o ⊎ δ⟦ ψ ⟧o
δ⟦ φ ‘→’ ψ ⟧o = δ⟦ φ ⟧o → δ⟦ ψ ⟧o
δ⟦ ‘∀’ f ⟧o = ∀{x : ι} → δ⟦ f x ⟧o
δ⟦ ‘∃’ f ⟧o = Σ ι (λ x → δ⟦ f x ⟧o)