OneOp Stack Operations #
Equivalence proofs for opcodes that perform operations on the elements of the stack.
The opcodes on this file are summarized on the KEVM side with only one operation.
- div : stackOps_op
- sdiv : stackOps_op
- mod : stackOps_op
- smod : stackOps_op
- signext : stackOps_op
- slt : stackOps_op
- sgt : stackOps_op
- and : stackOps_op
- xor : stackOps_op
- not : stackOps_op
- byte_op : stackOps_op
- shl : stackOps_op
- shr : stackOps_op
- sar : stackOps_op
Instances For
Equations
- OneOpEquivalence.stackOps_op.div.to_binop = Sum.inl SortBinStackOp.DIV_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.sdiv.to_binop = Sum.inl SortBinStackOp.SDIV_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.mod.to_binop = Sum.inl SortBinStackOp.MOD_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.smod.to_binop = Sum.inl SortBinStackOp.SMOD_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.signext.to_binop = Sum.inl SortBinStackOp.SIGNEXTEND_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.slt.to_binop = Sum.inl SortBinStackOp.SLT_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.sgt.to_binop = Sum.inl SortBinStackOp.SGT_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.and.to_binop = Sum.inl SortBinStackOp.AND_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.xor.to_binop = Sum.inl SortBinStackOp.XOR_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.not.to_binop = Sum.inr SortUnStackOp.NOT_EVM_UnStackOp
- OneOpEquivalence.stackOps_op.byte_op.to_binop = Sum.inl SortBinStackOp.BYTE_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.shl.to_binop = Sum.inl SortBinStackOp.SHL_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.shr.to_binop = Sum.inl SortBinStackOp.SHR_EVM_BinStackOp
- OneOpEquivalence.stackOps_op.sar.to_binop = Sum.inl SortBinStackOp.SAR_EVM_BinStackOp
Instances For
Instances For
Equations
- OneOpEquivalence.stackOps_op.div.from_k = StackOpsSummary.stackOps_op.div
- OneOpEquivalence.stackOps_op.sdiv.from_k = StackOpsSummary.stackOps_op.sdiv
- OneOpEquivalence.stackOps_op.mod.from_k = StackOpsSummary.stackOps_op.mod
- OneOpEquivalence.stackOps_op.smod.from_k = StackOpsSummary.stackOps_op.smod
- OneOpEquivalence.stackOps_op.signext.from_k = StackOpsSummary.stackOps_op.signextend
- OneOpEquivalence.stackOps_op.slt.from_k = StackOpsSummary.stackOps_op.slt
- OneOpEquivalence.stackOps_op.sgt.from_k = StackOpsSummary.stackOps_op.sgt
- OneOpEquivalence.stackOps_op.and.from_k = StackOpsSummary.stackOps_op.and
- OneOpEquivalence.stackOps_op.xor.from_k = StackOpsSummary.stackOps_op.xor
- OneOpEquivalence.stackOps_op.not.from_k = StackOpsSummary.stackOps_op.not
- OneOpEquivalence.stackOps_op.byte_op.from_k = StackOpsSummary.stackOps_op.byte
- OneOpEquivalence.stackOps_op.shl.from_k = StackOpsSummary.stackOps_op.shl
- OneOpEquivalence.stackOps_op.shr.from_k = StackOpsSummary.stackOps_op.shr
- OneOpEquivalence.stackOps_op.sar.from_k = StackOpsSummary.stackOps_op.sar
Instances For
def
OneOpEquivalence.stackOps_op.to_stack
(op : stackOps_op)
(W0 W1 : SortInt)
(WS : SortWordStack)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
OneOpEquivalence.oneOpLHS
(op : stackOps_op)
{GAS_CELL PC_CELL W0 W1 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{USEGAS_CELL : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
OneOpEquivalence.oneOpRHS
{_Val3 _Val4 _Val5 _Val6 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{_Val1 _Val2 : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- OneOpEquivalence.stackOps_op.div.to_defn_Val3 W0 W1 _Val3 = («_/Word__EVM-TYPES_Int_Int_Int» W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.sdiv.to_defn_Val3 W0 W1 _Val3 = («_/sWord__EVM-TYPES_Int_Int_Int» W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.mod.to_defn_Val3 W0 W1 _Val3 = («_%Word__EVM-TYPES_Int_Int_Int» W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.smod.to_defn_Val3 W0 W1 _Val3 = («_%sWord__EVM-TYPES_Int_Int_Int» W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.signext.to_defn_Val3 W0 W1 _Val3 = (signextend W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.slt.to_defn_Val3 W0 W1 _Val3 = («_s<Word__EVM-TYPES_Int_Int_Int» W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.sgt.to_defn_Val3 W0 W1 _Val3 = («_s<Word__EVM-TYPES_Int_Int_Int» W1 W0 = some _Val3)
- OneOpEquivalence.stackOps_op.and.to_defn_Val3 W0 W1 _Val3 = («_&Int_» W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.xor.to_defn_Val3 W0 W1 _Val3 = (_xorInt_ W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.not.to_defn_Val3 W0 W1 _Val3 = (_xorInt_ W0 115792089237316195423570985008687907853269984665640564039457584007913129639935 = some _Val3)
- OneOpEquivalence.stackOps_op.byte_op.to_defn_Val3 W0 W1 _Val3 = (byte W0 W1 = some _Val3)
- OneOpEquivalence.stackOps_op.shl.to_defn_Val3 W0 W1 _Val3 = («_<<Word__EVM-TYPES_Int_Int_Int» W1 W0 = some _Val3)
- OneOpEquivalence.stackOps_op.shr.to_defn_Val3 W0 W1 _Val3 = («_>>Word__EVM-TYPES_Int_Int_Int» W1 W0 = some _Val3)
- OneOpEquivalence.stackOps_op.sar.to_defn_Val3 W0 W1 _Val3 = («_>>sWord__EVM-TYPES_Int_Int_Int» W1 W0 = some _Val3)
Instances For
Equations
- OneOpEquivalence.stackOps_op.div.to_gas = SortScheduleConst.Glow_SCHEDULE_ScheduleConst
- OneOpEquivalence.stackOps_op.sdiv.to_gas = SortScheduleConst.Glow_SCHEDULE_ScheduleConst
- OneOpEquivalence.stackOps_op.mod.to_gas = SortScheduleConst.Glow_SCHEDULE_ScheduleConst
- OneOpEquivalence.stackOps_op.smod.to_gas = SortScheduleConst.Glow_SCHEDULE_ScheduleConst
- OneOpEquivalence.stackOps_op.signext.to_gas = SortScheduleConst.Glow_SCHEDULE_ScheduleConst
- x✝.to_gas = SortScheduleConst.Gverylow_SCHEDULE_ScheduleConst
Instances For
theorem
OneOpEquivalence.rw_oneOpLHS_oneOpRHS
(op : stackOps_op)
{GAS_CELL PC_CELL W0 W1 _Val0 _Val3 _Val4 _Val5 _Val6 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{USEGAS_CELL _Val1 _Val2 : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
(defn_Val0 : «_<_>_SCHEDULE_Int_ScheduleConst_Schedule» op.to_gas SCHEDULE_CELL = some _Val0)
(defn_Val1 : «_<=Int_» _Val0 GAS_CELL = some _Val1)
(defn_Val2 : _andBool_ USEGAS_CELL _Val1 = some _Val2)
(defn_Val3 : op.to_defn_Val3 W0 W1 _Val3)
(defn_Val4 : «_+Int_» PC_CELL 1 = some _Val4)
(defn_Val5 : «_<_>_SCHEDULE_Int_ScheduleConst_Schedule» op.to_gas SCHEDULE_CELL = some _Val5)
(defn_Val6 : «_-Int_» GAS_CELL _Val5 = some _Val6)
(req : _Val2 = true)
:
theorem
OneOpEquivalence.oneOp_prestate_equiv
(op : stackOps_op)
{GAS_CELL PC_CELL W0 W1 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{USEGAS_CELL : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
(symState : EvmYul.EVM.State)
:
let lhs := oneOpLHS op;
StateMap.stateMap symState lhs = { accountMap := Axioms.SortAccountsCellMap lhs.accounts, σ₀ := symState.σ₀,
totalGasUsedInBlock := symState.totalGasUsedInBlock, transactionReceipts := symState.transactionReceipts,
substate :=
let __src := symState.substate;
{ selfDestructSet := __src.selfDestructSet, touchedAccounts := __src.touchedAccounts,
refundBalance := StateMap.intMap _Gen17.refund.val, accessedAccounts := __src.accessedAccounts,
accessedStorageKeys := Axioms.SortAccessedStorageCellMap lhs.accessedStorage, logSeries := __src.logSeries },
executionEnv := StateMap.executionEnv_map lhs symState, blocks := symState.blocks,
genesisBlockHeader := symState.genesisBlockHeader, createdAccounts := symState.createdAccounts,
gasAvailable := StateMap.intMap GAS_CELL, activeWords := StateMap.intMap lhs.memoryUsed.val,
memory := StateMap.memory_map lhs.memory, returnData := _Gen11.val, H_return := symState.H_return,
pc := StateMap.intMap PC_CELL,
stack := op.from_k.stack (StateMap.intMap W0) (StateMap.intMap W1) default (StateMap.wordStackMap WS),
execLength := symState.execLength }
Equations
- OneOpEquivalence.stackOps_op.div.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.sdiv.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.mod.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.smod.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.signext.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.slt.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.sgt.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.and.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.xor.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.not.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.byte_op.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.shl.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.shr.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
- OneOpEquivalence.stackOps_op.sar.do = fun (x1 x2 : SortInt) => OneOpEquivalence.divWord x1 x2
Instances For
theorem
OneOpEquivalence.oneOp_poststate_equiv
(op : stackOps_op)
{PC_CELL W0 W1 _Val3 _Val4 _Val5 _Val6 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{_Val1 _Val2 : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
(defn_Val3 : op.to_defn_Val3 W0 W1 _Val3)
(defn_Val4 : «_+Int_» PC_CELL 1 = some _Val4)
(symState : EvmYul.EVM.State)
:
let rhs := oneOpRHS;
StateMap.stateMap symState rhs = { accountMap := Axioms.SortAccountsCellMap rhs.accounts, σ₀ := symState.σ₀,
totalGasUsedInBlock := symState.totalGasUsedInBlock, transactionReceipts := symState.transactionReceipts,
substate :=
let __src := symState.substate;
{ selfDestructSet := __src.selfDestructSet, touchedAccounts := __src.touchedAccounts,
refundBalance := StateMap.intMap _Gen17.refund.val, accessedAccounts := __src.accessedAccounts,
accessedStorageKeys := Axioms.SortAccessedStorageCellMap rhs.accessedStorage, logSeries := __src.logSeries },
executionEnv := StateMap.executionEnv_map rhs symState, blocks := symState.blocks,
genesisBlockHeader := symState.genesisBlockHeader, createdAccounts := symState.createdAccounts,
gasAvailable := StateMap.intMap _Val6, activeWords := StateMap.intMap rhs.memoryUsed.val,
memory := StateMap.memory_map rhs.memory, returnData := _Gen11.val, H_return := symState.H_return,
pc := StateMap.intMap (PC_CELL + 1), stack := StateMap.intMap (op.do W0 W1) :: StateMap.wordStackMap WS,
execLength := symState.execLength }
Equations
- OneOpEquivalence.stackOps_op.div.gas = GasConstants.Glow
- OneOpEquivalence.stackOps_op.sdiv.gas = GasConstants.Glow
- OneOpEquivalence.stackOps_op.mod.gas = GasConstants.Glow
- OneOpEquivalence.stackOps_op.smod.gas = GasConstants.Glow
- OneOpEquivalence.stackOps_op.signext.gas = GasConstants.Glow
- op.gas = GasConstants.Gverylow
Instances For
theorem
OneOpEquivalence.step_oneOp_equiv
(op : stackOps_op)
{GAS_CELL PC_CELL W0 W1 _Val0 _Val3 _Val4 _Val5 _Val6 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{USEGAS_CELL _Val1 _Val2 : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
(defn_Val0 : «_<_>_SCHEDULE_Int_ScheduleConst_Schedule» op.to_gas SCHEDULE_CELL = some _Val0)
(defn_Val1 : «_<=Int_» _Val0 GAS_CELL = some _Val1)
(defn_Val2 : _andBool_ USEGAS_CELL _Val1 = some _Val2)
(defn_Val3 : op.to_defn_Val3 W0 W1 _Val3)
(defn_Val4 : «_+Int_» PC_CELL 1 = some _Val4)
(defn_Val5 : «_<_>_SCHEDULE_Int_ScheduleConst_Schedule» op.to_gas SCHEDULE_CELL = some _Val5)
(defn_Val6 : «_-Int_» GAS_CELL _Val5 = some _Val6)
(req : _Val2 = true)
(symState : EvmYul.EVM.State)
(gas gasCost : ℕ)
(cancun : SCHEDULE_CELL = SortSchedule.CANCUN_EVM)
(gasEnough : 0 < gas)
(gavailEnough : ↑op.gas ≤ GAS_CELL)
(gavailSmall : GAS_CELL < ↑EvmYul.UInt256.size)
(gasCostValue : gasCost = op.gas)
(pcountSmall : PC_CELL + 1 < ↑EvmYul.UInt256.size)
(pcountNonneg : 0 ≤ PC_CELL)
(W0ge0 : 0 ≤ W0)
(W1ge0 : 0 ≤ W1)
:
let lhs := oneOpLHS op;
let rhs := oneOpRHS;
StackOpsSummary.EVM.step_stackOps op.from_k gas gasCost (StateMap.stateMap symState lhs) = Except.ok
(StateMap.stateMap
{ toSharedState := symState.toSharedState, pc := symState.pc, stack := symState.stack,
execLength := symState.execLength + 1 }
rhs)
theorem
OneOpEquivalence.X_oneOp_equiv
(op : stackOps_op)
{GAS_CELL PC_CELL W0 W1 _Val0 _Val3 _Val4 _Val5 _Val6 : SortInt}
{SCHEDULE_CELL : SortSchedule}
{USEGAS_CELL _Val1 _Val2 : SortBool}
{WS : SortWordStack}
{_DotVar0 : SortGeneratedCounterCell}
{_DotVar2 : SortNetworkCell}
{_Gen0 : SortProgramCell}
{_Gen1 : SortJumpDestsCell}
{_Gen10 : SortCallDepthCell}
{_Gen11 : SortOutputCell}
{_Gen12 : SortStatusCodeCell}
{_Gen13 : SortCallStackCell}
{_Gen14 : SortInterimStatesCell}
{_Gen15 : SortTouchedAccountsCell}
{_Gen16 : SortVersionedHashesCell}
{_Gen17 : SortSubstateCell}
{_Gen18 : SortGasPriceCell}
{_Gen19 : SortOriginCell}
{_Gen2 : SortIdCell}
{_Gen20 : SortBlockhashesCell}
{_Gen21 : SortBlockCell}
{_Gen22 : SortExitCodeCell}
{_Gen23 : SortModeCell}
{_Gen3 : SortCallerCell}
{_Gen4 : SortCallDataCell}
{_Gen5 : SortCallValueCell}
{_Gen6 : SortLocalMemCell}
{_Gen7 : SortMemoryUsedCell}
{_Gen8 : SortCallGasCell}
{_Gen9 : SortStaticCell}
{_K_CELL : SortK}
(defn_Val0 : «_<_>_SCHEDULE_Int_ScheduleConst_Schedule» op.to_gas SCHEDULE_CELL = some _Val0)
(defn_Val1 : «_<=Int_» _Val0 GAS_CELL = some _Val1)
(defn_Val2 : _andBool_ USEGAS_CELL _Val1 = some _Val2)
(defn_Val3 : op.to_defn_Val3 W0 W1 _Val3)
(defn_Val4 : «_+Int_» PC_CELL 1 = some _Val4)
(defn_Val5 : «_<_>_SCHEDULE_Int_ScheduleConst_Schedule» op.to_gas SCHEDULE_CELL = some _Val5)
(defn_Val6 : «_-Int_» GAS_CELL _Val5 = some _Val6)
(req : _Val2 = true)
(symState : EvmYul.EVM.State)
(symValidJumps : Array EvmYul.UInt256)
(cancun : SCHEDULE_CELL = SortSchedule.CANCUN_EVM)
(codeDiv : _Gen0 = { val := op.from_k.to_bin })
(pcZero : PC_CELL = 0)
(enoughGas : ↑op.gas < GAS_CELL)
(boundedGas : GAS_CELL < ↑EvmYul.UInt256.size)
(W0ge0 : 0 ≤ W0)
(W1ge0 : 0 ≤ W1)
(wordStackOk :
sizeWordStackAux WS 0 < do
let a ← some op.from_k.to_stack_length
pure ↑a)
:
let lhs := oneOpLHS op;
let rhs := oneOpRHS;
EvmYul.EVM.X (StateMap.intMap GAS_CELL).toNat symValidJumps (StateMap.stateMap symState lhs) = Except.ok
(EvmYul.EVM.ExecutionResult.success
(StateMap.stateMap
{ toSharedState := symState.toSharedState, pc := symState.pc, stack := symState.stack,
execLength := symState.execLength + 2 }
rhs)
ByteArray.empty)