You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

190 lines
4.3 KiB

// non-probabilistic CTL*/LTL properties
// --------------- non-probabilistic variants of lec17dtmc.pm.props -----
// RESULT: true
E [ G F "a" ];
// RESULT: false
A [ G F "a" ];
// RESULT: true
E [ (G !"b")&(G F "a") ];
// RESULT: false
A [ (G !"b")&(G F "a") ];
// RESULT: true
E [ F G "a" ];
// RESULT: false
A [ F G "a" ];
// RESULT: true
E [ (G ("b"=>(F (!"b"&"a"))))&(F G !"b") ];
// RESULT: true
A [ (G ("b"=>(F (!"b"&"a"))))&(F G !"b") ];
// -------------- some basic tests ---------------------------------
// RESULT: false
A [ F (s=4 | s=5) ];
// RESULT: true
E [ F (s=4 | s=5) ];
// RESULT: false
A [ (F s=4) & (F s=5) ];
// RESULT: false
E [ (F s=4) & (F s=5) ];
// RESULT: true
A [ (G F (s=0 => s!=0)) => (F (s=4 | s=5)) ];
// RESULT: true
A [ (G F (s=0 => s!=0)) => ((F s=4) | (F s=5)) ];
// RESULT: false
A [ (G F (s=0 => s!=0)) => ((F s=4) & (F s=5)) ];
// each state can reach s=2 or s=4 in one or two steps
// RESULT: true
filter(forall, E[ X (s=2 | s=4 | (X (s=2 | s=4))) ], true);
// variant not yet supported:
// RESULT: Error:not supported
filter(forall, E[ F[1,2] (s=2 | s=4) ], true);
// each state reaches s=2 or s=4 in one or two steps on every path
// RESULT: false
filter(forall, A[ X (s=2 | s=4 | (X (s=2 | s=4))) ], true);
// variant not yet supported:
// RESULT: Error:not supported
filter(forall, A[ F[1,2] (s=2 | s=4) ], true);
// RESULT: true
filter(exists, E[ F G s=0 ], true);
// RESULT: false
filter(exists, A[ F G s=0 ], true);
// ---- checking that product is correctly in sync -----
// RESULT: true
filter(forall, E[ s=0 ], s=0);
// RESULT: true
filter(forall, E[ s=1 ], s=1);
// RESULT: true
filter(forall, E[ s=2 ], s=2);
// RESULT: true
filter(forall, E[ s=3 ], s=3);
// RESULT: true
filter(forall, E[ s=4 ], s=4);
// RESULT: true
filter(forall, E[ s=5 ], s=5);
// RESULT: true
filter(forall, A[ s=0 ], s=0);
// RESULT: true
filter(forall, A[ s=1 ], s=1);
// RESULT: true
filter(forall, A[ s=2 ], s=2);
// RESULT: true
filter(forall, A[ s=3 ], s=3);
// RESULT: true
filter(forall, A[ s=4 ], s=4);
// RESULT: true
filter(forall, A[ s=5 ], s=5);
// RESULT: true
filter(forall, A[ (X s=0) | (X s=1) | (X s=3)], s=0);
// RESULT: true
filter(forall, A[ (X s=2) | (X s=3) | (X s=4) ], s=1);
// RESULT: true
filter(forall, A[ (X s=5) ], s=2);
// RESULT: true
filter(forall, A[ (X s=4) ], s=3);
// RESULT: true
filter(forall, A[ (X s=3) ], s=4);
// RESULT: true
filter(forall, A[ (X s=5) | (X s=2) ], s=5);
// ----- nested ----------------------------
// a path where there's always a path to go to s=4
// does not necessarily end up there
// RESULT: false
A[ (G E[ F s=4 ]) => (F s=4) ]
// however, there is such a path ...
// RESULT: true
E[ (G E[ F s=4 ]) => (F s=4) ]
// and both can be satisfied simultaneously
// RESULT: true
E[ (G E[ F s=4 ]) & (F s=4) ]
// on all paths that always have a chance to reach
// s=4 either s=4 is seen infinitely often or
// we always stay in s=0
// RESULT: true
A[ (G E[ F s=4 ]) => ((G F s=4) | (F G s=0)) ]
// ---- does the product work with LTL simplification? --------
// will be simplified to true, removing AP s=0
// RESULT: true
E[ true | (X s=0) ]
// will be simplified to (s<4 & s=0) U s=4, reordering APs
// RESULT: false
E[ (s<4 U s=4) & (s=0 U s=4) ]
// ---- trivial cases (true, false) --------
// RESULT: true
E[ true ];
// RESULT: true
A[ true ];
// RESULT: false
E[ false ];
// RESULT: false
A[ false ];
// RESULT: true
filter(exists, E[ true ], true);
// RESULT: true
filter(exists, A[ true ], true);
// RESULT: true
filter(forall, E[ true ], true);
// RESULT: true
filter(forall, A[ true ], true);
// RESULT: false
filter(exists, E[ false ], true);
// RESULT: false
filter(exists, A[ false ], true);
// RESULT: false
filter(forall, E[ false ], true);
// RESULT: false
filter(forall, A[ false ], true);
// RESULT: true
E[ G F true ];
// RESULT: true
A[ G F true ];
// RESULT: false
E[ G F false ];
// RESULT: false
A[ G F false ];
// RESULT: true
filter(exists, E[ G F true ], true);
// RESULT: true
filter(exists, A[ G F true ], true);
// RESULT: true
filter(forall, E[ G F true ], true);
// RESULT: true
filter(forall, A[ G F true ], true);
// RESULT: false
filter(exists, E[ G F false ], true);
// RESULT: false
filter(exists, A[ G F false ], true);
// RESULT: false
filter(forall, E[ G F false ], true);
// RESULT: false
filter(forall, A[ G F false ], true);