Skip to content

Commit 0301a14

Browse files
authored
Refactor adding modules via CTermSymbolic (#4771)
This PR factors out the ability to add KAST level modules to the RPC server via `CTermSymbolic`, so that the user doesn't need to manually do the conversions needed for adding such modules. The `APRProver` is refactored to use this new `CTermSymbolic.add_module` as well. This is part of runtimeverification/kontrol#977, and blocking runtimeverification/kontrol#979.
1 parent 4113224 commit 0301a14

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

Diff for: pyk/src/pyk/cterm/symbolic.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@
55
from dataclasses import dataclass
66
from typing import TYPE_CHECKING, NamedTuple, final
77

8-
from pyk.utils import not_none
9-
108
from ..cterm import CSubst, CTerm
119
from ..kast.inner import KApply, KLabel, KRewrite, KToken, KVariable, Subst
1210
from ..kast.manip import flatten_label, is_spurious_constraint, sort_ac_collections
1311
from ..kast.pretty import PrettyPrinter
14-
from ..konvert import kast_to_kore, kore_to_kast
12+
from ..konvert import kast_to_kore, kflatmodule_to_kore, kore_to_kast
1513
from ..kore.rpc import (
1614
AbortedResult,
1715
KoreClient,
@@ -26,14 +24,15 @@
2624
)
2725
from ..prelude.k import GENERATED_TOP_CELL, K_ITEM
2826
from ..prelude.ml import mlAnd
27+
from ..utils import not_none
2928

3029
if TYPE_CHECKING:
3130
from collections.abc import Iterable, Iterator
3231
from pathlib import Path
3332
from typing import Final
3433

3534
from ..kast import KInner
36-
from ..kast.outer import KDefinition
35+
from ..kast.outer import KDefinition, KFlatModule
3736
from ..kore.rpc import FallbackReason, LogEntry
3837
from ..kore.syntax import Pattern
3938
from ..utils import BugReport
@@ -279,6 +278,10 @@ def assume_defined(self, cterm: CTerm, module_name: str | None = None) -> CTerm:
279278
_LOGGER.debug(f'Definedness condition computed: {kast_simplified}')
280279
return cterm.add_constraint(kast_simplified)
281280

281+
def add_module(self, module: KFlatModule, name_as_id: bool = False) -> str:
282+
_kore_module = kflatmodule_to_kore(self._definition, module)
283+
return self._kore_client.add_module(_kore_module, name_as_id=name_as_id)
284+
282285
def _smt_solver_error(self, err: SmtSolverError) -> CTermSMTError:
283286
kast = self.kore_to_kast(err.pattern)
284287
pretty_pattern = PrettyPrinter(self._definition).print(kast)

Diff for: pyk/src/pyk/proof/reachability.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from ..kast.outer import KFlatModule, KImport, KRule
1515
from ..kcfg import KCFG, KCFGStore
1616
from ..kcfg.exploration import KCFGExploration
17-
from ..konvert import kflatmodule_to_kore
1817
from ..ktool.claim_index import ClaimIndex
1918
from ..prelude.ml import mlAnd, mlTop
2019
from ..utils import FrozenDict, ensure_dir_path, hash_str, shorten_hashes, single
@@ -752,15 +751,11 @@ def close(self) -> None:
752751
def init_proof(self, proof: APRProof) -> None:
753752
main_module_name = self.main_module_name
754753
if self.extra_module:
755-
_kore_module = kflatmodule_to_kore(self.kcfg_explore.cterm_symbolic._definition, self.extra_module)
756-
_LOGGER.warning(f'_kore_module: {_kore_module.text}')
757-
self.kcfg_explore.cterm_symbolic._kore_client.add_module(_kore_module, name_as_id=True)
758-
main_module_name = self.extra_module.name
754+
main_module_name = self.kcfg_explore.cterm_symbolic.add_module(self.extra_module, name_as_id=True)
759755

760756
def _inject_module(module_name: str, import_name: str, sentences: list[KRule]) -> None:
761757
_module = KFlatModule(module_name, sentences, [KImport(import_name)])
762-
_kore_module = kflatmodule_to_kore(self.kcfg_explore.cterm_symbolic._definition, _module)
763-
self.kcfg_explore.cterm_symbolic._kore_client.add_module(_kore_module, name_as_id=True)
758+
self.kcfg_explore.cterm_symbolic.add_module(_module, name_as_id=True)
764759

765760
subproofs: list[Proof] = (
766761
[Proof.read_proof_data(proof.proof_dir, i) for i in proof.subproof_ids]

0 commit comments

Comments
 (0)