diff --git a/deps/k_release b/deps/k_release index acf79a8b24..72dff9e511 100644 --- a/deps/k_release +++ b/deps/k_release @@ -1 +1 @@ -7.1.149 +7.1.150 diff --git a/flake.lock b/flake.lock index 16007fd653..3e596ddf14 100644 --- a/flake.lock +++ b/flake.lock @@ -352,16 +352,16 @@ ] }, "locked": { - "lastModified": 1726963552, - "narHash": "sha256-01rb87Oc9cDh1MinneK/c96DbdQMVwnym9uYz1gKec4=", + "lastModified": 1727278052, + "narHash": "sha256-wrQ8ljp/BKJmR1PcDe+u9BdRZmKj9uDNGQWCY+AfuqE=", "owner": "runtimeverification", "repo": "k", - "rev": "7e06a35da4f5f757a8373c6cbf83e86f492bc75a", + "rev": "4d030ce509f0e4954a0f3d4f8f607801b652b5b4", "type": "github" }, "original": { "owner": "runtimeverification", - "ref": "v7.1.149", + "ref": "v7.1.150", "repo": "k", "type": "github" } diff --git a/flake.nix b/flake.nix index 3b4735ee0e..9951cc9f1b 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "A flake for the KEVM Semantics"; inputs = { - k-framework.url = "github:runtimeverification/k/v7.1.149"; + k-framework.url = "github:runtimeverification/k/v7.1.150"; nixpkgs.follows = "k-framework/nixpkgs"; flake-utils.follows = "k-framework/flake-utils"; rv-utils.follows = "k-framework/rv-utils"; diff --git a/kevm-pyk/poetry.lock b/kevm-pyk/poetry.lock index 4be255f078..a429be4707 100644 --- a/kevm-pyk/poetry.lock +++ b/kevm-pyk/poetry.lock @@ -505,13 +505,13 @@ colors = ["colorama (>=0.4.6)"] [[package]] name = "kframework" -version = "7.1.149" +version = "7.1.150" description = "" optional = false python-versions = "<4.0,>=3.10" files = [ - {file = "kframework-7.1.149-py3-none-any.whl", hash = "sha256:2999608dd3a62556145c0e59608abde14812289b930fad44854ede3a3101c995"}, - {file = "kframework-7.1.149.tar.gz", hash = "sha256:dff520a7478a02fc9cbb041b379cc8a1a06fb6557bd1dbd1df0fb6f8d9f20f46"}, + {file = "kframework-7.1.150-py3-none-any.whl", hash = "sha256:e31fd668ac7cb7d44d36c4abbacaecee293a056744a8aff5a67ccde5725409ce"}, + {file = "kframework-7.1.150.tar.gz", hash = "sha256:d3bcf827091bdac8ae885c304c327da9779ee6f013d78c764741eebc87fe4729"}, ] [package.dependencies] @@ -1195,4 +1195,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "10464615e397a582a48386b388f76d6a60cce8d03d2b90a0980f5b9b9b66d3fd" +content-hash = "b915c92fb001c650558ead45670f028375d5d681933d9dd408d87430db0a90ec" diff --git a/kevm-pyk/pyproject.toml b/kevm-pyk/pyproject.toml index 5cd130a52a..1b6577f6f5 100644 --- a/kevm-pyk/pyproject.toml +++ b/kevm-pyk/pyproject.toml @@ -13,7 +13,7 @@ authors = [ [tool.poetry.dependencies] python = "^3.10" pathos = "*" -kframework = "7.1.149" +kframework = "7.1.150" tomlkit = "^0.11.6" [tool.poetry.group.dev.dependencies] diff --git a/kevm-pyk/src/kevm_pyk/kevm.py b/kevm-pyk/src/kevm_pyk/kevm.py index 2023cd8db4..bf74746c3f 100644 --- a/kevm-pyk/src/kevm_pyk/kevm.py +++ b/kevm-pyk/src/kevm_pyk/kevm.py @@ -20,13 +20,12 @@ from pyk.kast.manip import abstract_term_safely, flatten_label, set_cell from pyk.kast.pretty import paren from pyk.kcfg.kcfg import Step -from pyk.kcfg.semantics import KCFGSemantics +from pyk.kcfg.semantics import DefaultSemantics from pyk.kcfg.show import NodePrinter from pyk.ktool.kprove import KProve from pyk.ktool.krun import KRun from pyk.prelude.bytes import BYTES, pretty_bytes -from pyk.prelude.kbool import notBool -from pyk.prelude.kint import INT, eqInt, gtInt, intToken, ltInt +from pyk.prelude.kint import INT, gtInt, intToken, ltInt from pyk.prelude.ml import mlEqualsFalse, mlEqualsTrue from pyk.prelude.string import stringToken from pyk.prelude.utils import token @@ -50,7 +49,7 @@ # KEVM class -class KEVMSemantics(KCFGSemantics): +class KEVMSemantics(DefaultSemantics): auto_abstract_gas: bool allow_symbolic_program: bool _cached_subst: Subst | None @@ -98,6 +97,12 @@ def is_terminal(self, cterm: CTerm) -> bool: return False + def is_loop(self, cterm: CTerm) -> bool: + jumpi_pattern = KEVM.jumpi_applied(KVariable('###PCOUNT'), KVariable('###COND')) + pc_next_pattern = KEVM.pc_applied(KEVM.jumpi()) + branch_pattern = KSequence([jumpi_pattern, pc_next_pattern, KEVM.sharp_execute(), KVariable('###CONTINUATION')]) + return branch_pattern.match(cterm.cell('K_CELL')) is not None + def same_loop(self, cterm1: CTerm, cterm2: CTerm) -> bool: # In the same program, at the same calldepth, at the same program counter for cell in ['PC_CELL', 'CALLDEPTH_CELL', 'PROGRAM_CELL']: @@ -116,20 +121,6 @@ def same_loop(self, cterm1: CTerm, cterm2: CTerm) -> bool: return True return False - def extract_branches(self, cterm: CTerm) -> list[KInner]: - k_cell = cterm.cell('K_CELL') - jumpi_pattern = KEVM.jumpi_applied(KVariable('###PCOUNT'), KVariable('###COND')) - pc_next_pattern = KEVM.pc_applied(KEVM.jumpi()) - branch_pattern = KSequence([jumpi_pattern, pc_next_pattern, KEVM.sharp_execute(), KVariable('###CONTINUATION')]) - if subst := branch_pattern.match(k_cell): - cond = subst['###COND'] - if cond_subst := KEVM.bool_2_word(KVariable('###BOOL_2_WORD')).match(cond): - cond = cond_subst['###BOOL_2_WORD'] - else: - cond = eqInt(cond, intToken(0)) - return [mlEqualsTrue(cond), mlEqualsTrue(notBool(cond))] - return [] - def abstract_node(self, cterm: CTerm) -> CTerm: if not self.auto_abstract_gas: return cterm