Source code on Github
------------------------------------------------------------------------
-- Denotational semantics of predicates.
------------------------------------------------------------------------
open import Prelude.Init hiding (_+_)
open Integer using (_+_; _-_)
open import Prelude.Ord
open import Prelude.Lists
open import Prelude.DecEq
open import Prelude.Applicative
open import Prelude.Monad

open import BitML.BasicTypes
open import BitML.Predicate

module BitML.Semantics.Predicate ( : ) (let open  ) where

open import BitML.Semantics.Configurations.Types 

⟦_⟧ᵃʳ_ : Arith  Cfg  Maybe 
  a    ⟧ᵃʳ Γ = go Γ
  where
    go : Cfg  Maybe 
    go = λ where
      (_  a′  N)  if a == a′ then  (+ N)  else nothing
      (l  r)       go l <|> go r
      _             nothing
  x     ⟧ᵃʳ _ =  x 
 e `+ e′ ⟧ᵃʳ Γ =   e ⟧ᵃʳ Γ +  e′ ⟧ᵃʳ Γ 
 e `- e′ ⟧ᵃʳ Γ =   e ⟧ᵃʳ Γ -  e′ ⟧ᵃʳ Γ 


⟦_⟧ᵖ_ : Predicate  Cfg  Maybe Bool
 `true   ⟧ᵖ Γ =  true 
 e `∧ e′ ⟧ᵖ Γ =   e ⟧ᵖ Γ   e′ ⟧ᵖ Γ 
  e    ⟧ᵖ Γ =  not ( e ⟧ᵖ Γ) 
 e `= e′ ⟧ᵖ Γ =   e ⟧ᵃʳ Γ ==   e′ ⟧ᵃʳ Γ 
 e `< e′ ⟧ᵖ Γ =   e ⟧ᵃʳ Γ <ᵇ   e′ ⟧ᵃʳ Γ