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]) 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)