{-# LANGUAGE FlexibleInstances #-}
module SMCDEL.Examples where
import Data.List ((\\),sort)
import SMCDEL.Explicit.S5
import SMCDEL.Internal.TaggedBDD
import SMCDEL.Language
import SMCDEL.Symbolic.S5
import SMCDEL.Translations.S5
modelA :: PointedModelS5
modelA :: PointedModelS5
modelA = ([World]
-> [(Agent, Partition)] -> [(World, Assignment)] -> KripkeModelS5
KrMS5 [World
0,World
1] [(Agent
alice,[[World
0,World
1]]),(Agent
bob,[[World
0],[World
1]])] [ (World
0,[(World -> Prp
P World
0,Bool
True)]), (World
1,[(World -> Prp
P World
0,Bool
False)]) ], World
0)
modelB :: PointedModelS5
modelB :: PointedModelS5
modelB =
([World]
-> [(Agent, Partition)] -> [(World, Assignment)] -> KripkeModelS5
KrMS5
[World
0,World
1,World
2]
[(Agent
alice,[[World
0,World
1,World
2]]),(Agent
bob,[[World
0],[World
1,World
2]])]
[ (World
0,[(World -> Prp
P World
0,Bool
True)]), (World
1,[(World -> Prp
P World
0,Bool
True)]), (World
2,[(World -> Prp
P World
0,Bool
False)]) ]
, World
0)
knsA :: KnowScene
knsA :: KnowScene
knsA = PointedModelS5 -> KnowScene
kripkeToKns PointedModelS5
modelA
knsB :: KnowScene
knsB :: KnowScene
knsB = PointedModelS5 -> KnowScene
kripkeToKns PointedModelS5
modelB
redundantModel :: PointedModelS5
redundantModel :: PointedModelS5
redundantModel = ([World]
-> [(Agent, Partition)] -> [(World, Assignment)] -> KripkeModelS5
KrMS5 [World
0,World
1,World
2] [(Agent
alice,[[World
0,World
1,World
2]]),(Agent
bob,[[World
0,World
1],[World
2]])] [ (World
0,[(World -> Prp
P World
0,Bool
True)]), (World
1,[(World -> Prp
P World
0,Bool
True)]), (World
2,[(World -> Prp
P World
0,Bool
False)]) ], World
0)
myKNS :: KnowScene
myKNS :: KnowScene
myKNS = PointedModelS5 -> KnowScene
kripkeToKns PointedModelS5
redundantModel
minimizedModel :: PointedModelS5
minimizedModel :: PointedModelS5
minimizedModel = KnowScene -> PointedModelS5
knsToKripke KnowScene
myKNS
minimizedKNS :: KnowScene
minimizedKNS :: KnowScene
minimizedKNS = PointedModelS5 -> KnowScene
kripkeToKns PointedModelS5
minimizedModel
myPropu :: Propulation
myPropu :: Propulation
myPropu = [Prp] -> Propulation
forall a. TagForBDDs a => [Prp] -> Tagged a Bdd
allsamebdd (KnowScene -> [Prp]
forall a. HasVocab a => a -> [Prp]
vocabOf KnowScene
myKNS)
pubAnnounceAction :: [Agent] -> Form -> PointedActionModelS5
pubAnnounceAction :: [Agent] -> Form -> PointedActionModelS5
pubAnnounceAction [Agent]
ags Form
f = ([(World, (Form, PostCondition))]
-> [(Agent, Partition)] -> ActionModelS5
ActMS5 [(World
0,(Form
f,[]))] [ (Agent
i,[[World
0]]) | Agent
i <- [Agent]
ags ], World
0)
examplePaAction :: PointedActionModelS5
examplePaAction :: PointedActionModelS5
examplePaAction = [Agent] -> Form -> PointedActionModelS5
pubAnnounceAction [Agent
alice,Agent
bob] (Prp -> Form
PrpF (World -> Prp
P World
0))
groupAnnounceAction :: [Agent] -> [Agent] -> Form -> PointedActionModelS5
groupAnnounceAction :: [Agent] -> [Agent] -> Form -> PointedActionModelS5
groupAnnounceAction [Agent]
everyone [Agent]
listeners Form
f = ([(World, (Form, PostCondition))]
-> [(Agent, Partition)] -> ActionModelS5
ActMS5 [(World
0,(Form
f,[])),(World
1,(Form -> Form
Neg Form
f,[]))] [(Agent, Partition)]
actrel, World
0)
where actrel :: [(Agent, Partition)]
actrel = [(Agent, Partition)] -> [(Agent, Partition)]
forall a. Ord a => [a] -> [a]
sort ([(Agent, Partition)] -> [(Agent, Partition)])
-> [(Agent, Partition)] -> [(Agent, Partition)]
forall a b. (a -> b) -> a -> b
$ [ (Agent
i,[[World
0],[World
1]]) | Agent
i <- [Agent]
listeners ]
[(Agent, Partition)]
-> [(Agent, Partition)] -> [(Agent, Partition)]
forall a. [a] -> [a] -> [a]
++ [ (Agent
i,[[World
0 , World
1]]) | Agent
i <- [Agent]
everyone [Agent] -> [Agent] -> [Agent]
forall a. Eq a => [a] -> [a] -> [a]
\\ [Agent]
listeners ]
exampleGroupAnnounceAction :: PointedActionModelS5
exampleGroupAnnounceAction :: PointedActionModelS5
exampleGroupAnnounceAction = [Agent] -> [Agent] -> Form -> PointedActionModelS5
groupAnnounceAction [Agent
alice, Agent
bob] [Agent
alice] (Prp -> Form
PrpF (World -> Prp
P World
0))
eGrAnLaw :: Form
exampleGrAnnEvent :: Event
exampleGrAnnEvent :: Event
exampleGrAnnEvent@(KnTrf [Prp]
_ Form
eGrAnLaw [(Prp, Bdd)]
_ [(Agent, [Prp])]
_, [Prp]
_) = PointedActionModelS5 -> Event
actionToEvent PointedActionModelS5
exampleGroupAnnounceAction
actionOne :: PointedActionModelS5
actionOne :: PointedActionModelS5
actionOne = ([(World, (Form, PostCondition))]
-> [(Agent, Partition)] -> ActionModelS5
ActMS5 [(World
0,(Form
p,[])),(World
1, ([Form] -> Form
Disj [Form
q, Form -> Form
Neg Form
q],[]))] [(Agent
"Alice",[[World
0],[World
1]]), (Agent
"Bob",[[World
0,World
1]])], World
0) where (Form
p,Form
q) = (Prp -> Form
PrpF (Prp -> Form) -> Prp -> Form
forall a b. (a -> b) -> a -> b
$ World -> Prp
P World
0, Prp -> Form
PrpF (Prp -> Form) -> Prp -> Form
forall a b. (a -> b) -> a -> b
$ World -> Prp
P World
1)
actionTwo :: PointedActionModelS5
actionTwo :: PointedActionModelS5
actionTwo = ([(World, (Form, PostCondition))]
-> [(Agent, Partition)] -> ActionModelS5
ActMS5 [(World
0,(Form
p,[])),(World
1,(Form
q,[])),(World
2,(Form -> Form
Neg Form
q,[]))] [(Agent
"Alice",[[World
0],[World
1,World
2]]), (Agent
"Bob",[[World
0,World
1,World
2]]) ], World
0) where (Form
p,Form
q) = (Prp -> Form
PrpF (Prp -> Form) -> Prp -> Form
forall a b. (a -> b) -> a -> b
$ World -> Prp
P World
0, Prp -> Form
PrpF (Prp -> Form) -> Prp -> Form
forall a b. (a -> b) -> a -> b
$ World -> Prp
P World
1)