Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
7e4a8e9
feat(verifier): Implement two-sided verification check
MikaelMayer Feb 26, 2026
d3d5475
feat(cli): Add --check-mode flag and update emoji symbols
MikaelMayer Feb 26, 2026
4c2809a
feat(verifier): Add per-statement check mode annotations
MikaelMayer Feb 26, 2026
3b454e2
test: Add comprehensive VCOutcome tests and fix SMTEncoder tests
MikaelMayer Feb 26, 2026
2b8a1a6
test: Add comprehensive VCOutcome tests and fix SMTEncoder tests
MikaelMayer Feb 26, 2026
4aca450
test: Add comprehensive VCOutcome tests and fix SMTEncoder tests
MikaelMayer Feb 26, 2026
cdb515b
docs: Update implementation summary with completed features
MikaelMayer Feb 26, 2026
7b567c1
fix: Update StrataVerify and StrataMain for VCOutcome API changes
MikaelMayer Feb 26, 2026
74412fb
fix: Remove trailing whitespace in SMTUtils.lean
MikaelMayer Feb 26, 2026
7c705b4
fix: Remove all trailing whitespace in SMTUtils.lean
MikaelMayer Feb 26, 2026
67f42b4
fix: Map old reachCheck metadata to fullCheck for backward compatibility
MikaelMayer Feb 26, 2026
4877fec
feat: Add isAlwaysFalseIfReachable alias for isRefuted
MikaelMayer Feb 26, 2026
6ae4c72
refactor: Rename predicates for consistency and add cross-cutting fil…
MikaelMayer Feb 26, 2026
d35c35a
chore: Remove implementation tracking document
MikaelMayer Feb 26, 2026
3cd66a1
refactor: Make isPass conservative (validity only) and add specific v…
MikaelMayer Feb 26, 2026
3003f0f
refactor: Consistent naming with reachability at end, isSatisfiable c…
MikaelMayer Feb 26, 2026
5081ebf
refactor: Separate base cases (no 'is' prefix) from derived predicates
MikaelMayer Feb 26, 2026
47474da
feat: Add VerificationMode to outcomeToLevel for context-aware severity
MikaelMayer Feb 26, 2026
bd47c89
refactor: Simplify outcomeToLevel - no warnings in deductive mode, us…
MikaelMayer Feb 26, 2026
983bef2
refactor: Rename refutedAndReachable to alwaysFalseAndReachable, unre…
MikaelMayer Feb 26, 2026
149989c
refactor: Use only base case predicates in outcomeToLevel
MikaelMayer Feb 26, 2026
2e33a24
refactor: Make outcome messages neutral and context-independent
MikaelMayer Feb 26, 2026
5f93025
fix: Handle models correctly for alwaysFalseReachabilityUnknown and u…
MikaelMayer Feb 26, 2026
8f8b52a
fix: Remove incorrect model handling for alwaysFalseReachabilityUnknown
MikaelMayer Feb 26, 2026
eaafeb4
refactor: Pattern match directly on satisfiability and validity prope…
MikaelMayer Feb 26, 2026
8f2e3d0
fix: Remove trailing whitespace in SarifOutput.lean
MikaelMayer Feb 26, 2026
75ab1b7
test: Add comprehensive SARIF output tests for all nine outcomes
MikaelMayer Feb 26, 2026
c6bbd37
fix: Update dischargeObligation call signature in test
MikaelMayer Feb 26, 2026
a7f1333
refactor: Consolidate VCOutcome tests to one eval per case
MikaelMayer Feb 26, 2026
d6ae21b
feat: Add --error-level CLI option for SARIF severity mapping
MikaelMayer Feb 26, 2026
2381e59
fix: Update StrataMain for VCOutcome changes and clarify bugFinding c…
MikaelMayer Feb 26, 2026
4d44f75
fix: Update bugFinding SARIF severity levels per review
MikaelMayer Feb 26, 2026
21d5f30
fix: Remove trailing whitespace from Verifier.lean
MikaelMayer Feb 26, 2026
5d2dc07
refactor: Add helper function and improve SARIF output labels in tests
MikaelMayer Feb 26, 2026
f14b6f0
refactor: Improve VCOutcome tests with comprehensive predicate checking
MikaelMayer Feb 26, 2026
a1bf916
feat: Add derived predicate testing to VCOutcome tests
MikaelMayer Feb 26, 2026
a4d7427
refactor: Remove unnecessary section comments from VCOutcome tests
MikaelMayer Feb 26, 2026
77b4eaa
refactor: Redesign verification flags for orthogonal error mode and d…
MikaelMayer Feb 26, 2026
c8c0aa7
refactor: Rename flags to --check-mode and --check-amount, simplify a…
MikaelMayer Feb 26, 2026
97bf7bd
Merge remote-tracking branch 'origin/main' into feat/two-sided-verifi…
MikaelMayer Feb 26, 2026
38b5790
fix: use assert + check-sat for single checks to match pre-PR behavior
MikaelMayer Feb 26, 2026
be79034
test: update expectations for 'pass if reachable' result format
MikaelMayer Feb 27, 2026
c120f3d
feat: clarify reachability claims with 'from declaration entry'
MikaelMayer Feb 27, 2026
b9f05d7
Merge remote-tracking branch 'origin/main' into feat/two-sided-verifi…
MikaelMayer Feb 27, 2026
6e28fed
fix: mask PE and SMT outcomes to respect requested checks
MikaelMayer Feb 27, 2026
d385ac7
fix: update label for validity-only failure to 'can be false if reach…
MikaelMayer Feb 27, 2026
6b937c4
test: update VCOutcomeTests for new label
MikaelMayer Feb 27, 2026
9ffeb7d
Merge branch 'main' into feat/two-sided-verification-check
MikaelMayer Feb 27, 2026
e26b317
fix: remove trailing whitespace
MikaelMayer Feb 27, 2026
9811a66
test: update test expectations for new validity-only outcome labels
MikaelMayer Feb 27, 2026
cd67538
test: fix remaining test expectations for validity-only outcomes
MikaelMayer Feb 27, 2026
c8f69fb
test: update RemoveIrrelevantAxioms expectations
MikaelMayer Feb 27, 2026
ee3512e
test: add VCs section to Regex test with proper formatting
MikaelMayer Feb 27, 2026
b31dffc
test: fix Quantifiers blank line indentation
MikaelMayer Feb 27, 2026
62f753c
test: fix blank line indentation in RemoveIrrelevantAxioms and SafeMap
MikaelMayer Feb 27, 2026
8fd96b0
test: fix blank lines to be truly empty
MikaelMayer Feb 27, 2026
26a2942
test: remove trailing separator causing syntax error
MikaelMayer Feb 27, 2026
80cbee8
test: add single-space blank lines back
MikaelMayer Feb 27, 2026
6db0b2f
test: remove spaces from blank lines in docstrings
MikaelMayer Feb 27, 2026
1f725b9
test: fix Quantifiers test with correct blank line format and remove …
MikaelMayer Feb 27, 2026
078aefd
test: fix Quantifiers first guard_msgs block with DEBUG section
MikaelMayer Feb 27, 2026
9901b25
test: fix Regex trailing separator and RemoveIrrelevantAxioms missing…
MikaelMayer Feb 27, 2026
5a067be
test: fix program name in RemoveIrrelevantAxioms
MikaelMayer Feb 27, 2026
bacb297
test: update outcome labels and replace reachCheck with checkAmount
MikaelMayer Feb 27, 2026
baade24
test: update cover outcomes for satisfiability checks
MikaelMayer Feb 27, 2026
f77eccf
test: add single-space blank lines to docstrings
MikaelMayer Feb 27, 2026
585d8b0
test: remove spaces from blank lines in docstrings
MikaelMayer Feb 27, 2026
4725072
test: disable SarifOutputTests until API is updated
MikaelMayer Feb 27, 2026
25a3e18
test: update outcome labels and disable ExprEvalTest
MikaelMayer Feb 27, 2026
f62d019
test: remove Model output from RemoveIrrelevantAxioms (validity-only …
MikaelMayer Feb 27, 2026
a80af56
test: remove Model output from test files (validity-only checks)
MikaelMayer Feb 27, 2026
579d82f
test: fix unterminated docstring in RemoveIrrelevantAxioms
MikaelMayer Feb 27, 2026
4e23a64
Merge main into feat/two-sided-verification-check
MikaelMayer Mar 2, 2026
0927752
fix: move copyright headers before #exit directives
MikaelMayer Mar 2, 2026
2e060e2
fix: rename Options to VerifyOptions to match main
MikaelMayer Mar 2, 2026
9b73d99
fix: use defaultSolver without namespace prefix
MikaelMayer Mar 2, 2026
791958f
fix: adapt SMTUtils to use monadic encodeSMT API
MikaelMayer Mar 2, 2026
def9c15
fix: convert Term to String using termToSMTString
MikaelMayer Mar 2, 2026
eacbc43
fix: add Core namespace to Options.lean
MikaelMayer Mar 2, 2026
17ae333
fix: use Core.defaultSolver after adding Core namespace
MikaelMayer Mar 2, 2026
e77e519
fix: use Core.defaultSolver in SMTUtils.lean
MikaelMayer Mar 2, 2026
0ee00dc
fix: qualify VerifyOptions with Core in Strata namespace
MikaelMayer Mar 2, 2026
b0e76a7
fix: fix VerifyVerifyOptions double prefix and Regex.lean
MikaelMayer Mar 2, 2026
46e6f5e
test: fix test expectations for Cover, RemoveIrrelevantAxioms, and ot…
MikaelMayer Mar 2, 2026
b5a71d8
fix: update diagnostic messages and remove Model output from tests
MikaelMayer Mar 2, 2026
8e26650
fix: pass variable ids to checkSat to generate models, remove extra c…
MikaelMayer Mar 2, 2026
2e1b510
fix: add Model output to tests, no get-value for two-sided checks
MikaelMayer Mar 2, 2026
1a24e6a
fix: suppress unused variable warning for md parameter
MikaelMayer Mar 2, 2026
e52ad30
fix: restore checkSat in dischargeObligation, remove from encodeCore …
MikaelMayer Mar 2, 2026
048b29b
test: update BoogieToStrata expected output for new outcome labels
MikaelMayer Mar 2, 2026
1ad3044
test: update BoogieToStrata expected output for unknown emoji
MikaelMayer Mar 2, 2026
75805e8
test: update Examples expected output for new outcome labels
MikaelMayer Mar 2, 2026
3a70839
test: update Python expected output for new outcome labels
MikaelMayer Mar 2, 2026
fa0f5fe
test: fix Python expected output format for assertion failures
MikaelMayer Mar 2, 2026
484db41
test: update SARIF validation to expect error level for unknown outcomes
MikaelMayer Mar 2, 2026
467e7af
fix: enable models in full mode by passing ids to checkSatAssuming an…
MikaelMayer Mar 2, 2026
d4a64b0
Merge main into feat/two-sided-verification-check
MikaelMayer Mar 3, 2026
da742c1
test: update new datatype test expectations for new outcome labels
MikaelMayer Mar 3, 2026
0feaf12
test: fix Assertion failed format in Python expected files after merge
MikaelMayer Mar 3, 2026
dd7f470
refactor: rename canBeFalseAndReachable to canBeFalseAndIsReachable
MikaelMayer Mar 3, 2026
c8412b3
docs: add VCOutcome outcome table as doc comment
MikaelMayer Mar 3, 2026
8fea91b
fix: pass raw Q to encodeCore, handle negation for validity checks there
MikaelMayer Mar 3, 2026
78c3ddc
fix: remove unused obligationStr variable
MikaelMayer Mar 3, 2026
eb547f5
test: update BoogieToStrata expected labels for canBeFalseAndIsReacha…
MikaelMayer Mar 3, 2026
4424552
Merge main into feat/two-sided-verification-check
MikaelMayer Mar 4, 2026
d27beea
feat: distinguish unreachable cover (error) from unreachable assert (…
MikaelMayer Mar 4, 2026
feebcdf
docs: clarify check-sat-assuming comment per review
MikaelMayer Mar 4, 2026
dd75bdc
fix: simplify unreachable cover label to just emoji + unreachable
MikaelMayer Mar 4, 2026
2842157
refactor: rename indecisive to canBeTrueOrFalse, cover with sat alway…
MikaelMayer Mar 4, 2026
0dd3b37
refactor: independent PE shortcuts per check, solver fills in the rest
MikaelMayer Mar 4, 2026
1062867
docs: separate assert and cover outcome tables in VCOutcome doc comment
MikaelMayer Mar 4, 2026
3050058
docs: single outcome table with cover notes, rename refuted if reacha…
MikaelMayer Mar 4, 2026
eafaaff
fix: always continue after PE resolves both checks, fixing duplicate …
MikaelMayer Mar 4, 2026
3f617cb
refactor: rename outcome labels for clarity
MikaelMayer Mar 4, 2026
5ee7518
fix: update .expected files with new outcome labels
MikaelMayer Mar 4, 2026
af5bc5f
refactor: change 'if reachable' to 'if reached' for clarity
MikaelMayer Mar 5, 2026
e230874
feat: add minimal/full check amount display modes
MikaelMayer Mar 5, 2026
8fe0902
fix: update remaining test expectations for minimal/full modes
MikaelMayer Mar 5, 2026
34fe172
Merge main into feat/two-sided-verification-check
MikaelMayer Mar 5, 2026
0bea884
fix: restore CounterEx as Map Ident SMT.Term and lexprModel field
MikaelMayer Mar 5, 2026
726321e
feat: add bugFindingAssumingCompleteSpec check mode
MikaelMayer Mar 5, 2026
72cf9a7
fix: update T3_ControlFlow test expectation for Test failed error
MikaelMayer Mar 5, 2026
b3783b1
Merge branch 'main' into feat/two-sided-verification-check
MikaelMayer Mar 5, 2026
144470d
fix: force full check level for bugFindingAssumingCompleteSpec mode
MikaelMayer Mar 5, 2026
adb8ad9
fix: update Python expected files for minimal mode labels
MikaelMayer Mar 5, 2026
f0f1846
fix: rename checkAmount to checkLevel in StrataVerify CLI
MikaelMayer Mar 5, 2026
1877b51
fix: update model format in test expectations
MikaelMayer Mar 5, 2026
0ac0b55
fix: restore BoogieToStrata test expectations from main
MikaelMayer Mar 5, 2026
e9fd8c3
fix: add Test failed expectation to more Laurel tests
MikaelMayer Mar 5, 2026
273b05f
Merge branch 'main' into feat/two-sided-verification-check
MikaelMayer Mar 5, 2026
45e4d84
chore: trigger CI rebuild
MikaelMayer Mar 5, 2026
1fd5dd0
Merge branch 'main' into feat/two-sided-verification-check
MikaelMayer Mar 5, 2026
98fe907
chore: force rebuild by touching Verifier.lean
MikaelMayer Mar 6, 2026
e481f15
fix: restore minimal mode diagnostic messages
MikaelMayer Mar 6, 2026
3743dab
Merge main into feat/two-sided-verification-check
MikaelMayer Mar 6, 2026
66e5244
fix: remove CexParser from SMT.lean module imports
MikaelMayer Mar 6, 2026
85670e1
fix: update StrataMain to use vcResult.outcome instead of vcResult.re…
MikaelMayer Mar 6, 2026
04a9037
fix: add missing mode parameter to writeSarifOutput calls in StrataMain
MikaelMayer Mar 6, 2026
d5f7c26
fix: restore Python expected files and remove Test failed from Laurel…
MikaelMayer Mar 6, 2026
c0146e7
fix: update BoogieToStrata .expect files to match actual output
MikaelMayer Mar 6, 2026
a2b0585
fix: restore main's formatting for unreachable and model values
MikaelMayer Mar 6, 2026
c427e66
fix: restore BoogieToStrata .expect files from main with updated unkn…
MikaelMayer Mar 6, 2026
23e2480
fix: disable SarifOutputTests with TODO for API update
MikaelMayer Mar 6, 2026
7466449
fix: complete SarifOutputTests update and remove orphaned CexParser
MikaelMayer Mar 6, 2026
58a386a
feat: add minimalVerbose check level
MikaelMayer Mar 6, 2026
970a496
fix: update test expectations for emoji and unreachable format changes
MikaelMayer Mar 6, 2026
aa4bad5
temp: update BoogieToStrata .expect for CI cache issue
MikaelMayer Mar 6, 2026
1d38baf
fix: revert BoogieToStrata .expect to minimal mode labels
MikaelMayer Mar 6, 2026
89f1206
temp: update BoogieToStrata .expect to match CI output
MikaelMayer Mar 6, 2026
3bb1188
fix: update BoogieToStrata .expect for minimalVerbose output
MikaelMayer Mar 7, 2026
0a1f36b
fix: update Examples .expected files and remove trailing whitespace
MikaelMayer Mar 7, 2026
03944a0
fix: update Python expected files for minimalVerbose output
MikaelMayer Mar 7, 2026
1f734a4
fix: update Python expected files for failure label
MikaelMayer Mar 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 53 additions & 53 deletions Examples/expected/HeapReasoning.core.expected
Original file line number Diff line number Diff line change
@@ -1,55 +1,55 @@
Successfully parsed.
HeapReasoning.core.st(99, 2) [modifiesFrameRef1]: ✅ pass
HeapReasoning.core.st(104, 2) [modifiesFrameRef1]: ✅ pass
HeapReasoning.core.st(109, 2) [modifiesFrameRef1]: ✅ pass
[Container_ctor_ensures_4]: ✅ pass
HeapReasoning.core.st(87, 2) [Container_ctor_ensures_7]: ✅ pass
HeapReasoning.core.st(88, 2) [Container_ctor_ensures_8]: ✅ pass
HeapReasoning.core.st(89, 2) [Container_ctor_ensures_9]: ✅ pass
HeapReasoning.core.st(91, 2) [Container_ctor_ensures_10]: ✅ pass
HeapReasoning.core.st(165, 2) [modifiesFrameRef1]: ✅ pass
HeapReasoning.core.st(170, 2) [modifiesFrameRef2]: ✅ pass
HeapReasoning.core.st(173, 2) [modifiesFrameRef1Next]: ✅ pass
HeapReasoning.core.st(178, 2) [modifiesFrameRef2Next]: ✅ pass
HeapReasoning.core.st(133, 2) [UpdateContainers_ensures_5]: ✅ pass
[UpdateContainers_ensures_6]: ✅ pass
HeapReasoning.core.st(151, 2) [UpdateContainers_ensures_14]: ✅ pass
HeapReasoning.core.st(152, 2) [UpdateContainers_ensures_15]: ✅ pass
HeapReasoning.core.st(153, 2) [UpdateContainers_ensures_16]: ✅ pass
HeapReasoning.core.st(154, 2) [UpdateContainers_ensures_17]: ✅ pass
HeapReasoning.core.st(156, 2) [UpdateContainers_ensures_18]: ✅ pass
HeapReasoning.core.st(157, 2) [UpdateContainers_ensures_19]: ✅ pass
HeapReasoning.core.st(75, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_1]: ✅ pass
HeapReasoning.core.st(76, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_2]: ✅ pass
HeapReasoning.core.st(77, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_3]: ✅ pass
HeapReasoning.core.st(85, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_5]: ✅ pass
HeapReasoning.core.st(86, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_6]: ✅ pass
HeapReasoning.core.st(216, 2) [c1Lychees0]: ✅ pass
HeapReasoning.core.st(217, 2) [c1Pineapple1]: ✅ pass
HeapReasoning.core.st(75, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_1]: ✅ pass
HeapReasoning.core.st(76, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_2]: ✅ pass
HeapReasoning.core.st(77, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_3]: ✅ pass
HeapReasoning.core.st(85, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_5]: ✅ pass
HeapReasoning.core.st(86, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_6]: ✅ pass
HeapReasoning.core.st(227, 2) [assert_9]: ✅ pass
HeapReasoning.core.st(232, 2) [assert_10]: ✅ pass
HeapReasoning.core.st(127, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_1]: ✅ pass
HeapReasoning.core.st(128, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_2]: ✅ pass
HeapReasoning.core.st(130, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_3]: ✅ pass
HeapReasoning.core.st(131, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_4]: ✅ pass
HeapReasoning.core.st(141, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_7]: ✅ pass
HeapReasoning.core.st(143, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_8]: ✅ pass
HeapReasoning.core.st(144, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_9]: ✅ pass
HeapReasoning.core.st(146, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_10]: ✅ pass
HeapReasoning.core.st(147, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_11]: ✅ pass
HeapReasoning.core.st(148, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_12]: ✅ pass
HeapReasoning.core.st(149, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_13]: ✅ pass
HeapReasoning.core.st(238, 2) [c1Lychees1]: ✅ pass
HeapReasoning.core.st(239, 2) [c1Pineapple2]: ✅ pass
HeapReasoning.core.st(240, 2) [c2Lychees0]: ✅ pass
HeapReasoning.core.st(241, 2) [c2Pineapple0]: ✅ pass
HeapReasoning.core.st(243, 2) [c1NextEqC2]: ✅ pass
HeapReasoning.core.st(244, 2) [c2NextEqC1]: ✅ pass
HeapReasoning.core.st(198, 2) [Main_ensures_2]: ✅ pass
[Main_ensures_3]: ✅ pass
HeapReasoning.core.st(99, 2) [modifiesFrameRef1]: ✔️ always true if reached
HeapReasoning.core.st(104, 2) [modifiesFrameRef1]: ✔️ always true if reached
HeapReasoning.core.st(109, 2) [modifiesFrameRef1]: ✔️ always true if reached
[Container_ctor_ensures_4]: ✔️ always true if reached
HeapReasoning.core.st(87, 2) [Container_ctor_ensures_7]: ✔️ always true if reached
HeapReasoning.core.st(88, 2) [Container_ctor_ensures_8]: ✔️ always true if reached
HeapReasoning.core.st(89, 2) [Container_ctor_ensures_9]: ✔️ always true if reached
HeapReasoning.core.st(91, 2) [Container_ctor_ensures_10]: ✔️ always true if reached
HeapReasoning.core.st(165, 2) [modifiesFrameRef1]: ✔️ always true if reached
HeapReasoning.core.st(170, 2) [modifiesFrameRef2]: ✔️ always true if reached
HeapReasoning.core.st(173, 2) [modifiesFrameRef1Next]: ✔️ always true if reached
HeapReasoning.core.st(178, 2) [modifiesFrameRef2Next]: ✔️ always true if reached
HeapReasoning.core.st(133, 2) [UpdateContainers_ensures_5]: ✔️ always true if reached
[UpdateContainers_ensures_6]: ✔️ always true if reached
HeapReasoning.core.st(151, 2) [UpdateContainers_ensures_14]: ✔️ always true if reached
HeapReasoning.core.st(152, 2) [UpdateContainers_ensures_15]: ✔️ always true if reached
HeapReasoning.core.st(153, 2) [UpdateContainers_ensures_16]: ✔️ always true if reached
HeapReasoning.core.st(154, 2) [UpdateContainers_ensures_17]: ✔️ always true if reached
HeapReasoning.core.st(156, 2) [UpdateContainers_ensures_18]: ✔️ always true if reached
HeapReasoning.core.st(157, 2) [UpdateContainers_ensures_19]: ✔️ always true if reached
HeapReasoning.core.st(75, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_1]: ✔️ always true if reached
HeapReasoning.core.st(76, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_2]: ✔️ always true if reached
HeapReasoning.core.st(77, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_3]: ✔️ always true if reached
HeapReasoning.core.st(85, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_5]: ✔️ always true if reached
HeapReasoning.core.st(86, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_6]: ✔️ always true if reached
HeapReasoning.core.st(216, 2) [c1Lychees0]: ✔️ always true if reached
HeapReasoning.core.st(217, 2) [c1Pineapple1]: ✔️ always true if reached
HeapReasoning.core.st(75, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_1]: ✔️ always true if reached
HeapReasoning.core.st(76, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_2]: ✔️ always true if reached
HeapReasoning.core.st(77, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_3]: ✔️ always true if reached
HeapReasoning.core.st(85, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_5]: ✔️ always true if reached
HeapReasoning.core.st(86, 2) [(Origin_Container_ctor_Requires)Container_ctor_requires_6]: ✔️ always true if reached
HeapReasoning.core.st(227, 2) [assert_9]: ✔️ always true if reached
HeapReasoning.core.st(232, 2) [assert_10]: ✔️ always true if reached
HeapReasoning.core.st(127, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_1]: ✔️ always true if reached
HeapReasoning.core.st(128, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_2]: ✔️ always true if reached
HeapReasoning.core.st(130, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_3]: ✔️ always true if reached
HeapReasoning.core.st(131, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_4]: ✔️ always true if reached
HeapReasoning.core.st(141, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_7]: ✔️ always true if reached
HeapReasoning.core.st(143, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_8]: ✔️ always true if reached
HeapReasoning.core.st(144, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_9]: ✔️ always true if reached
HeapReasoning.core.st(146, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_10]: ✔️ always true if reached
HeapReasoning.core.st(147, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_11]: ✔️ always true if reached
HeapReasoning.core.st(148, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_12]: ✔️ always true if reached
HeapReasoning.core.st(149, 2) [(Origin_UpdateContainers_Requires)UpdateContainers_requires_13]: ✔️ always true if reached
HeapReasoning.core.st(238, 2) [c1Lychees1]: ✔️ always true if reached
HeapReasoning.core.st(239, 2) [c1Pineapple2]: ✔️ always true if reached
HeapReasoning.core.st(240, 2) [c2Lychees0]: ✔️ always true if reached
HeapReasoning.core.st(241, 2) [c2Pineapple0]: ✔️ always true if reached
HeapReasoning.core.st(243, 2) [c1NextEqC2]: ✔️ always true if reached
HeapReasoning.core.st(244, 2) [c2NextEqC1]: ✔️ always true if reached
HeapReasoning.core.st(198, 2) [Main_ensures_2]: ✔️ always true if reached
[Main_ensures_3]: ✔️ always true if reached
All 53 goals passed.
12 changes: 6 additions & 6 deletions Examples/expected/LoopSimple.core.expected
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Successfully parsed.
LoopSimple.core.st(13, 2) [entry_invariant_0_0]: ✅ pass
LoopSimple.core.st(13, 2) [entry_invariant_0_1]: ✅ pass
LoopSimple.core.st(13, 2) [arbitrary_iter_maintain_invariant_0_0]: ✅ pass
LoopSimple.core.st(13, 2) [arbitrary_iter_maintain_invariant_0_1]: ✅ pass
LoopSimple.core.st(20, 2) [sum_assert]: ✅ pass
LoopSimple.core.st(21, 2) [neg_cond]: ✅ pass
LoopSimple.core.st(13, 2) [entry_invariant_0_0]: ✔️ always true if reached
LoopSimple.core.st(13, 2) [entry_invariant_0_1]: ✔️ always true if reached
LoopSimple.core.st(13, 2) [arbitrary_iter_maintain_invariant_0_0]: ✔️ always true if reached
LoopSimple.core.st(13, 2) [arbitrary_iter_maintain_invariant_0_1]: ✔️ always true if reached
LoopSimple.core.st(20, 2) [sum_assert]: ✔️ always true if reached
LoopSimple.core.st(21, 2) [neg_cond]: ✔️ always true if reached
All 6 goals passed.
16 changes: 8 additions & 8 deletions Examples/expected/LoopSimple.csimp.expected
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
Successfully parsed.
[entry_invariant_0]: ✅ pass
[assert_measure_pos]: ✅ pass
[measure_decreases]: ✅ pass
[measure_imp_not_guard]: ✅ pass
[arbitrary_iter_maintain_invariant_0]: ✅ pass
[sum_assert]: ✅ pass
[neg_cond]: ✅ pass
[post]: ✅ pass
[entry_invariant_0]: ✔️ always true if reached
[assert_measure_pos]: ✔️ always true if reached
[measure_decreases]: ✔️ always true if reached
[measure_imp_not_guard]: ✔️ always true if reached
[arbitrary_iter_maintain_invariant_0]: ✔️ always true if reached
[sum_assert]: ✔️ always true if reached
[neg_cond]: ✔️ always true if reached
[post]: ✔️ always true if reached
All 8 goals passed.
6 changes: 3 additions & 3 deletions Examples/expected/SimpleProc.core.expected
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Successfully parsed.
SimpleProc.core.st(22, 2) [Test_ensures_0]: ✅ pass
SimpleProc.core.st(23, 2) [Test_ensures_1]: ✅ pass
SimpleProc.core.st(24, 2) [Test_ensures_2]: ✅ pass
SimpleProc.core.st(22, 2) [Test_ensures_0]: ✔️ always true if reached
SimpleProc.core.st(23, 2) [Test_ensures_1]: ✔️ always true if reached
SimpleProc.core.st(24, 2) [Test_ensures_2]: ✔️ always true if reached
All 3 goals passed.
8 changes: 4 additions & 4 deletions Examples/expected/TwoLoops.core.expected
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Successfully parsed.
TwoLoops.core.st(12, 2) [entry_invariant_0_0]: ✅ pass
TwoLoops.core.st(12, 2) [arbitrary_iter_maintain_invariant_0_0]: ✅ pass
TwoLoops.core.st(19, 2) [entry_invariant_1_0]: ✅ pass
TwoLoops.core.st(19, 2) [arbitrary_iter_maintain_invariant_1_0]: ✅ pass
TwoLoops.core.st(12, 2) [entry_invariant_0_0]: ✔️ always true if reached
TwoLoops.core.st(12, 2) [arbitrary_iter_maintain_invariant_0_0]: ✔️ always true if reached
TwoLoops.core.st(19, 2) [entry_invariant_1_0]: ✔️ always true if reached
TwoLoops.core.st(19, 2) [arbitrary_iter_maintain_invariant_1_0]: ✔️ always true if reached
All 4 goals passed.
32 changes: 32 additions & 0 deletions Strata/DL/Imperative/MetaData.lean
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,12 @@ def MetaData.fileRange : MetaDataElem.Field P := .label "fileRange"

def MetaData.reachCheck : MetaDataElem.Field P := .label "reachCheck"

def MetaData.fullCheck : MetaDataElem.Field P := .label "fullCheck"

def MetaData.validityCheck : MetaDataElem.Field P := .label "validityCheck"

def MetaData.satisfiabilityCheck : MetaDataElem.Field P := .label "satisfiabilityCheck"

def MetaData.hasReachCheck {P : PureExpr} [BEq P.Ident] (md : MetaData P) : Bool :=
match md.findElem MetaData.reachCheck with
| some elem =>
Expand All @@ -188,6 +194,32 @@ def MetaData.hasReachCheck {P : PureExpr} [BEq P.Ident] (md : MetaData P) : Bool
| _ => false
| none => false

def MetaData.hasFullCheck {P : PureExpr} [BEq P.Ident] (md : MetaData P) : Bool :=
match md.findElem MetaData.fullCheck with
| some elem =>
match elem.value with
| .switch true => true
| _ => false
| none =>
-- Backward compatibility: reachCheck maps to fullCheck
md.hasReachCheck

def MetaData.hasValidityCheck {P : PureExpr} [BEq P.Ident] (md : MetaData P) : Bool :=
match md.findElem MetaData.validityCheck with
| some elem =>
match elem.value with
| .switch true => true
| _ => false
| none => false

def MetaData.hasSatisfiabilityCheck {P : PureExpr} [BEq P.Ident] (md : MetaData P) : Bool :=
match md.findElem MetaData.satisfiabilityCheck with
| some elem =>
match elem.value with
| .switch true => true
| _ => false
| none => false

def getFileRange {P : PureExpr} [BEq P.Ident] (md: MetaData P) : Option FileRange := do
let fileRangeElement <- md.findElem Imperative.MetaData.fileRange
match fileRangeElement.value with
Expand Down
Loading
Loading