diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k index 78a037c780..4167371782 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k @@ -36,14 +36,14 @@ module SLOT-UPDATES [symbolic] A |Int #asWord ( B1 +Bytes B2 ) => #asWord ( #buf ( 32 -Int lengthBytes(B2), (A /Int (2 ^Int (8 *Int lengthBytes(B2)))) |Int #asWord ( B1 ) ) +Bytes B2 ) requires #rangeUInt(256, A) andBool A modInt (2 ^Int (8 *Int lengthBytes(B2))) ==Int 0 andBool lengthBytes(B1 +Bytes B2) <=Int 32 - [simplification, preserves-definedness] + [simplification(40), comm, preserves-definedness] // 2b. |Int of +Bytes, update to be done in right rule [bor-update-to-right]: A |Int #asWord ( B1 +Bytes B2 ) => #asWord ( B1 +Bytes #buf ( lengthBytes(B2), A |Int #asWord ( B2 ) ) ) requires 0 <=Int A andBool A #asWord ( #buf ( 32 -Int #getFirstOneBit(X) /Int 8, X /Int ( 2 ^Int ( 8 *Int ( #getFirstOneBit(X) /Int 8 ) ) ) ) +Bytes + #buf ( #getFirstOneBit(X) /Int 8, Y ) ) + requires #rangeUInt(256, X) andBool 0 <=Int #getFirstOneBit(X) + andBool 0 <=Int Y andBool Y #range(B, lengthBytes(B) -Int W, W) requires 0 <=Int W andBool W <=Int 32 andBool W #buf( W -Int ( log2Int(SHIFT) /Int 8 ), X ) +Bytes #buf( log2Int(SHIFT) /Int 8, 0) requires 0 <=Int W andBool W <=Int 32 andBool #isByteShift(SHIFT) andBool 0 <=Int X andBool X #asWord ( #buf ( 32 -Int #getFirstOneBit(X) /Int 8, X /Int ( 2 ^Int ( 8 *Int ( #getFirstOneBit(X) /Int 8 ) ) ) ) +Bytes - #buf ( #getFirstOneBit(X) /Int 8, Y ) ) - requires #rangeUInt(256, X) andBool 0 <=Int #getFirstOneBit(X) - andBool 0 <=Int Y andBool Y