Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
c62cfb4
Add contract pass
keyboardDrummer May 28, 2026
a95da10
Cleanup
keyboardDrummer May 28, 2026
49255b4
Fixes
keyboardDrummer May 28, 2026
10640f7
Fixes
keyboardDrummer May 28, 2026
8c15c16
Do not run the contract pass for functions yet
keyboardDrummer May 28, 2026
573a36b
Reduce id changes
keyboardDrummer May 28, 2026
74ec111
Fixes
keyboardDrummer May 28, 2026
800f6c4
Test fixes
keyboardDrummer May 28, 2026
e56cb20
Fix test
keyboardDrummer May 28, 2026
a352b47
Fix test
keyboardDrummer May 28, 2026
65c92f4
Fix test
keyboardDrummer May 28, 2026
4a8c667
Remove unused files
keyboardDrummer May 28, 2026
d7d7205
Undo Python test changes
keyboardDrummer May 28, 2026
60c9ca3
Fixes
keyboardDrummer May 28, 2026
a526dad
Add missing bindings for PrimitiveOp
keyboardDrummer May 28, 2026
ace39ca
Improve comment
keyboardDrummer May 28, 2026
8875ffd
Merge branch 'transparency-pass-only' into issue-924-contract-and-pro…
keyboardDrummer May 28, 2026
9400328
Generate separate $pre and $post procedures for each condition
keyboardDrummer-bot May 28, 2026
6c0c39c
Fix contract pass: preserve postconditions in Opaque/Abstract bodies
keyboardDrummer-bot May 28, 2026
d6bff50
Fix contract pass: make postcondition helpers functional
keyboardDrummer-bot May 28, 2026
2cae5e0
Update golden-file expected outputs for changed label counters
keyboardDrummer-bot May 28, 2026
944ffbd
Merge branch 'transparency-pass-only' into issue-924-contract-and-pro…
keyboardDrummer Jun 1, 2026
20225bd
Trigger CI
keyboardDrummer Jun 2, 2026
b52f50b
Trigger CI
keyboardDrummer Jun 2, 2026
b6f0f64
Don't generate intermediate files
keyboardDrummer Jun 2, 2026
6ee3c7e
Exclude hidden files from the lake cache hash
keyboardDrummer Jun 2, 2026
4b44fbf
Exclude hidden files from the lake cache hash
keyboardDrummer Jun 2, 2026
ac0fdb1
Update recursive test to use procedures
keyboardDrummer Jun 3, 2026
e9887a6
Merge branch 'transparency-pass-only' into issue-924-contract-and-pro…
keyboardDrummer Jun 4, 2026
70cb26e
Fixes
keyboardDrummer Jun 4, 2026
dbfcb95
Remove unused module
keyboardDrummer Jun 4, 2026
4e4ceb9
Fix bugs in Function typing (#1288)
joscoh Jun 4, 2026
2f8eb11
Fix bug in Resolution.lean
keyboardDrummer Jun 4, 2026
0044067
Factor out theorems and lemmas into dedicated Props files (#1327)
aqjune-aws Jun 5, 2026
5bd758d
Fix/precond and conjunction main2 (#1318)
kondylidou Jun 5, 2026
1af6cc1
Small doc cleanups (#1333)
atomb Jun 5, 2026
dda37e4
Add induction principle for `resolveAux` and clean up type inference …
joscoh Jun 5, 2026
618f22b
Fix outdated ion-java jar path in README (#1336)
amanda-zx Jun 6, 2026
c4e4a41
Examples using Lean to prove VCs of Core programs (#1219)
atomb Jun 8, 2026
ead057a
docs(BooleFeatureRequests) (#1300)
kondylidou Jun 8, 2026
2e525e8
Merge main into main2 (2026-06-08) (#1346)
shigoel Jun 8, 2026
a364a70
Support transparent procedures (#1215)
keyboardDrummer Jun 9, 2026
389e214
Merge branch 'transparency-pass-only' into issue-924-contract-and-pro…
keyboardDrummer Jun 10, 2026
d141467
Merge commit 'a364a70a~1' into issue-924-contract-and-proof-pass
keyboardDrummer Jun 10, 2026
87d7214
Merge commit 'a364a70a' into issue-924-contract-and-proof-pass
keyboardDrummer Jun 10, 2026
0b10086
Procedure.Body sum type with parser, translator, and consumer threadi…
PROgram52bc Jun 10, 2026
cde0447
Add array axiomatization as a standalone SMT-IR transformation (#795)
abdoo8080 Jun 10, 2026
4918dfe
fix(laurel): allow a valueless return in the grammar (#1354)
fabiomadge Jun 11, 2026
61c2e83
Address quality follow-ups from review
keyboardDrummer-bot Jun 11, 2026
9ca5c77
Add test and fix for counter created by contract pass
keyboardDrummer Jun 11, 2026
b4938f0
Update Strata/Languages/Laurel/ContractPass.lean
keyboardDrummer Jun 11, 2026
3c0e745
Merge branch 'issue-924-contract-and-proof-pass' of github.com:keyboa…
keyboardDrummer Jun 11, 2026
9c9ace9
Update Strata/Languages/Laurel/EliminateValuesInReturns.lean
keyboardDrummer Jun 11, 2026
d8d9b96
Merge branch 'issue-924-contract-and-proof-pass' of github.com:keyboa…
keyboardDrummer Jun 11, 2026
bef6885
Cleanup
keyboardDrummer Jun 11, 2026
96982e3
Merge remote-tracking branch 'fork/quality-followups-from-fabiomadge'…
keyboardDrummer Jun 11, 2026
551e699
partial
keyboardDrummer Jun 11, 2026
67f43bf
Simplify termination proof
keyboardDrummer Jun 11, 2026
ba8524a
Merge branch 'main2' into issue-924-contract-and-proof-pass
keyboardDrummer Jun 11, 2026
ac0b6be
Fix test
keyboardDrummer Jun 11, 2026
31e9007
Merge branch 'noHiddenFilesInHash' into issue-924-contract-and-proof-…
keyboardDrummer Jun 11, 2026
a68c98b
Exclude hidden files from the lake cache hash (#1313)
keyboardDrummer Jun 11, 2026
ea1ea46
Document Laurel passes and their dependencies, and other documentatio…
keyboardDrummer Jun 11, 2026
f7f6dee
Fix evaluator scoping in Imperative small-step semantics (#1337)
aqjune-aws Jun 11, 2026
655e196
Overhaul test framework for Laurel (#1223)
leo-leesco Jun 11, 2026
7eef859
Code review changes
keyboardDrummer Jun 12, 2026
4b8ef55
Merge remote-tracking branch 'origin/main2' into issue-924-contract-a…
keyboardDrummer Jun 12, 2026
237eabe
Pass tweaks
keyboardDrummer Jun 12, 2026
4ffc62f
Fixes
keyboardDrummer Jun 12, 2026
5178451
More pass refactoring changes
keyboardDrummer Jun 12, 2026
0ba057d
Fixes
keyboardDrummer Jun 12, 2026
1627ce4
Fixes
keyboardDrummer Jun 12, 2026
dde88b1
feat(laurel): Support bitvector types as composite fields (#1357)
olivier-aws Jun 12, 2026
816a738
Include final pass in the all pass list
keyboardDrummer Jun 13, 2026
8470d93
Fixes
keyboardDrummer Jun 13, 2026
aebe44c
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 13, 2026
b7508d7
Fix test
keyboardDrummer Jun 13, 2026
f1507d1
Update Laurel docs
keyboardDrummer Jun 13, 2026
1077979
Change text
keyboardDrummer Jun 13, 2026
b30f4cb
Fix invokeOn axiom: guard with preconditions + reject output-referenc…
keyboardDrummer-bot Jun 13, 2026
6dd545a
Fix if-then-else prepend duplication in LiftImperativeExpressions
keyboardDrummer-bot Jun 13, 2026
8abb463
feat(laurel): add Java-style ++ and -- operators (#1320)
olivier-aws Jun 15, 2026
24b8f04
Per-invariant source ranges for loop-invariant diagnostics (#1361)
kadirayk Jun 16, 2026
d1f9d6c
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 16, 2026
0322796
Fix test
keyboardDrummer Jun 16, 2026
878f325
Code review
keyboardDrummer Jun 16, 2026
e0c8b68
Fix early return
keyboardDrummer Jun 16, 2026
a63384a
Fix lifting bug
keyboardDrummer Jun 16, 2026
02ad82c
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 16, 2026
4d3cbac
feat(laurel): Adding surface syntax for calling instance procedures &…
AD1024 Jun 16, 2026
799f167
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 16, 2026
0c99354
fix(laurel): datatype `==`/`!=` mis-lowered to reference comparison i…
fabiomadge Jun 17, 2026
83e793b
Port fixes to lifting pass
keyboardDrummer Jun 18, 2026
6e0ce93
Merge branch 'reviewed-kbd-will-merge-to-main' into issue-924-contrac…
keyboardDrummer Jun 18, 2026
9c40e44
Add type checking to Laurel resolution pass (#1121)
keyboardDrummer-bot Jun 18, 2026
e1fc044
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 18, 2026
dcfb0e9
Some fixes for resolution during phases
keyboardDrummer Jun 18, 2026
a0ec015
Fixes to resolution so it throws fewer errors during passes
keyboardDrummer Jun 18, 2026
25f1d5d
Emit resolution errors during passes
keyboardDrummer Jun 18, 2026
fa7f844
Source fix
keyboardDrummer Jun 18, 2026
441ec1e
Improve well-formedness of the 3 heap passes
keyboardDrummer Jun 18, 2026
cf706b2
Fix for type hierarchy
keyboardDrummer Jun 18, 2026
66589c5
Refactoring
keyboardDrummer Jun 18, 2026
903f89e
Allow dangling addition in blocks
keyboardDrummer Jun 18, 2026
1a0e8ae
Fix diagnostic and test
keyboardDrummer Jun 18, 2026
018939b
Remove function return type expectation check
keyboardDrummer Jun 18, 2026
8d34b32
Update resolver check to use procedure instead of function
keyboardDrummer Jun 18, 2026
d9b39ac
Small improvements
keyboardDrummer Jun 18, 2026
a24cc86
Merge branch 'issue-924-contract-and-proof-pass' of github.com:keyboa…
keyboardDrummer Jun 18, 2026
c438d8c
Merge branch 'fixResolutionErrorsDuringPhases' into issue-924-contrac…
keyboardDrummer Jun 18, 2026
fcb3903
Fix merge
keyboardDrummer Jun 18, 2026
4efaebd
Remove obsolete test
keyboardDrummer Jun 18, 2026
45784fa
fix(laurel): Run LiftInstanceProcedure before EliminateValueInReturns…
olivier-aws Jun 18, 2026
925423b
File-relative error reporting (#1367)
leo-leesco Jun 18, 2026
81f20ab
Fix resolution errors during phases (#1389)
keyboardDrummer Jun 19, 2026
8ce6fc6
Add multi output test-case to ImpureExpressions
keyboardDrummer Jun 19, 2026
157ec6b
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 19, 2026
d7a4c3c
Refactor liftImperative
keyboardDrummer Jun 19, 2026
0b03bff
Simplify lift pass
keyboardDrummer Jun 19, 2026
97e3146
Bring back test
keyboardDrummer Jun 19, 2026
ffcc39d
Recursion proof refactoring
keyboardDrummer Jun 19, 2026
1ef148f
Fix proofs
keyboardDrummer Jun 19, 2026
0abd9ef
laurel: wire old() to Core two-state semantics (#1203)
julesmt Jun 20, 2026
a279ff7
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 22, 2026
34c850f
Cleanup
keyboardDrummer Jun 22, 2026
12b5e59
Fix
keyboardDrummer Jun 22, 2026
bfc0b6c
Fix test
keyboardDrummer Jun 22, 2026
2e2a7b3
Fix tests
keyboardDrummer Jun 22, 2026
5f46178
Update expect file
keyboardDrummer Jun 22, 2026
a6e0cee
fix(laurel) : incorrect reporting of mismatched annotation location (…
leo-leesco Jun 22, 2026
064e019
fix(core): isolate path conditions at the procedure boundary (#1391)
fabiomadge Jun 22, 2026
2c8eaa1
feat(laurel): add body-tested do-while loop (#1358)
fabiomadge Jun 23, 2026
8d6aa98
feat(laurel): paren-free field ++/--, and chained-field-access test c…
fabiomadge Jun 23, 2026
6a074b1
[Laurel] Support constrained types as composite fields (#1364)
olivier-aws Jun 23, 2026
16be9b5
Merge remote-tracking branch 'origin/reviewed-kbd-will-merge-to-main'…
keyboardDrummer Jun 23, 2026
97870a3
Undo added test and fix related to that
keyboardDrummer Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 20 additions & 0 deletions .github/actions/check-copyright-headers/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright Strata Contributors
# SPDX-License-Identifier: Apache-2.0 OR MIT
name: Check copyright headers
description: >
Verify that all .lean files have the expected copyright header.
Downstream repos can add their own checks for other file types.

inputs:
directory:
description: Root directory to scan (relative to the workspace).
required: false
default: "."

runs:
using: composite
steps:
- name: Check copyright headers
shell: bash
run: |
python3 "${{ github.action_path }}/../../scripts/check_copyright_headers.py" "${{ inputs.directory }}"
20 changes: 20 additions & 0 deletions .github/actions/check-lean-import/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright Strata Contributors
# SPDX-License-Identifier: Apache-2.0 OR MIT
name: Check Lean import
description: >
Ensure no .lean file uses a bare "import Lean" statement. Encourages
importing only the specific parts of Lean that are needed.

inputs:
directory:
description: Directory to scan for .lean files (relative to the workspace).
required: false
default: "."

runs:
using: composite
steps:
- name: Check for bare import Lean
shell: bash
run: |
"${{ github.action_path }}/../../scripts/checkLeanImport.sh" "${{ inputs.directory }}"
24 changes: 24 additions & 0 deletions .github/actions/check-no-panic/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Copyright Strata Contributors
# SPDX-License-Identifier: Apache-2.0 OR MIT
name: Check no panic
description: >
Detect net-new panic! calls introduced in a PR. Only fails when more
panics are added than removed. Suppression: add "-- nopanic:ok" on a line.
Requires actions/checkout with fetch-depth: 0 (needs full git history to
compute the merge base).

inputs:
base-ref:
description: >
Git ref to diff against (e.g. "origin/main"). The script computes
the merge base automatically.
required: false
default: "origin/main"

runs:
using: composite
steps:
- name: Check for new panic! usage
shell: bash
run: |
"${{ github.action_path }}/../../scripts/checkNoPanic.sh" "${{ inputs.base-ref }}"
19 changes: 19 additions & 0 deletions .github/actions/lint-whitespace/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright Strata Contributors
# SPDX-License-Identifier: Apache-2.0 OR MIT
name: Lint whitespace
description: >
Check .lean files for trailing whitespace and missing final newlines.

inputs:
directory:
description: Directory to scan for .lean files (relative to the workspace).
required: false
default: "Strata"

runs:
using: composite
steps:
- name: Check for trailing whitespace
shell: bash
run: |
"${{ github.action_path }}/../../scripts/lintWhitespace.sh" "${{ inputs.directory }}"
6 changes: 3 additions & 3 deletions .github/actions/restore-lake-cache/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ runs:
uses: actions/cache/restore@v5
with:
path: ${{ inputs.path }}
key: ${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('**/*.st') }}-${{ github.sha }}
key: ${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('[^.]*/**/*.st', '*.st') }}-${{ github.sha }}
restore-keys: |
${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('**/*.st') }}
${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('[^.]*/**/*.st', '*.st') }}
${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}
${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}
fail-on-cache-miss: ${{ inputs.fail-on-cache-miss }}
Expand All @@ -78,5 +78,5 @@ runs:
uses: actions/cache/restore@v5
with:
path: ${{ inputs.path }}
key: ${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('**/*.st') }}-${{ github.sha }}
key: ${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('[^.]*/**/*.st', '*.st') }}-${{ github.sha }}
fail-on-cache-miss: ${{ inputs.fail-on-cache-miss }}
2 changes: 1 addition & 1 deletion .github/actions/save-lake-cache/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ runs:
uses: actions/cache/save@v5
with:
path: ${{ inputs.path }}
key: ${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('**/*.st') }}-${{ github.sha }}
key: ${{ inputs.key-prefix }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ hashFiles('[^.]*/**/*.st', '*.st') }}-${{ github.sha }}
6 changes: 4 additions & 2 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ Python:
- changed-files:
- any-glob-to-any-file:
- 'StrataPython/**'
- 'Tools/Python/**'
- 'Tools/Python-base/**'
- 'StrataPython/Tools/strata-python/**'

Laurel:
- changed-files:
Expand Down Expand Up @@ -41,7 +42,8 @@ dependencies:
- 'lake-manifest.json'
- 'lakefile.toml'
- 'lean-toolchain'
- 'Tools/Python/pyproject.toml'
- 'Tools/Python-base/pyproject.toml'
- 'StrataPython/Tools/strata-python/pyproject.toml'
- 'Tools/BoogieToStrata/**/*.csproj'
- 'Tools/BoogieToStrata/**/*.sln'

Expand Down
4 changes: 3 additions & 1 deletion .github/scripts/checkLeanImport.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
# Check to identify modules that inadvertently import all of Lean.
# We want to encourage only importing parts of Lean when needed.

! (find . -name "*.lean" -type f -print0 | xargs -0 grep -E -n '^import Lean$')
LINT_DIR="${1:-.}"

! (find "$LINT_DIR" -name "*.lean" -type f -print0 | xargs -0 grep -E -n '^import Lean$')
16 changes: 1 addition & 15 deletions .github/scripts/check_copyright_headers.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,6 @@ def check_all_source_files(directory: Path, ext: str, header: str) -> bool:
SPDX-License-Identifier: Apache-2.0 OR MIT
-/"""

python_copyright_header = """\
# Copyright Strata Contributors
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
"""

def main():
"""Main function to handle command line arguments"""
if len(sys.argv) != 2:
Expand All @@ -73,15 +67,7 @@ def main():
sys.exit(1)

directory_path = Path(sys.argv[1])
success = True

if not check_all_source_files(directory_path, ext=".lean", header=lean_copyright_header):
success = False

if not check_all_source_files(directory_path / 'Tools', ext=".py", header=python_copyright_header):
success = False

# Exit with appropriate code
success = check_all_source_files(directory_path, ext=".lean", header=lean_copyright_header)
sys.exit(0 if success else 1)

if __name__ == "__main__":
Expand Down
5 changes: 4 additions & 1 deletion .github/scripts/lintWhitespace.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
#!/bin/bash
set -e

LINT_DIR="${1:-Strata}"

tmpfile=$(mktemp)
issues_found=0

find Strata -type f -name "*.lean" | while IFS= read -r file; do
find "$LINT_DIR" -type f -name "*.lean" | while IFS= read -r file; do
# Check for trailing whitespace and print line number if found
while IFS=: read -r line_num line; do
echo "Trailing whitespace found in $file at line $line_num: $line"
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/cbmc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ jobs:
- name: Run Python CBMC pipeline tests
shell: bash
run: |
pip install ./Tools/Python
pip install ./Tools/Python-base
pip install ./StrataPython/Tools/strata-python
./StrataPython/StrataPythonTest/run_py_cbmc_tests.sh
- name: Run property summary tests
shell: bash
Expand Down
17 changes: 10 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,9 @@ jobs:
with:
python-version: '3.14'
- name: Build using pip
run: pip install .
working-directory: Tools/Python
run: |
pip install ./Tools/Python-base
pip install ./StrataPython/Tools/strata-python
- name: Run pyInterpret golden-file tests
working-directory: StrataPython/StrataPythonTest
shell: bash
Expand Down Expand Up @@ -145,8 +146,9 @@ jobs:
with:
python-version: '3.14'
- name: Build using pip
run: pip install .
working-directory: Tools/Python
run: |
pip install ./Tools/Python-base
pip install ./StrataPython/Tools/strata-python
- name: Restore Lean build cache
# The cache is safe to use here because we just saved it for this exact SHA
# in the build_and_test_lean job
Expand Down Expand Up @@ -261,8 +263,9 @@ jobs:
with:
python-version: ${{ matrix.python_version }}
- name: Build using pip
run: pip install .
working-directory: Tools/Python
run: |
pip install ./Tools/Python-base
pip install ./StrataPython/Tools/strata-python
- name: Restore Lean build cache
# The cache is safe to use here because we just saved it for this exact SHA
# in the build_and_test_lean job from ci.yml
Expand Down Expand Up @@ -304,7 +307,7 @@ jobs:
working-directory: StrataPython
- name: Run test script
run: FAIL_FAST=1 ./scripts/run_cpython_tests.sh ${{ matrix.python_version }}
working-directory: Tools/Python
working-directory: StrataPython/Tools/strata-python

cbmc:
needs: build_and_test_lean
Expand Down
6 changes: 1 addition & 5 deletions .kiro/steering/structure.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ Strata is a Lean4 verification framework using **dialects** as composable langua
- `Strata/` - Core implementation (DDM, dialects, languages, transforms, backends)
- `StrataTest/` - Unit tests (mirrors Strata/ structure)
- `Examples/` - Sample programs (`.st` files, naming: `<name>.<dialect>.st`)
- `Tools/` - External tools (BoogieToStrata, Python utilities)
- `vcs/` - Generated SMT2 verification conditions

### Core Components

Expand All @@ -34,9 +32,7 @@ Strata is a Lean4 verification framework using **dialects** as composable langua
- `Core/` - Primary verification language (procedures, contracts, VCG, SMT encoding)
- `C_Simp/` - Simplified C-like language
- `Dyn/` - Dynamic language example
- `Laurel/` - A common representation for front-end languages like Java, Python and JavaScript.
Translated to Core.
- `Python/` - The well-known Python language
- `Laurel/` - A common representation for front-end languages like Java, Python and JavaScript. Translated to Core.

**`Strata/Transform/`** - Program Transformations
- Each transformation has implementation + optional correctness proof (`*Correct.lean`)
Expand Down
23 changes: 23 additions & 0 deletions Examples/CFGNondet.core.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
program Core;

// Nondeterministic CFG: y is set to either 1 or 2.
procedure NondetChoice(out y : int)
spec {
ensures (y == 1 || y == 2);
}
cfg entry {
entry: {
goto left, right;
}
left: {
y := 1;
goto done;
}
right: {
y := 2;
goto done;
}
done: {
return;
}
};
48 changes: 48 additions & 0 deletions Examples/CFGSimple.core.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
program Core;

// A simple deterministic CFG: compute max of two integers.
procedure Max(x : int, y : int, out m : int)
spec {
ensures (m >= x);
ensures (m >= y);
ensures (m == x || m == y);
}
cfg entry {
entry: {
branch (x >= y) goto then_branch else goto else_branch;
}
then_branch: {
m := x;
goto done;
}
else_branch: {
m := y;
goto done;
}
done: {
return;
}
};

// A CFG with a simple loop: increment y until it reaches n.
procedure CountUp(n : int, out y : int)
spec {
requires (n >= 0);
ensures (y == n);
}
cfg entry {
entry: {
y := 0;
goto loop;
}
loop: {
branch (y < n) goto body else goto done;
}
body: {
y := y + 1;
goto loop;
}
done: {
return;
}
};
Loading
Loading