seqPerm.key

Taclets

Enabled under choices: sequences:onmoreSeqRules:on

seqNPermDefReplace

seqNPermDefReplace { \schemaVar \term Seq s1 ; \schemaVar \variables int iv , jv ; \find ( seqNPerm ( s1 )) \varcond \replacewith ( ( \forall iv ; ( 0 <= iv & iv < seqLen ( s1 )-> \exists jv ; ( 0 <= jv & jv < seqLen ( s1 )& any :: seqGet ( s1 , jv )= iv )))) };defined in: seqPerm.key Line: 32 Offset :4

seqNPermDefLeft

seqNPermDefLeft { \schemaVar \term Seq s1 ; \schemaVar \variables int iv , jv ; \find ( seqNPerm ( s1 )==> ) \varcond \add ( ( \forall iv ; ( 0 <= iv & iv < seqLen ( s1 )-> \exists jv ; ( 0 <= jv & jv < seqLen ( s1 )& any :: seqGet ( s1 , jv )= iv )))==> ) };defined in: seqPerm.key Line: 44 Offset :4

seqPermDefLeft

seqPermDefLeft { \schemaVar \term Seq s1 , s2 , s3 ; \schemaVar \variables int iv ; \schemaVar \variables Seq s ; \find ( seqPerm ( s1 , s2 )==> ) \varcond \add ( seqLen ( s1 )= seqLen ( s2 )& ( \exists s ; ( seqLen ( s )= seqLen ( s1 )& seqNPerm ( s )& ( \forall iv ; ( 0 <= iv & iv < seqLen ( s )-> any :: seqGet ( s1 , iv )= any :: seqGet ( s2 , int :: seqGet ( s , iv ))))))==> ) };defined in: seqPerm.key Line: 56 Offset :4

seqPermDef

seqPermDef { \schemaVar \term Seq s1 , s2 , s3 ; \schemaVar \variables int iv ; \schemaVar \variables Seq s ; \find ( seqPerm ( s1 , s2 )) \varcond \replacewith ( seqLen ( s1 )= seqLen ( s2 )& ( \exists s ; ( seqLen ( s )= seqLen ( s1 )& seqNPerm ( s )& ( \forall iv ; ( 0 <= iv & iv < seqLen ( s )-> any :: seqGet ( s1 , iv )= any :: seqGet ( s2 , int :: seqGet ( s , iv ))))))) };defined in: seqPerm.key Line: 75 Offset :4

defOfSeqSwap

defOfSeqSwap { \schemaVar \term Seq s ; \schemaVar \term int iv , jv ; \schemaVar \variables int uSub ; \find ( seqSwap ( s , iv , jv )) \varcond \replacewith ( seqDef { uSub ; } ( 0 , seqLen ( s ), \if ( ! ( 0 <= iv & 0 <= jv & iv < seqLen ( s )& jv < seqLen ( s )))\then ( any :: seqGet ( s , uSub ))\else ( \if ( uSub = iv )\then ( any :: seqGet ( s , jv ))\else ( \if ( uSub = jv )\then ( any :: seqGet ( s , iv ))\else ( any :: seqGet ( s , uSub )))))) };defined in: seqPerm.key Line: 94 Offset :4

defOfSeqRemove

defOfSeqRemove { \schemaVar \term Seq s ; \schemaVar \term int iv ; \schemaVar \variables int uSub ; \find ( seqRemove ( s , iv )) \varcond \replacewith ( \if ( iv < 0 | seqLen ( s )<= iv )\then ( s )\else ( seqDef { uSub ; } ( 0 , seqLen ( s )- 1 , \if ( uSub < iv )\then ( any :: seqGet ( s , uSub ))\else ( any :: seqGet ( s , uSub + 1 ))))) };defined in: seqPerm.key Line: 115 Offset :4

defOfSeqNPermInv

defOfSeqNPermInv { \schemaVar \term Seq s ; \schemaVar \variables int uSub ; \find ( seqNPermInv ( s )) \varcond \replacewith ( seqDef { uSub ; } ( 0 , seqLen ( s ), seqIndexOf ( s , uSub ))) };defined in: seqPerm.key Line: 138 Offset :4

lenOfNPermInv

lenOfNPermInv { \schemaVar \term Seq s1 ; \find ( seqLen ( seqNPermInv ( s1 ))) \replacewith ( seqLen ( s1 )) \heuristics (simplify ) };defined in: seqPerm.key Line: 156 Offset :4

getAnyOfNPermInv

\lemma getAnyOfNPermInv { \schemaVar \term Seq s1 ; \schemaVar \term int i3 ; \find ( any :: seqGet ( seqNPermInv ( s1 ), i3 )) \replacewith ( int :: seqGet ( seqNPermInv ( s1 ), i3 )); \add ( ==> 0 <= i3 & i3 < seqLen ( s1 )) \heuristics (simplify ) };defined in: seqPerm.key Line: 164 Offset :4

getOfNPermInv

getOfNPermInv { \schemaVar \term Seq s1 ; \schemaVar \term int i3 ; \schemaVar \skolemTerm int jsk ; \find ( int :: seqGet ( seqNPermInv ( s1 ), i3 )) \varcond \replacewith ( jsk ) \add ( int :: seqGet ( s1 , jsk )= i3 & 0 <= jsk & jsk < seqLen ( s1 )==> ); \add ( ==> 0 <= i3 & i3 < seqLen ( s1 )& seqNPerm ( s1 )) \heuristics (simplify ) };defined in: seqPerm.key Line: 175 Offset :4

lenOfSwap

lenOfSwap { \schemaVar \term Seq s1 ; \schemaVar \term int iv1 , iv2 ; \find ( seqLen ( seqSwap ( s1 , iv1 , iv2 ))) \replacewith ( seqLen ( s1 )) \heuristics (simplify ) };defined in: seqPerm.key Line: 189 Offset :4

getOfSwap

getOfSwap { \schemaVar \term Object o ; \schemaVar \term Seq s1 ; \schemaVar \term int iv , jv , idx ; \schemaVar \term Heap h ; \find ( alpha :: seqGet ( seqSwap ( s1 , iv , jv ), idx )) \replacewith ( \if ( ! ( 0 <= iv & 0 <= jv & iv < seqLen ( s1 )& jv < seqLen ( s1 )))\then ( alpha :: seqGet ( s1 , idx ))\else ( \if ( idx = iv )\then ( alpha :: seqGet ( s1 , jv ))\else ( \if ( idx = jv )\then ( alpha :: seqGet ( s1 , iv ))\else ( alpha :: seqGet ( s1 , idx ))))) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 198 Offset :4

lenOfRemove

lenOfRemove { \schemaVar \term Seq s1 ; \schemaVar \term int iv1 ; \find ( seqLen ( seqRemove ( s1 , iv1 ))) \replacewith ( \if ( 0 <= iv1 & iv1 < seqLen ( s1 ))\then ( seqLen ( s1 )- 1 )\else ( seqLen ( s1 ))) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 219 Offset :4

getOfRemoveAny

getOfRemoveAny { \schemaVar \term Seq s1 ; \schemaVar \term int i3 , i2 ; \find ( alpha :: seqGet ( seqRemove ( s1 , i2 ), i3 )) \replacewith ( \if ( i2 < 0 | seqLen ( s1 )<= i2 )\then ( alpha :: seqGet ( s1 , i3 ))\else ( \if ( i3 < i2 )\then ( alpha :: seqGet ( s1 , i3 ))\else ( \if ( i2 <= i3 & i3 < seqLen ( s1 )- 1 )\then ( alpha :: seqGet ( s1 , i3 + 1 ))\else ( (alpha ) seqGetOutside )))) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 235 Offset :4

getOfRemoveInt

getOfRemoveInt { \schemaVar \term Seq s1 ; \schemaVar \term int i3 , i2 ; \find ( int :: seqGet ( seqRemove ( s1 , i2 ), i3 )) \replacewith ( \if ( i2 < 0 | seqLen ( s1 )<= i2 )\then ( int :: seqGet ( s1 , i3 ))\else ( \if ( i3 < i2 )\then ( int :: seqGet ( s1 , i3 ))\else ( \if ( i2 <= i3 & i3 < seqLen ( s1 )- 1 )\then ( int :: seqGet ( s1 , i3 + 1 ))\else ( (int ) seqGetOutside )))) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 251 Offset :4

lenOfRemoveConcrete1

lenOfRemoveConcrete1 { \schemaVar \term Seq s1 ; \assumes ( seqLen ( s1 )>= 1 ==> ) \find ( seqLen ( seqRemove ( s1 , seqLen ( s1 )- 1 ))) \replacewith ( seqLen ( s1 )- 1 ) \heuristics (simplify ) };defined in: seqPerm.key Line: 267 Offset :4

lenOfRemoveConcrete2

lenOfRemoveConcrete2 { \schemaVar \term Seq s1 ; \assumes ( seqLen ( s1 )>= 1 ==> ) \find ( seqLen ( seqRemove ( s1 , 0 ))) \replacewith ( seqLen ( s1 )- 1 ) \heuristics (simplify ) };defined in: seqPerm.key Line: 277 Offset :4

getOfRemoveAnyConcrete1

getOfRemoveAnyConcrete1 { \schemaVar \term Seq s1 ; \schemaVar \term int i3 , i2 ; \assumes ( seqLen ( s1 )>= 1 ==> ) \find ( alpha :: seqGet ( seqRemove ( s1 , seqLen ( s1 )- 1 ), i3 )) \replacewith ( \if ( i3 < seqLen ( s1 )- 1 )\then ( alpha :: seqGet ( s1 , i3 ))\else ( (alpha ) seqGetOutside )) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 290 Offset :4

getOfRemoveAnyConcrete2

getOfRemoveAnyConcrete2 { \schemaVar \term Seq s1 ; \schemaVar \term int i3 , i2 ; \assumes ( seqLen ( s1 )>= 1 ==> ) \find ( alpha :: seqGet ( seqRemove ( s1 , 0 ), i3 )) \replacewith ( \if ( 0 <= i3 & i3 < seqLen ( s1 )- 1 )\then ( alpha :: seqGet ( s1 , i3 + 1 ))\else ( (alpha ) seqGetOutside )) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 305 Offset :4

seqNPermRange

\lemma seqNPermRange { \schemaVar \term Seq s ; \schemaVar \variables int iv ; \find ( seqNPerm ( s )==> ) \varcond \add ( \forall iv ; ( ( 0 <= iv & iv < seqLen ( s ))-> ( 0 <= int :: seqGet ( s , iv )& int :: seqGet ( s , iv )< seqLen ( s )& int :: instance ( any :: seqGet ( s , iv ))= TRUE ))==> ) };defined in: seqPerm.key Line: 339 Offset :4

seqNPermInjective

seqNPermInjective { \schemaVar \term Seq s ; \schemaVar \variables int iv , jv ; \find ( seqNPerm ( s )==> ) \varcond \add ( \forall iv ; ( \forall jv ; ( ( 0 <= iv & iv < seqLen ( s )& 0 <= jv & jv < seqLen ( s )& int :: seqGet ( s , iv )= int :: seqGet ( s , jv ))-> iv = jv ))==> ) };defined in: seqPerm.key Line: 358 Offset :4

seqPermTrans

\lemma seqPermTrans { \schemaVar \term Seq s1 , s2 , s3 ; \assumes ( seqPerm ( s2 , s3 )==> ) \find ( seqPerm ( s1 , s2 )==> ) \add ( seqPerm ( s1 , s3 )==> ) };defined in: seqPerm.key Line: 372 Offset :4

seqPermRefl

\lemma seqPermRefl { \schemaVar \term Seq s ; \find ( seqPerm ( s , s )) \replacewith ( true ) \heuristics (concrete ) };defined in: seqPerm.key Line: 382 Offset :4

seqPermEmpty1

seqPermEmpty1 { \schemaVar \term Seq s ; \find ( seqPerm ( seqEmpty , s )) \replacewith ( seqEmpty = s ) \heuristics (simplify ) \displayname "seqPermEmpty" };defined in: seqPerm.key Line: 390 Offset :4

seqPermEmpty2

seqPermEmpty2 { \schemaVar \term Seq s ; \find ( seqPerm ( s , seqEmpty )) \replacewith ( seqEmpty = s ) \heuristics (simplify ) \displayname "seqPermEmpty" };defined in: seqPerm.key Line: 398 Offset :4

seqNPermSwapNPerm

seqNPermSwapNPerm { \schemaVar \term Seq s1 ; \schemaVar \variables int iv , jv ; \find ( seqNPerm ( s1 )==> ) \varcond \add ( \forall iv ; ( \forall jv ; ( ( 0 <= iv & 0 <= jv & iv < seqLen ( s1 )& jv < seqLen ( s1 ))-> seqNPerm ( seqSwap ( s1 , iv , jv ))))==> ) };defined in: seqPerm.key Line: 406 Offset :4

seqNPermEmpty

seqNPermEmpty { \find ( seqNPerm ( seqEmpty )) \replacewith ( true ) \heuristics (concrete ) };defined in: seqPerm.key Line: 420 Offset :4

seqNPermSingletonConrete

seqNPermSingletonConrete { \find ( seqNPerm ( seqSingleton ( 0 ))) \replacewith ( true ) \heuristics (concrete ) };defined in: seqPerm.key Line: 427 Offset :4

seqNPermSingleton

seqNPermSingleton { \schemaVar \term int si ; \find ( seqNPerm ( seqSingleton ( si ))) \replacewith ( si = 0 ) \heuristics (simplify ) };defined in: seqPerm.key Line: 434 Offset :4

seqNPermComp

seqNPermComp { \schemaVar \term Seq s1 , s2 ; \schemaVar \variables int u ; \assumes ( seqNPerm ( s2 )& seqLen ( s1 )= seqLen ( s2 )==> ) \find ( seqNPerm ( s1 )==> ) \varcond \add ( seqNPerm ( seqDef { u ; } ( 0 , seqLen ( s1 ), int :: seqGet ( s1 , int :: seqGet ( s2 , u ))))==> ) };defined in: seqPerm.key Line: 441 Offset :4

seqGetSInvS

seqGetSInvS { \schemaVar \term Seq s ; \schemaVar \term int t ; \find ( int :: seqGet ( s , int :: seqGet ( seqNPermInv ( s ), t ))) \replacewith ( t ); \add ( ==> seqNPerm ( s )& 0 <= t & t < seqLen ( s )) };defined in: seqPerm.key Line: 453 Offset :4

seqNPermInvNPermLeft

seqNPermInvNPermLeft { \schemaVar \term Seq s1 ; \find ( seqNPerm ( s1 )==> ) \add ( seqNPerm ( seqNPermInv ( s1 ))==> ) };defined in: seqPerm.key Line: 465 Offset :4

seqPermSym

seqPermSym { \schemaVar \term Seq s1 , s2 ; \find ( seqPerm ( s1 , s2 )) \replacewith ( seqPerm ( s2 , s1 )) };defined in: seqPerm.key Line: 473 Offset :4

seqNPermInvNPermReplace

seqNPermInvNPermReplace { \schemaVar \term Seq s1 ; \find ( seqNPerm ( seqNPermInv ( s1 ))) \replacewith ( seqNPerm ( s1 )) };defined in: seqPerm.key Line: 479 Offset :4

seqPermConcatFW

seqPermConcatFW { \schemaVar \term Seq s1 , s2 , t1 , t2 ; \assumes ( seqPerm ( s1 , t1 )==> ) \find ( seqPerm ( s2 , t2 )==> ) \add ( seqPerm ( seqConcat ( s1 , s2 ), seqConcat ( t1 , t2 ))==> ) };defined in: seqPerm.key Line: 486 Offset :4

seqPermConcatBW

seqPermConcatBW { \schemaVar \term Seq s1 , s2 , t1 , t2 ; \assumes ( seqPerm ( s1 , t1 )==> ) \find ( ==> seqPerm ( seqConcat ( s1 , s2 ), seqConcat ( t1 , t2 ))) \replacewith ( ==> seqPerm ( s2 , t2 )) \heuristics (simplify ) };defined in: seqPerm.key Line: 494 Offset :4

seqPermSplit

\lemma seqPermSplit { \schemaVar \term Seq s1 , s2 , t1 , t2 ; \find ( ==> seqPerm ( seqConcat ( s1 , s2 ), seqConcat ( t1 , t2 ))) \replacewith ( ==> seqPerm ( s1 , t1 )& seqPerm ( s2 , t2 )) };defined in: seqPerm.key Line: 504 Offset :4

seqnormalizeDef

seqnormalizeDef { \schemaVar \term Seq s1 ; \schemaVar \term int le , ri ; \schemaVar \term any t ; \schemaVar \variables int u ; \find ( seqDef { u ; } ( le , ri , t )) \varcond \replacewith ( \if ( le < ri )\then ( seqDef { u ; } ( 0 , ( ri - le ), ( {\subst u ; ( u + le )} t )))\else ( seqEmpty )) };defined in: seqPerm.key Line: 511 Offset :4

seqNPermRight

\lemma seqNPermRight { \schemaVar \term Seq s ; \schemaVar \variables int iv , jv ; \find ( ==> seqNPerm ( s )) \varcond \add ( ==> \forall iv ; ( \forall jv ; ( ( 0 <= iv & iv < seqLen ( s )& 0 <= jv & jv < seqLen ( s )& int :: seqGet ( s , iv )= int :: seqGet ( s , jv ))-> iv = jv ))& \forall iv ; ( 0 <= iv & iv < seqLen ( s )-> 0 <= int :: seqGet ( s , iv )& int :: seqGet ( s , iv )< seqLen ( s ))& \forall iv ; ( 0 <= iv & iv < seqLen ( s )-> int :: instance ( any :: seqGet ( s , iv ))= TRUE )) };defined in: seqPerm.key Line: 525 Offset :4

seqPermFromSwap

\lemma seqPermFromSwap { \schemaVar \term Seq s1 , s2 , t1 , t2 ; \schemaVar \variables int iv , jv ; \assumes ( seqPerm ( s1 , t1 )==> ) \find ( ==> seqPerm ( s2 , t2 )) \varcond \replacewith ( ==> t1 = t2 & \exists iv ; \exists jv ; ( 0 <= iv & 0 <= jv & iv < s2 . length & jv < s2 . length & s1 = seqSwap ( s2 , iv , jv ))) };defined in: seqPerm.key Line: 540 Offset :4

seqSwapPreservesSeqPerm

\lemma seqSwapPreservesSeqPerm { \schemaVar \term Seq s ; \schemaVar \term int x ; \schemaVar \term int y ; \find ( ==> seqPerm ( s , seqSwap ( s , x , y ))) \add ( ==> 0 <= x & x < seqLen ( s )& 0 <= y & y < seqLen ( s )) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 561 Offset :4

seqSwapPreservesSeqPermEQ

\lemma seqSwapPreservesSeqPermEQ { \schemaVar \term Seq s ; \schemaVar \term Seq EQ ; \schemaVar \term int x ; \schemaVar \term int y ; \assumes ( seqSwap ( s , x , y )= EQ ==> ) \find ( ==> seqPerm ( s , EQ )) \add ( ==> 0 <= x & x < seqLen ( s )& 0 <= y & y < seqLen ( s )) \heuristics (simplify_enlarging ) };defined in: seqPerm.key Line: 572 Offset :4

seqPermTransAlt0

\lemma seqPermTransAlt0 { \schemaVar \term Seq s1 , s2 , s3 , x , y ; \assumes ( seqPerm ( s2 , s3 )==> seqPerm ( x , y )) \find ( seqPerm ( s1 , s2 )==> ) \add ( seqPerm ( s1 , s3 )==> ) \heuristics (inReachableStateImplication ) \displayname "seqPermTrans" };defined in: seqPerm.key Line: 595 Offset :4

seqPermTransAlt1

\lemma seqPermTransAlt1 { \schemaVar \term Seq a , b , c , x , y ; \assumes ( seqPerm ( a , b )==> seqPerm ( x , y )) \find ( seqPerm ( a , c )==> ) \add ( seqPerm ( b , c )==> ) \heuristics (inReachableStateImplication ) \displayname "seqPermTrans" };defined in: seqPerm.key Line: 606 Offset :4

seqPermTransAlt2

\lemma seqPermTransAlt2 { \schemaVar \term Seq a , b , c , x , y ; \assumes ( seqPerm ( a , c )==> seqPerm ( x , y )) \find ( seqPerm ( b , c )==> ) \add ( seqPerm ( a , b )==> ) \heuristics (inReachableStateImplication ) \displayname "seqPermTrans" };defined in: seqPerm.key Line: 617 Offset :4

seqPermTransAlt3

\lemma seqPermTransAlt3 { \schemaVar \term Seq a , b , c , x , y ; \assumes ( seqPerm ( a , c )==> seqPerm ( x , y )) \find ( seqPerm ( b , a )==> ) \add ( seqPerm ( b , c )==> ) \heuristics (inReachableStateImplication ) \displayname "seqPermTrans" };defined in: seqPerm.key Line: 628 Offset :4

seqPermCountsInt

seqPermCountsInt { \schemaVar \term Seq s1 , s2 ; \schemaVar \variables int iv ; \schemaVar \variables any element ; \find ( seqPerm ( s1 , s2 )) \varcond \replacewith ( ( \forall element ; bsum { iv ; } ( 0 , s1 . length , \if ( any :: seqGet ( s1 , iv )= element )\then ( 1 )\else ( 0 ))= bsum { iv ; } ( 0 , s2 . length , \if ( any :: seqGet ( s2 , iv )= element )\then ( 1 )\else ( 0 )))) };defined in: seqPerm.key Line: 640 Offset :4

seqPermForall

\lemma seqPermForall { \schemaVar \term Seq s1 ; \schemaVar \term Seq s2 ; \schemaVar \formula phi ; \schemaVar \variable int iv ; \schemaVar \variable any x ; \assumes ( seqPerm ( s1 , s2 )==> ) \varcond \add ( \forall iv ; ( 0 <= iv & iv < seqLen ( s1 )-> {\subst x ; any :: seqGet ( s1 , iv )} phi )<-> \forall iv ; ( 0 <= iv & iv < seqLen ( s1 )-> {\subst x ; any :: seqGet ( s2 , iv )} phi )==> ) };defined in: seqPerm.key Line: 660 Offset :4

seqPermExists

\lemma seqPermExists { \schemaVar \term Seq s1 ; \schemaVar \term Seq s2 ; \schemaVar \formula phi ; \schemaVar \variable int iv ; \schemaVar \variable any x ; \assumes ( seqPerm ( s1 , s2 )==> ) \varcond \add ( \exists iv ; ( 0 <= iv & iv < seqLen ( s1 )& {\subst x ; any :: seqGet ( s1 , iv )} phi )<-> \exists iv ; ( 0 <= iv & iv < seqLen ( s1 )& {\subst x ; any :: seqGet ( s2 , iv )} phi )==> ) };defined in: seqPerm.key Line: 674 Offset :4