smcdel-1.0.0: src/SMCDEL/Examples/MuddyChildren.hs
module SMCDEL.Examples.MuddyChildren where
import Data.List
import Data.Map.Strict (fromList)
import SMCDEL.Language
import SMCDEL.Symbolic.S5
import qualified SMCDEL.Symbolic.K
mudScnInit :: Int -> Int -> KnowScene
mudScnInit n m = (KnS vocab law obs, actual) where
vocab = [P 1 .. P n]
law = boolBddOf Top
obs = [ (show i, delete (P i) vocab) | i <- [1..n] ]
actual = [P 1 .. P m]
myMudScnInit :: KnowScene
myMudScnInit = mudScnInit 3 3
knows :: Int -> Form
knows i = Kw (show i) (PrpF $ P i)
nobodyknows :: Int -> Form
nobodyknows n = Conj [ Neg $ knows i | i <- [1..n] ]
father :: Int -> Form
father n = Disj (map PrpF [P 1 .. P n])
mudScn0 :: KnowScene
mudScn0 = pubAnnounceOnScn myMudScnInit (father 3)
mudScn1 :: KnowScene
mudScn1 = pubAnnounceOnScn mudScn0 (nobodyknows 3)
mudScn2 :: KnowScene
mudKns2 :: KnowStruct
mudScn2@(mudKns2,_) = pubAnnounceOnScn mudScn1 (nobodyknows 3)
empty :: Int -> KnowScene
empty n = (KnS [] (boolBddOf Top) obs,[]) where
obs = [ (show i, []) | i <- [1..n] ]
buildMC :: Int -> Int -> Event
buildMC n m = (KnT vocab Top obs, map P [1..m]) where
obs = [ (show i, delete (P i) vocab) | i <- [1..n] ]
vocab = map P [1..n]
mudBelScnInit :: Int -> Int -> SMCDEL.Symbolic.K.BelScene
mudBelScnInit n m = (SMCDEL.Symbolic.K.BlS vocab law obs, actual) where
vocab = [P 1 .. P n]
law = boolBddOf Top
obs = fromList [(show i, SMCDEL.Symbolic.K.allsamebdd $ delete (P i) vocab) | i <- [1..n]]
actual = [P 1 .. P m]
myMudBelScnInit :: SMCDEL.Symbolic.K.BelScene
myMudBelScnInit = mudBelScnInit 3 3