Skip to content

Commit c69dd40

Browse files
committed
kevm-pyk/{__main__, utils}: macro expansion always on initial state
1 parent c58ac17 commit c69dd40

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

kevm-pyk/src/kevm_pyk/__main__.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from .gst_to_kore import gst_to_kore
2222
from .kevm import KEVM, Foundry
2323
from .solc_to_k import Contract, contract_to_main_module, method_to_cfg, solc_compile
24-
from .utils import KCFG__replace_node, KPrint_make_unparsing, add_include_arg, sanitize_config
24+
from .utils import KCFG__replace_node, KDefinition__expand_macros, KPrint_make_unparsing, add_include_arg
2525

2626
T = TypeVar('T')
2727

@@ -342,15 +342,19 @@ def _write_cfg(_cfg: KCFG, _cfgpath: Path) -> None:
342342
method = [m for m in contract.methods if m.name == method_name][0]
343343
empty_config = foundry.definition.empty_config(GENERATED_TOP_CELL)
344344
cfg = method_to_cfg(empty_config, contract, method)
345+
init_term = cfg.get_unique_init().cterm.kast
346+
target_term = cfg.get_unique_target().cterm.kast
347+
_LOGGER.info(f'Expanding macros in initial state for test: {test}')
348+
init_term = KDefinition__expand_macros(foundry.definition, init_term)
349+
_LOGGER.info(f'Expanding macros in target state for test: {test}')
350+
target_term = KDefinition__expand_macros(foundry.definition, target_term)
345351
if simplify_init:
346352
_LOGGER.info(f'Simplifying initial state for test: {test}')
347-
init_simplified = cfg.get_unique_init().cterm.kast
348-
init_simplified = foundry.simplify(CTerm(init_simplified))
349-
cfg = KCFG__replace_node(cfg, cfg.get_unique_init().id, CTerm(init_simplified))
353+
init_term = foundry.simplify(CTerm(init_term))
350354
_LOGGER.info(f'Simplifying target state for test: {test}')
351-
target_simplified = cfg.get_unique_target().cterm.kast
352-
target_simplified = foundry.simplify(CTerm(target_simplified))
353-
cfg = KCFG__replace_node(cfg, cfg.get_unique_target().id, CTerm(target_simplified))
355+
target_term = foundry.simplify(CTerm(target_term))
356+
cfg = KCFG__replace_node(cfg, cfg.get_unique_init().id, CTerm(init_term))
357+
cfg = KCFG__replace_node(cfg, cfg.get_unique_target().id, CTerm(target_term))
354358
kcfgs[test] = (cfg, kcfg_file)
355359
_write_cfg(cfg, kcfg_file)
356360
else:
@@ -368,7 +372,7 @@ def prove_it(id_and_cfg: Tuple[str, Tuple[KCFG, Path]]) -> bool:
368372
iterations += 1
369373
curr_node = cfg.frontier[0]
370374

371-
if final_subst := foundry.check_implication(curr_node.cterm, target_node.cterm):
375+
if foundry.check_implication(curr_node.cterm, target_node.cterm) is not None:
372376
cfg.create_cover(curr_node.id, target_node.id)
373377
_LOGGER.info(f'Subsumed into target node: {shorten_hashes((curr_node.id, target_node.id))}')
374378
continue
@@ -380,12 +384,13 @@ def prove_it(id_and_cfg: Tuple[str, Tuple[KCFG, Path]]) -> bool:
380384
continue
381385

382386
_LOGGER.info(f'Advancing proof from node {cfgid}: {shorten_hashes(curr_node.id)}')
383-
depth, cterm, next_cterms = foundry.execute(curr_node.cterm, depth=max_depth)
387+
depth, cterm, next_cterms = foundry.execute(curr_node.cterm, depth=max_depth, terminal_rules=['EVM.halt'])
384388
if depth == 0:
385389
_LOGGER.info(f'Found stuck node {cfgid}: {shorten_hashes(curr_node.id)}')
386390
continue
387391

388-
next_state = CTerm(sanitize_config(foundry.definition, cterm.kast))
392+
# next_state = CTerm(sanitize_config(foundry.definition, cterm.kast))
393+
next_state = cterm
389394
next_node = cfg.get_or_create_node(next_state)
390395
_LOGGER.info(
391396
f'Found basic block at depth {depth} for {cfgid}: {shorten_hashes((curr_node.id, next_node.id))}.'

kevm-pyk/src/kevm_pyk/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
from pyk.prelude.ml import mlAnd
2525

2626

27+
def KDefinition__expand_macros(defn: KDefinition, term: KInner) -> KInner: # noqa: N802
28+
return term
29+
30+
2731
def KCFG__replace_node(cfg: KCFG, node_id: str, new_cterm: CTerm) -> KCFG: # noqa: N802
2832

2933
# Remove old node, record data

0 commit comments

Comments
 (0)