Skip to content

Commit 67376bc

Browse files
Allow kore-proof-trace to display label and location info for improve debugging if a kore definition file is given (#1098)
Fix: Pi-Squared-Inc/pi2#1562 The Math Proof Team from Pi2 required that rule hints contain more high-level information, such as the `label` attribute, if present, and the k file `location` of a rule, instead of only printing the `ordinal` and `arity`, to help them debug their code. With that in mind, we propose that `kore-proof-trace` could take an extra/optional argument of a kore definition file. When this file is passed in the CLI, the tool will parse and preprocess it so we can extract these high-level info from the definition and print it in the hints human-readable output! If the definition isn't passed to the tool, it keeps this old behavior. The new output looks like this: - If the rule doesn’t have a label or location attr ``` rule: 101 0 [] [] ``` - If the rule has both attributes ``` rule: 97 2 [TEST-PROOF-TRACE.a-to-b] [/home/robertorosmaninho/rv/temp/test-proof-trace.k:7] Var'Unds'DotVar0 = kore[15] Var'Unds'DotVar1 = kore[4] ``` - If the rule doesn’t have a label but has a location attr ``` rule: 98 2 [] [/home/robertorosmaninho/rv/temp/test-proof-trace.k:8] Var'Unds'DotVar0 = kore[15] Var'Unds'DotVar1 = kore[4] ``` We decided to create only one test for this feature, as this is only for debugging, and duplicating every single file test would cause massive and tedious extra work to review not only this simple PR but any other PR that bumps the Hints version.
1 parent 169e15b commit 67376bc

File tree

6 files changed

+179
-10
lines changed

6 files changed

+179
-10
lines changed

include/kllvm/binary/ProofTraceParser.h

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define PROOF_TRACE_PARSER_H
33

44
#include <kllvm/ast/AST.h>
5+
#include <kllvm/ast/util.h>
56
#include <kllvm/binary/deserializer.h>
67

78
#include <iostream>
@@ -50,6 +51,9 @@ class llvm_rewrite_event : public llvm_step_event {
5051
private:
5152
uint64_t rule_ordinal_;
5253
substitution_t substitution_{};
54+
std::string label_;
55+
std::string location_;
56+
bool debug_{};
5357

5458
protected:
5559
void print_substitution(
@@ -58,11 +62,20 @@ class llvm_rewrite_event : public llvm_step_event {
5862
public:
5963
llvm_rewrite_event(uint64_t rule_ordinal)
6064
: rule_ordinal_(rule_ordinal) { }
65+
llvm_rewrite_event(
66+
uint64_t rule_ordinal, std::string label, std::string location)
67+
: rule_ordinal_(rule_ordinal)
68+
, label_(std::move(label))
69+
, location_(std::move(location))
70+
, debug_(true) { }
6171

72+
[[nodiscard]] std::string const &get_label() const { return label_; }
73+
[[nodiscard]] std::string const &get_location() const { return location_; }
6274
[[nodiscard]] uint64_t get_rule_ordinal() const { return rule_ordinal_; }
6375
[[nodiscard]] substitution_t const &get_substitution() const {
6476
return substitution_;
6577
}
78+
[[nodiscard]] bool print_debug_info() const { return debug_; }
6679

6780
void add_substitution(
6881
std::string const &name, sptr<kore_pattern> const &term,
@@ -78,12 +91,22 @@ class llvm_rule_event : public llvm_rewrite_event {
7891
private:
7992
llvm_rule_event(uint64_t rule_ordinal)
8093
: llvm_rewrite_event(rule_ordinal) { }
94+
llvm_rule_event(
95+
uint64_t rule_ordinal, std::string label, std::string location)
96+
: llvm_rewrite_event(
97+
rule_ordinal, std::move(label), std::move(location)) { }
8198

8299
public:
83100
static sptr<llvm_rule_event> create(uint64_t rule_ordinal) {
84101
return sptr<llvm_rule_event>(new llvm_rule_event(rule_ordinal));
85102
}
86103

104+
static sptr<llvm_rule_event>
105+
create(uint64_t rule_ordinal, std::string label, std::string location) {
106+
return sptr<llvm_rule_event>(new llvm_rule_event(
107+
rule_ordinal, std::move(label), std::move(location)));
108+
}
109+
87110
void print(std::ostream &out, bool expand_terms, unsigned indent = 0U)
88111
const override;
89112
};
@@ -279,6 +302,8 @@ class proof_trace_parser {
279302
bool verbose_;
280303
bool expand_terms_;
281304
[[maybe_unused]] kore_header const &header_;
305+
[[maybe_unused]] std::optional<kore_definition> kore_definition_
306+
= std::nullopt;
282307

283308
sptr<kore_pattern>
284309
parse_kore_term(proof_trace_buffer &buffer, uint64_t &pattern_len) {
@@ -439,8 +464,28 @@ class proof_trace_parser {
439464
return nullptr;
440465
}
441466

442-
auto event = llvm_rule_event::create(ordinal);
467+
kllvm::sptr<llvm_rule_event> event;
468+
469+
if (kore_definition_) {
470+
auto axiom = kore_definition_->get_axiom_by_ordinal(ordinal);
471+
auto axiom_att = axiom.attributes();
472+
473+
std::string label;
474+
if (axiom_att.contains(kllvm::attribute_set::key::Label)) {
475+
label = axiom_att.get_string(kllvm::attribute_set::key::Label);
476+
}
443477

478+
std::string location;
479+
auto loc = kllvm::get_start_line_location(axiom);
480+
if (loc.has_value()) {
481+
location = loc.value().first + ":" + std::to_string(loc.value().second);
482+
}
483+
484+
event = llvm_rule_event::create(ordinal, label, location);
485+
486+
} else {
487+
event = llvm_rule_event::create(ordinal);
488+
}
444489
for (auto i = 0; i < arity; i++) {
445490
if (!parse_variable(buffer, event)) {
446491
return nullptr;
@@ -648,7 +693,8 @@ class proof_trace_parser {
648693

649694
public:
650695
proof_trace_parser(
651-
bool verbose, bool expand_terms, kore_header const &header);
696+
bool verbose, bool expand_terms, kore_header const &header,
697+
std::optional<kore_definition> kore_definition = std::nullopt);
652698

653699
std::optional<llvm_rewrite_trace>
654700
parse_proof_trace_from_file(std::string const &filename);

lib/binary/ProofTraceParser.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,15 @@ void llvm_rewrite_event::print_substitution(
4848
void llvm_rule_event::print(
4949
std::ostream &out, bool expand_terms, unsigned ind) const {
5050
std::string indent(ind * indent_size, ' ');
51-
out << fmt::format(
52-
"{}rule: {} {}\n", indent, get_rule_ordinal(), get_substitution().size());
51+
if (!print_debug_info()) {
52+
out << fmt::format(
53+
"{}rule: {} {}\n", indent, get_rule_ordinal(),
54+
get_substitution().size());
55+
} else {
56+
out << fmt::format(
57+
"{}rule: {} {} [{}] [{}]\n", indent, get_rule_ordinal(),
58+
get_substitution().size(), get_label(), get_location());
59+
}
5360
print_substitution(out, expand_terms, ind + 1U);
5461
}
5562

@@ -65,9 +72,9 @@ void llvm_side_condition_event::print(
6572
void llvm_side_condition_end_event::print(
6673
std::ostream &out, bool expand_terms, unsigned ind) const {
6774
std::string indent(ind * indent_size, ' ');
68-
out << fmt::format("{}side condition exit: {} ", indent, rule_ordinal_);
69-
out << (result_ ? "true" : "false");
70-
out << fmt::format("\n");
75+
out << fmt::format(
76+
"{}side condition exit: {} {}\n", indent, rule_ordinal_,
77+
(result_ ? "true" : "false"));
7178
}
7279

7380
void llvm_function_event::print(
@@ -182,10 +189,12 @@ void llvm_rewrite_trace::print(
182189
}
183190

184191
proof_trace_parser::proof_trace_parser(
185-
bool verbose, bool expand_terms, kore_header const &header)
192+
bool verbose, bool expand_terms, kore_header const &header,
193+
std::optional<kore_definition> kore_definition)
186194
: verbose_(verbose)
187195
, expand_terms_(expand_terms)
188-
, header_(header) { }
196+
, header_(header)
197+
, kore_definition_(std::move(kore_definition)) { }
189198

190199
std::optional<llvm_rewrite_trace>
191200
proof_trace_parser::parse_proof_trace(std::string const &data) {

test/lit.cfg.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,21 @@ def one_line(s):
168168
fi
169169
''')),
170170

171+
('%check-proof-debug-out', one_line('''
172+
out=%test-dir-out/*.proof.debug.out.diff
173+
in=%test-dir-in/`basename $out .proof.debug.out.diff`.in
174+
hint=%t.`basename $out .proof.debug.out.diff`.hint
175+
rm -f $hint
176+
%t.interpreter $in -1 $hint --proof-output
177+
%kore-rich-header %s > %t.header.bin
178+
%kore-proof-trace --verbose --expand-terms %t.header.bin $hint %s | diff - $out
179+
result="$?"
180+
if [ "$result" -ne 0 ]; then
181+
echo "kore-proof-trace error while parsing proof hint trace with expanded kore terms"
182+
exit 1
183+
fi
184+
''')),
185+
171186
('%check-dir-proof-out', one_line('''
172187
%kore-rich-header %s > %t.header.bin
173188
for out in %test-dir-out/*.proof.out.diff; do
@@ -207,6 +222,7 @@ def one_line(s):
207222
('%test-dir-out', os.path.join('%output-dir', '%test-basename')),
208223
('%test-dir-in', os.path.join('%input-dir', '%test-basename')),
209224
('%test-proof-diff-out', os.path.join('%output-dir', '%test-basename.proof.out.diff')),
225+
('%test-proof-debug-diff-out', os.path.join('%output-dir', '%test-basename.proof.debug.out.diff')),
210226
('%test-basename', '`basename %s .kore`'),
211227

212228
('%allow-pipefail', 'set +o pipefail'),
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
version: 11
2+
hook: MAP.element Lbl'UndsPipe'-'-GT-Unds'{} ()
3+
function: Lbl'UndsPipe'-'-GT-Unds'{} ()
4+
arg: kore[\dv{SortKConfigVar{}}("$PGM")]
5+
arg: kore[Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
6+
hook result: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
7+
hook: MAP.unit Lbl'Stop'Map{} ()
8+
function: Lbl'Stop'Map{} ()
9+
hook result: kore[Lbl'Stop'Map{}()]
10+
hook: MAP.concat Lbl'Unds'Map'Unds'{} ()
11+
function: Lbl'Unds'Map'Unds'{} ()
12+
arg: kore[Lbl'Stop'Map{}()]
13+
arg: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
14+
hook result: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
15+
function: LblinitGeneratedTopCell{} ()
16+
rule: 111 1 [] []
17+
VarInit = kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
18+
function: LblinitKCell{} (0)
19+
rule: 112 1 [] []
20+
VarInit = kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
21+
function: Lblproject'Coln'KItem{} (0:0)
22+
hook: MAP.lookup LblMap'Coln'lookup{} (0:0:0:0)
23+
function: LblMap'Coln'lookup{} (0:0:0:0)
24+
arg: kore[Lbl'UndsPipe'-'-GT-Unds'{}(\dv{SortKConfigVar{}}("$PGM"),Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
25+
arg: kore[\dv{SortKConfigVar{}}("$PGM")]
26+
hook result: kore[Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
27+
rule: 153 1 [] []
28+
VarK = kore[Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
29+
function: LblinitGeneratedCounterCell{} (1)
30+
rule: 110 0 [] []
31+
config: kore[Lbl'-LT-'generatedTop'-GT-'{}(Lbl'-LT-'k'-GT-'{}(kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),dotk{}())),Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0")))]
32+
rule: 107 5 [ADD-REWRITE.state-next] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:18]
33+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
34+
Var'Unds'DotVar1 = kore[dotk{}()]
35+
Var'Unds'Gen4 = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
36+
VarM = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
37+
VarN = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
38+
rule: 105 4 [ADD-REWRITE.add-succ] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:16]
39+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
40+
Var'Unds'DotVar1 = kore[kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),dotk{}())]
41+
VarM = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
42+
VarN = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
43+
rule: 105 4 [ADD-REWRITE.add-succ] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:16]
44+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
45+
Var'Unds'DotVar1 = kore[kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),dotk{}())]
46+
VarM = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
47+
VarN = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
48+
rule: 106 3 [ADD-REWRITE.add-zero] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:15]
49+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
50+
Var'Unds'DotVar1 = kore[kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()),dotk{}())]
51+
VarN = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
52+
rule: 103 6 [ADD-REWRITE.state-succ] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:20]
53+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
54+
Var'Unds'DotVar1 = kore[dotk{}()]
55+
Var'Unds'Gen0 = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
56+
Var'Unds'Gen4 = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
57+
VarM = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
58+
VarN = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
59+
rule: 107 5 [ADD-REWRITE.state-next] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:18]
60+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
61+
Var'Unds'DotVar1 = kore[dotk{}()]
62+
Var'Unds'Gen4 = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())]
63+
VarM = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
64+
VarN = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
65+
rule: 105 4 [ADD-REWRITE.add-succ] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:16]
66+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
67+
Var'Unds'DotVar1 = kore[kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}(),Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))),dotk{}())]
68+
VarM = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
69+
VarN = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
70+
rule: 106 3 [ADD-REWRITE.add-zero] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:15]
71+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
72+
Var'Unds'DotVar1 = kore[kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}(),Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))),dotk{}())]
73+
VarN = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())))]
74+
rule: 103 6 [ADD-REWRITE.state-succ] [/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k:20]
75+
Var'Unds'DotVar0 = kore[Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0"))]
76+
Var'Unds'DotVar1 = kore[dotk{}()]
77+
Var'Unds'Gen0 = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
78+
Var'Unds'Gen4 = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())))]
79+
VarM = kore[Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()))]
80+
VarN = kore[Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}()]
81+
config: kore[Lbl'-LT-'generatedTop'-GT-'{}(Lbl'-LT-'k'-GT-'{}(kseq{}(Lblstate'LParUndsCommUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'State'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}(),Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lbls'LParUndsRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat'Unds'Nat{}(Lblz'LParRParUnds'ADD-REWRITE-SYNTAX'Unds'Nat{}())))),dotk{}())),Lbl'-LT-'generatedCounter'-GT-'{}(\dv{SortInt{}}("0")))]

test/proof/add-rewrite.kore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// RUN: %proof-interpreter
22
// RUN: %check-dir-proof-out
3+
// RUN: %check-proof-debug-out
34
[topCellInitializer{}(LblinitGeneratedTopCell{}()), org'Stop'kframework'Stop'attributes'Stop'Source{}("Source(/home/dwightguth/proof-checker/generation/k-benchmarks/add-rewrite/add-rewrite.k)")]
45

56
module BASIC-K

tools/kore-proof-trace/main.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <kllvm/binary/ProofTraceParser.h>
2+
#include <kllvm/parser/KOREParser.h>
23

34
#include <llvm/Support/CommandLine.h>
45

@@ -18,6 +19,10 @@ cl::opt<std::string> input_filename(
1819
cl::Positional, cl::desc("<input file>"), cl::Required,
1920
cl::cat(kore_proof_trace_cat));
2021

22+
cl::opt<std::string> kore_filename(
23+
cl::Positional, cl::desc("[kore definition file]"), cl::Optional,
24+
cl::cat(kore_proof_trace_cat));
25+
2126
cl::opt<bool> verbose_output(
2227
"verbose",
2328
llvm::cl::desc("Print verbose information about the input proof trace"),
@@ -50,7 +55,18 @@ int main(int argc, char **argv) {
5055
return 0;
5156
}
5257

53-
proof_trace_parser parser(verbose_output, expand_terms_in_output, header);
58+
std::optional<kore_definition> kore_def;
59+
60+
if (!kore_filename.empty()) {
61+
std::fstream kore_file(kore_filename);
62+
kore_def
63+
= std::make_optional(*parser::kore_parser(kore_filename).definition());
64+
kore_def->preprocess();
65+
}
66+
67+
proof_trace_parser parser(
68+
verbose_output, expand_terms_in_output, header, kore_def);
69+
5470
auto trace = parser.parse_proof_trace_from_file(input_filename);
5571
if (trace.has_value()) {
5672
return 0;

0 commit comments

Comments
 (0)