1
0
forked from GitHub/gf-core
Files
gf-core/examples/tutorial/semantics/AnswerBase.hs

45 lines
1013 B
Haskell

module AnswerBase where
import GSyntax
-- interpretation of Base
type Prop = Bool
type Exp = Int
domain = [0 .. 100]
iS :: GS -> Prop
iS s = case s of
GPredAP np ap -> iNP np (iAP ap)
GConjS c s t -> iConj c (iS s) (iS t)
iNP :: GNP -> (Exp -> Prop) -> Prop
iNP np p = case np of
GEvery cn -> all (\x -> not (iCN cn x) || p x) domain
GSome cn -> any (\x -> iCN cn x && p x) domain
GConjNP c np1 np2 -> iConj c (iNP np1 p) (iNP np2 p)
GUseInt (GInt i) -> p (fromInteger i)
iAP :: GAP -> Exp -> Prop
iAP ap e = case ap of
GComplA2 a2 np -> iNP np (iA2 a2 e)
GConjAP c ap1 ap2 -> iConj c (iAP ap1 e) (iAP ap2 e)
GEven -> even e
GOdd -> not (even e)
iCN :: GCN -> Exp -> Prop
iCN cn e = case cn of
GModCN ap cn0 -> (iCN cn0 e) && (iAP ap e)
GNumber -> True
iConj :: GConj -> Prop -> Prop -> Prop
iConj c = case c of
GAnd -> (&&)
GOr -> (||)
iA2 :: GA2 -> Exp -> Exp -> Prop
iA2 a2 e1 e2 = case a2 of
GGreater -> e1 > e1
GSmaller -> e1 < e2
GEqual -> e1 == e2