Skip to content

Commit 9e7c54e

Browse files
committed
apply substitutions only to <program> cell in fuzzer
1 parent 638565f commit 9e7c54e

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/komet/kasmer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
)
4343
from .proof import is_functional, run_claim, run_functional_claim
4444
from .scval import SCType
45-
from .utils import KSorobanError, concrete_definition
45+
from .utils import KSorobanError, concrete_definition, subst_on_program_cell
4646

4747
if TYPE_CHECKING:
4848
from collections.abc import Iterable, Mapping
@@ -248,6 +248,7 @@ def scval_to_kore(val: SCValue) -> Pattern:
248248
check_exit_code=True,
249249
max_examples=max_examples,
250250
handler=KometFuzzHandler(self.definition, task),
251+
subst_func=subst_on_program_cell,
251252
)
252253

253254
def run_prove(

src/komet/utils.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,23 @@
88
from pyk.kast.outer import KRule, read_kast_definition
99
from pyk.kdist import kdist
1010
from pyk.konvert import kast_to_kore
11+
from pyk.kore.manip import substitute_vars
12+
from pyk.kore.prelude import generated_top
13+
from pyk.kore.syntax import App
1114
from pyk.ktool.kompile import DefinitionInfo
1215
from pyk.ktool.kprove import KProve
1316
from pyk.ktool.krun import KRun
1417
from pyk.utils import single
1518

1619
if TYPE_CHECKING:
20+
from collections.abc import Mapping
1721
from pathlib import Path
1822
from subprocess import CompletedProcess
1923
from typing import Any, Final
2024

2125
from pyk.kast.inner import KInner, KSort
2226
from pyk.kast.outer import KDefinition, KFlatModule
27+
from pyk.kore.syntax import EVar, Pattern
2328
from pyk.ktool.kompile import KompileBackend
2429

2530
_LOGGER: Final = logging.getLogger(__name__)
@@ -92,3 +97,29 @@ def parse_lemmas_module(self, module_path: Path, module_name: str) -> KFlatModul
9297
concrete_definition = SorobanDefinition(kdist.get('soroban-semantics.llvm'))
9398
library_definition = SorobanDefinition(kdist.get('soroban-semantics.llvm-library'))
9499
symbolic_definition = SorobanDefinition(kdist.get('soroban-semantics.haskell'))
100+
101+
102+
def subst_on_program_cell(template: Pattern, subst_case: Mapping[EVar, Pattern]) -> Pattern:
103+
"""A substitution function that only applies substitutions within the K cell.
104+
Optimizing the fuzzer by restricting changes to relevant parts of the configuration.
105+
106+
Args:
107+
template: The template configuration containing variables in the K cell.
108+
subst_case: A mapping from variables to their replacement patterns.
109+
"""
110+
111+
def kasmer_cell(program_cell: Pattern, soroban_cell: Pattern, exit_code_cell: Pattern) -> Pattern:
112+
return App("Lbl'-LT-'kasmer'-GT-'", args=(program_cell, soroban_cell, exit_code_cell))
113+
114+
match template:
115+
case App(
116+
"Lbl'-LT-'generatedTop'-GT-'",
117+
args=(
118+
App("Lbl'-LT-'kasmer'-GT-'", args=(program_cell, soroban_cell, exit_code_cell)),
119+
generated_counter_cell,
120+
),
121+
):
122+
program_cell_ = substitute_vars(program_cell, subst_case)
123+
return generated_top((kasmer_cell(program_cell_, soroban_cell, exit_code_cell), generated_counter_cell))
124+
125+
raise ValueError(template)

0 commit comments

Comments
 (0)