reachRules.key

Taclets

Enabled under choices: reach:on

accDefinition

accDefinition { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o ; \schemaVar \term deltaObject o2 ; \schemaVar \variables Field fv ; \find ( acc ( h , s , o , o2 )) \varcond \replacewith ( o != null & o2 != null & \exists fv ; ( elementOf ( o , fv , s )& deltaObject :: select ( h , o , fv )= o2 )) \heuristics (simplify ) };defined in: reachRules.key Line: 11 Offset :4

reachDefinition

reachDefinition { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \schemaVar \variables Object ov ; \find ( reach ( h , s , o , o2 , n )) \varcond \replacewith ( n >= 0 & o != null & o2 != null & ( n = 0 & o = o2 | \exists ov ; ( reach ( h , s , o , ov , n - 1 )& acc ( h , s , ov , o2 )))) };defined in: reachRules.key Line: 30 Offset :4

reachZero

reachZero { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \find ( reach ( h , s , o , o2 , 0 )) \replacewith ( o != null & o = o2 ) \heuristics (simplify ) };defined in: reachRules.key Line: 57 Offset :4

reachOne

reachOne { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \find ( reach ( h , s , o , o2 , 1 )) \replacewith ( acc ( h , s , o , o2 )) \heuristics (simplify ) };defined in: reachRules.key Line: 69 Offset :4

reachNull

reachNull { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o ; \schemaVar \term int n ; \find ( reach ( h , s , o , null , n )) \replacewith ( false ) \heuristics (simplify ) };defined in: reachRules.key Line: 81 Offset :4

reachNull2

reachNull2 { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o2 ; \schemaVar \term int n ; \find ( reach ( h , s , null , o2 , n )) \replacewith ( false ) \heuristics (simplify ) };defined in: reachRules.key Line: 94 Offset :4

reachAddOne

reachAddOne { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \schemaVar \variables Object ov ; \find ( reach ( h , s , o , o2 , 1 + n )) \varcond \replacewith ( n >= - 1 & o != null & o2 != null & ( n = - 1 & o = o2 | \exists ov ; ( reach ( h , s , o , ov , n )& acc ( h , s , ov , o2 )))) \heuristics (simplify ) };defined in: reachRules.key Line: 107 Offset :4

reachAddOne2

reachAddOne2 { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \schemaVar \variables Object ov ; \find ( reach ( h , s , o , o2 , n + 1 )) \varcond \replacewith ( n >= - 1 & o != null & o2 != null & ( n = - 1 & o = o2 | \exists ov ; ( reach ( h , s , o , ov , n )& acc ( h , s , ov , o2 )))) \heuristics (simplify ) };defined in: reachRules.key Line: 131 Offset :4

reachUniquePathSameSteps

reachUniquePathSameSteps { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n ; \schemaVar \term Field f ; \assumes ( reach ( h , allObjects ( f ), o , o2 , n )==> ) \find ( reach ( h , allObjects ( f ), o , o3 , n )==> ) \varcond \add ( o2 = o3 ==> ) \heuristics (inReachableStateImplication ) };defined in: reachRules.key Line: 155 Offset :4

reachEndOfUniquePath

reachEndOfUniquePath { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n , n2 ; \schemaVar \term Field f ; \assumes ( reach ( h , allObjects ( f ), o , o2 , n ), alpha :: select ( h , o2 , f )= null , alpha :: select ( h , o3 , f )= null ==> ) \find ( reach ( h , allObjects ( f ), o , o3 , n2 )==> ) \varcond \add ( o2 = o3 & n = n2 ==> ) \heuristics (inReachableStateImplication ) };defined in: reachRules.key Line: 171 Offset :4

reachEndOfUniquePath2

reachEndOfUniquePath2 { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n , n2 ; \schemaVar \term Field f ; \assumes ( reach ( h , allObjects ( f ), o , o2 , n ), alpha :: select ( h , o2 , f )= null ==> ) \find ( reach ( h , allObjects ( f ), o , o3 , n2 )==> ) \varcond \add ( n2 < n | ( o2 = o3 & n = n2 )==> ) \heuristics (inReachableStateImplication ) };defined in: reachRules.key Line: 189 Offset :4

reachDependenciesStoreSimple

reachDependenciesStoreSimple { \schemaVar \term Heap h ; \schemaVar \term Field f , f2 ; \schemaVar \term any x ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n ; \find ( reach ( store ( h , o3 , f2 , x ), allObjects ( f ), o , o2 , n )) \varcond \replacewith ( reach ( h , allObjects ( f ), o , o2 , n )) \heuristics (simplify ) };defined in: reachRules.key Line: 206 Offset :4

reachDependenciesStoreSimpleEQ

reachDependenciesStoreSimpleEQ { \schemaVar \term Heap h , h2 ; \schemaVar \term Field f , f2 ; \schemaVar \term any x ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n ; \assumes ( store ( h , o3 , f2 , x )= h2 ==> ) \find ( reach ( h2 , allObjects ( f ), o , o2 , n )) \varcond \replacewith ( reach ( h , allObjects ( f ), o , o2 , n )) \heuristics (simplify ) };defined in: reachRules.key Line: 221 Offset :4

reachDoesNotDependOnCreatedness

reachDoesNotDependOnCreatedness { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n ; \find ( reach ( create ( h , o3 ), s , o , o2 , n )) \replacewith ( reach ( h , s , o , o2 , n )) \heuristics (simplify ) };defined in: reachRules.key Line: 237 Offset :4

reachDependenciesStore

reachDependenciesStore { \schemaVar \term Heap h ; \schemaVar \term Field f ; \schemaVar \term any x ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n ; \schemaVar \variables int nv ; \find ( reach ( store ( h , o3 , f , x ), s , o , o2 , n )) \sameUpdateLevel \varcond "Dependencies changed" : \add ( ==> ! ( \exists nv ; ( nv < n & reach ( h , s , o , o3 , nv ))& elementOf ( o3 , f , s ))); "Dependencies unchanged" : \replacewith ( reach ( h , s , o , o2 , n )) \add ( ! ( \exists nv ; ( nv < n & reach ( h , s , o , o3 , nv ))& elementOf ( o3 , f , s ))==> ) };defined in: reachRules.key Line: 249 Offset :4

reachDependenciesStoreEQ

reachDependenciesStoreEQ { \schemaVar \term Heap h , h2 ; \schemaVar \term Field f ; \schemaVar \term any x ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 , o3 ; \schemaVar \term int n ; \schemaVar \variables int nv ; \assumes ( store ( h , o3 , f , x )= h2 ==> ) \find ( reach ( h2 , s , o , o2 , n )) \sameUpdateLevel \varcond "Dependencies changed" : \add ( ==> ! ( \exists nv ; ( nv < n & reach ( h , s , o , o3 , nv ))& elementOf ( o3 , f , s ))); "Dependencies unchanged" : \replacewith ( reach ( h , s , o , o2 , n )) \add ( ! ( \exists nv ; ( nv < n & reach ( h , s , o , o3 , nv ))& elementOf ( o3 , f , s ))==> ) };defined in: reachRules.key Line: 278 Offset :4

reachDependenciesAnon

reachDependenciesAnon { \schemaVar \term Heap h , h2 ; \schemaVar \term LocSet s , s2 ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \schemaVar \variables Object ov ; \schemaVar \variables Field fv ; \schemaVar \variables int nv ; \find ( reach ( anon ( h , s2 , h2 ), s , o , o2 , n )) \sameUpdateLevel \varcond "Dependencies changed" : \add ( ==> \forall ov ; \forall fv ; ! ( elementOf ( ov , fv , s2 )& \exists nv ; ( nv < n & reach ( h , s , o , ov , nv ))& elementOf ( ov , fv , s ))); "Dependencies unchanged" : \replacewith ( reach ( h , s , o , o2 , n )) \add ( \forall ov ; \forall fv ; ! ( elementOf ( ov , fv , s2 )& \exists nv ; ( nv < n & reach ( h , s , o , ov , nv ))& elementOf ( ov , fv , s ))==> ) };defined in: reachRules.key Line: 308 Offset :4

reachDependenciesAnonCoarse

reachDependenciesAnonCoarse { \schemaVar \term Heap h , h2 ; \schemaVar \term LocSet s , s2 ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \schemaVar \variables Object ov ; \schemaVar \variables Field fv ; \schemaVar \variables int nv ; \find ( reach ( anon ( h , s2 , h2 ), s , o , o2 , n )) \sameUpdateLevel \varcond "Dependencies changed" : \add ( ==> \forall ov ; \forall fv ; ! ( elementOf ( ov , fv , s2 )& \exists nv ; ( reach ( h , s , o , ov , nv ))& elementOf ( ov , fv , s ))); "Dependencies unchanged" : \replacewith ( reach ( h , s , o , o2 , n )) \add ( \forall ov ; \forall fv ; ! ( elementOf ( ov , fv , s2 )& \exists nv ; ( reach ( h , s , o , ov , nv ))& elementOf ( ov , fv , s ))==> ) };defined in: reachRules.key Line: 350 Offset :4

only_created_objects_are_reachable

only_created_objects_are_reachable { \schemaVar \term Heap h ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \assumes ( wellFormed ( h )==> o = null ) \find ( reach ( h , s , o , o2 , n )==> ) \add ( ! boolean :: select ( h , o , java.lang.Object :: )= TRUE | boolean :: select ( h , o2 , java.lang.Object :: )= TRUE ==> ) \heuristics (inReachableStateImplication ) };defined in: reachRules.key Line: 392 Offset :4

reach_does_not_depend_on_fresh_locs

reach_does_not_depend_on_fresh_locs { \schemaVar \term Heap h , h2 ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \assumes ( ==> o = null ) \find ( reach ( anon ( h , empty , h2 ), s , o , o2 , n )) \replacewith ( reach ( h , s , o , o2 , n )); \add ( ==> wellFormed ( h )& boolean :: select ( h , o , java.lang.Object :: )= TRUE ) \heuristics (simplify ) };defined in: reachRules.key Line: 405 Offset :4

reach_does_not_depend_on_fresh_locs_EQ

reach_does_not_depend_on_fresh_locs_EQ { \schemaVar \term Heap h , h2 ; \schemaVar \term LocSet s ; \schemaVar \term Object o , o2 ; \schemaVar \term int n ; \schemaVar \term Heap EQ ; \assumes ( anon ( h , empty , h2 )= EQ ==> o = null ) \find ( reach ( EQ , s , o , o2 , n )) \replacewith ( reach ( h , s , o , o2 , n )); \add ( ==> wellFormed ( h )& boolean :: select ( h , o , java.lang.Object :: )= TRUE ) \heuristics (simplify ) };defined in: reachRules.key Line: 420 Offset :4