smcdel-1.0.0: src/SMCDEL/Examples/DrinkLogic.hs
module SMCDEL.Examples.DrinkLogic where
import SMCDEL.Language
import SMCDEL.Symbolic.S5
thirstyScene :: Int -> KnowScene
thirstyScene n = (KnS [P 1..P n] (boolBddOf Top) [ (show i,[P i]) | i <- [1..n] ], [P 1..P n])
myThirstyScene :: KnowScene
myThirstyScene = thirstyScene 3
thirstyF :: Int -> Form
thirstyF n = Conj [ Conj [ doesNotKnow k | k <- [1..n] ]
, pubAnnounceStack [ doesNotKnow i | i<-[1..(n-1)] ] $ K (show n) allWantBeer ]
where
allWantBeer = Conj [ PrpF $ P k | k <- [1..n] ]
doesNotKnow i = Neg $ Kw (show i) allWantBeer
thirstyCheck :: Int -> Bool
thirstyCheck n = evalViaBdd (thirstyScene n) (thirstyF n)