Skip to content

Commit 5613abf

Browse files
ehildenbrv-auditoranvacaru
authored
Add kevm section-edge ... command, shorten prune-proof => prune (#2131)
* kevm-pyk/__main__: add kevm section-edge command * kevm-pyk/__main__: kevm prune-proof => kevm prune * kevm-pyk/__main__: add prove args to section-edge * Set Version: 1.0.324 * Set Version: 1.0.325 * Set Version: 1.0.326 * Set Version: 1.0.486 * Set Version: 1.0.487 --------- Co-authored-by: devops <[email protected]> Co-authored-by: Andrei Văcaru <[email protected]>
1 parent de97bf1 commit 5613abf

File tree

4 files changed

+99
-9
lines changed

4 files changed

+99
-9
lines changed

kevm-pyk/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
44

55
[tool.poetry]
66
name = "kevm-pyk"
7-
version = "1.0.486"
7+
version = "1.0.487"
88
description = ""
99
authors = [
1010
"Runtime Verification, Inc. <[email protected]>",

kevm-pyk/src/kevm_pyk/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
from typing import Final
77

88

9-
VERSION: Final = '1.0.486'
9+
VERSION: Final = '1.0.487'

kevm-pyk/src/kevm_pyk/__main__.py

Lines changed: 96 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from .kevm import KEVM, KEVMSemantics, kevm_node_printer
3737
from .kompile import KompileTarget, kevm_kompile
3838
from .utils import (
39+
arg_pair_of,
3940
claim_dependency_dict,
4041
ensure_ksequence_on_k_cell,
4142
get_apr_proof_for_spec,
@@ -478,7 +479,7 @@ def _init_and_run_proof(claim_job: KClaimJob) -> tuple[bool, list[str] | None]:
478479
sys.exit(failed)
479480

480481

481-
def exec_prune_proof(
482+
def exec_prune(
482483
definition_dir: Path,
483484
spec_file: Path,
484485
node: NodeIdLike,
@@ -493,9 +494,8 @@ def exec_prune_proof(
493494
md_selector = 'k'
494495

495496
if save_directory is None:
496-
raise ValueError('Must pass --save-directory to prune-proof!')
497+
raise ValueError('Must pass --save-directory to prune!')
497498

498-
_LOGGER.warning(f'definition_dir: {definition_dir}')
499499
kevm = KEVM(definition_dir, use_directory=save_directory)
500500

501501
include_dirs = [Path(include) for include in includes]
@@ -519,6 +519,75 @@ def exec_prune_proof(
519519
apr_proof.write_proof_data()
520520

521521

522+
def exec_section_edge(
523+
definition_dir: Path,
524+
spec_file: Path,
525+
edge: tuple[str, str],
526+
sections: int = 2,
527+
includes: Iterable[str] = (),
528+
save_directory: Path | None = None,
529+
spec_module: str | None = None,
530+
claim_labels: Iterable[str] | None = None,
531+
exclude_claim_labels: Iterable[str] = (),
532+
smt_timeout: int | None = None,
533+
smt_retry_limit: int | None = None,
534+
kore_rpc_command: str | Iterable[str] | None = None,
535+
trace_rewrites: bool = False,
536+
bug_report: BugReport | None = None,
537+
use_booster: bool = False,
538+
**kwargs: Any,
539+
) -> None:
540+
md_selector = 'k'
541+
542+
if save_directory is None:
543+
raise ValueError('Must pass --save-directory to section-edge!')
544+
545+
if kore_rpc_command is None:
546+
kore_rpc_command = ('kore-rpc-booster',) if use_booster else ('kore-rpc',)
547+
elif isinstance(kore_rpc_command, str):
548+
kore_rpc_command = kore_rpc_command.split()
549+
550+
if smt_timeout is None:
551+
smt_timeout = 300
552+
if smt_retry_limit is None:
553+
smt_retry_limit = 10
554+
555+
kevm = KEVM(definition_dir, use_directory=save_directory)
556+
llvm_definition_dir = definition_dir / 'llvm-library' if use_booster else None
557+
558+
include_dirs = [Path(include) for include in includes]
559+
include_dirs += config.INCLUDE_DIRS
560+
561+
claim = single(
562+
kevm.get_claims(
563+
spec_file,
564+
spec_module_name=spec_module,
565+
include_dirs=include_dirs,
566+
md_selector=md_selector,
567+
claim_labels=claim_labels,
568+
exclude_claim_labels=exclude_claim_labels,
569+
)
570+
)
571+
572+
proof = APRProof.read_proof_data(save_directory, claim.label)
573+
source_id, target_id = edge
574+
with legacy_explore(
575+
kevm,
576+
kcfg_semantics=KEVMSemantics(),
577+
id=proof.id,
578+
bug_report=bug_report,
579+
kore_rpc_command=kore_rpc_command,
580+
smt_timeout=smt_timeout,
581+
smt_retry_limit=smt_retry_limit,
582+
trace_rewrites=trace_rewrites,
583+
llvm_definition_dir=llvm_definition_dir,
584+
) as kcfg_explore:
585+
kcfg, _ = kcfg_explore.section_edge(
586+
proof.kcfg, source_id=int(source_id), target_id=int(target_id), logs=proof.logs, sections=sections
587+
)
588+
proof.write_proof_data()
589+
590+
522591
def exec_show_kcfg(
523592
definition_dir: Path,
524593
spec_file: Path,
@@ -743,16 +812,37 @@ def parse(s: str) -> list[T]:
743812
help='Reinitialize CFGs even if they already exist.',
744813
)
745814

746-
prune_proof_args = command_parser.add_parser(
747-
'prune-proof',
815+
prune_args = command_parser.add_parser(
816+
'prune',
748817
help='Remove a node and its successors from the proof state.',
749818
parents=[
750819
kevm_cli_args.logging_args,
751820
kevm_cli_args.k_args,
752821
kevm_cli_args.spec_args,
753822
],
754823
)
755-
prune_proof_args.add_argument('node', type=node_id_like, help='Node to remove CFG subgraph from.')
824+
prune_args.add_argument('node', type=node_id_like, help='Node to remove CFG subgraph from.')
825+
826+
section_edge_args = command_parser.add_parser(
827+
'section-edge',
828+
help='Break an edge into sections.',
829+
parents=[
830+
kevm_cli_args.logging_args,
831+
kevm_cli_args.k_args,
832+
kevm_cli_args.spec_args,
833+
],
834+
)
835+
section_edge_args.add_argument('edge', type=arg_pair_of(str, str), help='Edge to section in CFG.')
836+
section_edge_args.add_argument(
837+
'--sections', type=int, default=2, help='Number of sections to make from edge (>= 2).'
838+
)
839+
section_edge_args.add_argument(
840+
'--use-booster',
841+
dest='use_booster',
842+
default=False,
843+
action='store_true',
844+
help="Use the booster RPC server instead of kore-rpc. Requires calling kompile with '--target haskell-booster' flag",
845+
)
756846

757847
prove_legacy_args = command_parser.add_parser(
758848
'prove-legacy',

package/version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.486
1+
1.0.487

0 commit comments

Comments
 (0)