bprod.key

Taclets

Enabled under choices: integerSimplificationRules:full

bprod_empty

bprod_empty { \find ( bprod { uSub ; } ( i0 , i1 , t )) \sameUpdateLevel \varcond "Precondition" : \add ( ==> i1 <= i0 ); "Empty Sum" : \replacewith ( 1 ) };defined in: bprod.key Line: 21 Offset :4

bprod_induction_upper

bprod_induction_upper { \find ( bprod { uSub ; } ( i0 , i2 , t )) \varcond \replacewith ( bprod { uSub ; } ( i0 , i2 - 1 , t )* \if ( i0 < i2 )\then ( {\subst uSub ; ( i2 - 1 )} t )\else ( 1 )) };defined in: bprod.key Line: 33 Offset :4

bprod_find

bprod_find { \schemaVar \term int low , high , middle ; \find ( bprod { uSub ; } ( low , high , t )) \varcond \replacewith ( \if ( low <= middle & middle <= high )\then ( bprod { uSub ; } ( low , middle , t )* bprod { uSub ; } ( middle , high , t ))\else ( bprod { uSub ; } ( low , high , t ))) \heuristics (comprehension_split , triggered ) \trigger { middle } bprod { uSub ; } ( low , middle , t )\avoid middle <= low , middle >= high ; };defined in: bprod.key Line: 41 Offset :4

bprod_commutative_associative

bprod_commutative_associative { \find ( bprod { uSub ; } ( i0 , i2 , t * t2 )) \varcond \replacewith ( bprod { uSub ; } ( i0 , i2 , t )* bprod { uSub1 ; } ( i0 , i2 , {\subst uSub ; uSub1 } t2 )) };defined in: bprod.key Line: 59 Offset :4

bprod_induction_upper_concrete

bprod_induction_upper_concrete { \find ( bprod { uSub ; } ( i0 , 1 + i2 , t )) \varcond \replacewith ( bprod { uSub ; } ( i0 , i2 , t )* \if ( i0 <= i2 )\then ( {\subst uSub ; ( i2 )} t )\else ( 1 )) \heuristics (simplify ) };defined in: bprod.key Line: 71 Offset :4

bprod_induction_lower

bprod_induction_lower { \find ( bprod { uSub ; } ( i0 , i2 , t )) \varcond \replacewith ( bprod { uSub ; } ( i0 + 1 , i2 , t )* \if ( i0 < i2 )\then ( {\subst uSub ; ( i0 )} t )\else ( 1 )) };defined in: bprod.key Line: 80 Offset :4

bprod_induction_lower_concrete

bprod_induction_lower_concrete { \find ( bprod { uSub ; } ( - 1 + i0 , i2 , t )) \varcond \replacewith ( bprod { uSub ; } ( i0 , i2 , t )* \if ( - 1 + i0 < i2 )\then ( {\subst uSub ; ( - 1 + i0 )} t )\else ( 1 )) \heuristics (simplify ) };defined in: bprod.key Line: 88 Offset :4

bprod_shift_index

bprod_shift_index { \find ( bprod { uSub ; } ( i0 , i1 , t )) \varcond \replacewith ( bprod { uSub1 ; } ( 0 , i1 - i0 , {\subst uSub ; uSub1 + i0 } t )) };defined in: bprod.key Line: 98 Offset :4

bprod_equal_zero_right

bprod_equal_zero_right { \find ( ==> bprod { uSub ; } ( i0 , i2 , t )= 0 ) \varcond \add ( ==> \exists uSub ; {\subst uSub ; uSub } ( uSub >= i0 & uSub < i2 & t = 0 )) \heuristics (comprehensions ) };defined in: bprod.key Line: 110 Offset :4

bprod_equal_one_right

bprod_equal_one_right { \find ( ==> bprod { uSub ; } ( i0 , i2 , t )= 1 ) \varcond \add ( ==> \forall uSub ; {\subst uSub ; uSub } ( uSub >= i0 & uSub < i2 -> t = 1 )) \heuristics (comprehensions ) };defined in: bprod.key Line: 118 Offset :4

bprod_one_factor

bprod_one_factor { \find ( bprod { uSub ; } ( i0 , i1 , t )) \sameUpdateLevel \varcond \replacewith ( \if ( i0 + 1 = i1 )\then ( {\subst uSub ; i0 } t )\else ( bprod { uSub ; } ( i0 , i1 , t ))) };defined in: bprod.key Line: 127 Offset :4

bprod_one_factor_concrete1

bprod_one_factor_concrete1 { \find ( bprod { uSub ; } ( i0 , 1 + i0 , t )) \sameUpdateLevel \varcond \replacewith ( {\subst uSub ; i0 } t ) \heuristics (concrete ) };defined in: bprod.key Line: 137 Offset :4

bprod_one_factor_concrete2

bprod_one_factor_concrete2 { \find ( bprod { uSub ; } ( - 1 + i0 , i0 , t )) \sameUpdateLevel \varcond \replacewith ( {\subst uSub ; - 1 + i0 } t ) \heuristics (concrete ) };defined in: bprod.key Line: 146 Offset :4

bprod_zero

bprod_zero { \find ( bprod { uSub ; } ( i0 , i1 , 0 )) \varcond \replacewith ( \if ( i0 < i1 )\then ( 0 )\else ( 1 )) \heuristics (simplify ) };defined in: bprod.key Line: 155 Offset :4

bprod_one

bprod_one { \find ( bprod { uSub ; } ( i0 , i1 , 1 )) \varcond \replacewith ( 1 ) \heuristics (concrete ) };defined in: bprod.key Line: 164 Offset :4

bprod_lower_equals_upper

bprod_lower_equals_upper { \find ( bprod { uSub ; } ( i0 , i0 , t )) \sameUpdateLevel \varcond \replacewith ( 1 ) \heuristics (concrete ) };defined in: bprod.key Line: 173 Offset :4

equal_bprod1

equal_bprod1 { \find ( ==> bprod { uSub1 ; } ( i0 , i1 , t1 )= bprod { uSub2 ; } ( i0 , i1 , t2 )) \varcond \add ( ==> \forall uSub1 ; ( ( uSub1 >= i0 & uSub1 < i1 )-> t1 = ( {\subst uSub2 ; uSub1 } t2 ))) \heuristics (comprehensions ) \displayname "equal_bprod_same_index" };defined in: bprod.key Line: 181 Offset :4

equal_bprod2

equal_bprod2 { \assumes ( bprod { uSub1 ; } ( i0 , i1 , t1 )= i ==> ) \find ( ==> bprod { uSub2 ; } ( i0 , i1 , t2 )= i ) \varcond \add ( ==> \forall uSub1 ; ( ( uSub1 >= i0 & uSub1 < i1 )-> t1 = ( {\subst uSub2 ; uSub1 } t2 ))) \heuristics (comprehensions ) \displayname "equal_bprod_same_index" };defined in: bprod.key Line: 196 Offset :4

equal_bprod3

equal_bprod3 { \assumes ( bprod { uSub1 ; } ( i0 , i1 , t1 )= i , bprod { uSub2 ; } ( i0 , i1 , t2 )= j ==> ) \find ( ==> j = i ) \varcond \add ( ==> \forall uSub1 ; ( ( uSub1 >= i0 & uSub1 < i1 )-> t1 = ( {\subst uSub2 ; uSub1 } t2 ))) \heuristics (comprehensions ) \displayname "equal_bprod_same_index" };defined in: bprod.key Line: 212 Offset :4

equal_bprod5

equal_bprod5 { \find ( ==> bprod { uSub1 ; } ( i0 , i1 , t1 )= bprod { uSub2 ; } ( i2 , i3 , t2 )) \varcond "Equal length" : \add ( ==> i1 - i0 = i3 - i2 ); "Equal elements" : \add ( ==> \forall uSub1 ; ( ( uSub1 >= i0 & uSub1 < i1 )-> t1 = ( {\subst uSub2 ; uSub1 + i2 - i0 } t2 ))) \heuristics (comprehensions_high_costs ) \displayname "equal_bprod" };defined in: bprod.key Line: 228 Offset :4

bprod_invert_index

bprod_invert_index { \find ( bprod { uSub ; } ( i0 , i1 , t )) \varcond \replacewith ( bprod { uSub1 ; } ( - i1 , - i0 , {\subst uSub ; - uSub1 } t )) };defined in: bprod.key Line: 249 Offset :4

bprod_invert_index_concrete

bprod_invert_index_concrete { \find ( bprod { uSub ; } ( i0 * - 1 , i1 * - 1 , t )) \varcond \replacewith ( bprod { uSub1 ; } ( i1 , i0 , {\subst uSub ; - uSub1 } t )) \heuristics (simplify ) };defined in: bprod.key Line: 256 Offset :4

Taclets

Enabled under choices: integerSimplificationRules:fullsequences:on

equal_bprod_perm1

equal_bprod_perm1 { \find ( ==> bprod { uSub1 ; } ( i0 , i1 , t1 )= bprod { uSub2 ; } ( i2 , i3 , t2 )) \varcond \add ( ==> seqPerm ( seqDef { uSub1 ; } ( i0 , i1 , t1 ), seqDef { uSub2 ; } ( i2 , i3 , t2 ))) \displayname "equal_bprod_perm" };defined in: bprod.key Line: 267 Offset :4

equal_bprod_perm2

equal_bprod_perm2 { \assumes ( bprod { uSub2 ; } ( i2 , i3 , t2 )= t ==> ) \find ( ==> bprod { uSub1 ; } ( i0 , i1 , t1 )= t ) \varcond \add ( ==> seqPerm ( seqDef { uSub1 ; } ( i0 , i1 , t1 ), seqDef { uSub2 ; } ( i2 , i3 , t2 ))) \displayname "equal_bprod_perm" };defined in: bprod.key Line: 284 Offset :4

bprod_all_positive

\lemma bprod_all_positive { \find ( bprod { uSub ; } ( i0 , i1 , t1 )) \varcond \add ( \forall uSub ; ( ( i0 <= uSub & uSub < i1 )-> t1 >= 0 )-> bprod { uSub ; } ( i0 , i1 , t1 )>= 0 ==> ) };defined in: bprod.key Line: 303 Offset :4

bprod_split

\lemma bprod_split { \schemaVar \term int middle ; \find ( bprod { uSub ; } ( i0 , i1 , t1 )) \varcond \replacewith ( \if ( i0 <= middle & middle <= i1 )\then ( bprod { uSub ; } ( i0 , middle , t1 )* bprod { uSub ; } ( middle , i1 , t1 ))\else ( bprod { uSub ; } ( i0 , i1 , t1 ))) };defined in: bprod.key Line: 311 Offset :4

Taclets

Enabled under choices: integerSimplificationRules:full

prod_empty

prod_empty { \schemaVar \variables alpha x ; \find ( prod { x ; } ( FALSE , t )) \replacewith ( 1 ) \heuristics (concrete ) };defined in: bprod.key Line: 329 Offset :4

prod_one

prod_one { \schemaVar \variables alpha x ; \schemaVar \term boolean range ; \find ( prod { x ; } ( range , 1 )) \replacewith ( 1 ) \heuristics (concrete ) };defined in: bprod.key Line: 336 Offset :4