Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
489b66d
Add Ix.Kernel certified checking and set-model consistency proofs
johnchandlerburnham Sep 13, 2026
76dc310
Prove relative consistency for an atomic checkEnvAnon fragment
johnchandlerburnham Sep 13, 2026
8172135
Simplify kernel certification proofs and documentation
johnchandlerburnham Sep 13, 2026
4abe7af
Make verification documentation self-contained
johnchandlerburnham Sep 13, 2026
9615301
Add typed Ixon inputs to certified checking commands
johnchandlerburnham Sep 13, 2026
1bd7a44
Refine polymorphic constant inference into the set model
johnchandlerburnham Sep 13, 2026
ec40b6f
Extend production environment consistency to polymorphic specializations
johnchandlerburnham Sep 13, 2026
2e45671
Extend production consistency to dependent function bodies
johnchandlerburnham Sep 13, 2026
7ee64b4
Refine applications and constant references in function bodies
johnchandlerburnham Sep 13, 2026
4835e6e
Refine polymorphic constant calls inside function bodies
johnchandlerburnham Sep 13, 2026
caa9826
Refine constant cache hits in function inference
johnchandlerburnham Sep 13, 2026
6ff0cca
Prove inference cache preservation for sorts and loaded constants
johnchandlerburnham Sep 13, 2026
cc67fff
Carry cache preservation through recursive inference
johnchandlerburnham Sep 13, 2026
179d25c
Preserve cached witnesses through standalone lazy loading
johnchandlerburnham Sep 13, 2026
acfc296
Preserve cached witnesses through mutual-block loading
johnchandlerburnham Sep 13, 2026
b53bd32
Preserve intern coherence through lazy loading
johnchandlerburnham Sep 13, 2026
7ec2e67
Derive lazy block compatibility from source ownership
johnchandlerburnham Sep 14, 2026
c9c48c1
Preserve owned checker state through recursive inference
johnchandlerburnham Sep 14, 2026
26cdfcc
Derive standalone source agreement through conversion and inference
johnchandlerburnham Sep 14, 2026
0914b69
Derive source cache agreement from execution histories
johnchandlerburnham Sep 14, 2026
c53453c
Admit polymorphic definitions from production checking
johnchandlerburnham Sep 14, 2026
2f0b47c
Reject circular safe definitions during kernel admission
johnchandlerburnham Sep 14, 2026
064301c
Derive inferred type formation for lambda applications
johnchandlerburnham Sep 14, 2026
a0a4dd3
Derive beta conversion from production type checks
johnchandlerburnham Sep 14, 2026
073a425
Prove typed beta prefixes for production reduction
johnchandlerburnham Sep 14, 2026
14bd090
Retain checked type origins through lambda beta reduction
johnchandlerburnham Sep 14, 2026
e734650
Preserve checked type origins through dependent substitution
johnchandlerburnham Sep 14, 2026
2ce0631
Justify type lambdas exposed by dependent arguments
johnchandlerburnham Sep 14, 2026
7702716
Compose reduction origins for supplied lambda applications
johnchandlerburnham Sep 14, 2026
d700fd1
Compose successive beta reductions from retained body checks
johnchandlerburnham Sep 14, 2026
3377f32
Compose finite beta traces through production WHNF
johnchandlerburnham Sep 14, 2026
d44456c
Derive beta-step origins from source inference
johnchandlerburnham Sep 14, 2026
44fd666
Prove beta Pi exposure in application inference
johnchandlerburnham Sep 14, 2026
d849384
Prove composite inference cache reuse
johnchandlerburnham Sep 14, 2026
95d07ce
Transport retained synthesis cache checks
johnchandlerburnham Sep 14, 2026
c9ba57c
Record inference cache execution histories
johnchandlerburnham Sep 14, 2026
913a96b
Prove let inference in production consistency
johnchandlerburnham Sep 14, 2026
e1a03ee
Cover safe recursion and circular declaration boundaries
johnchandlerburnham Sep 14, 2026
10c038b
Derive local-state preservation through the recursive checker
johnchandlerburnham Sep 14, 2026
f1e71c5
Derive inference contexts and binder freshness from execution
johnchandlerburnham Sep 14, 2026
c67db1f
Integrate recursive let inference and retained cache origins
johnchandlerburnham Sep 14, 2026
e2a8863
Integrate sort exposure into recursive inference proofs
johnchandlerburnham Sep 14, 2026
e02ba90
Prove beta reduction with mixed WHNF cache states
johnchandlerburnham Sep 14, 2026
dd43935
Construct beta WHNF traces from successful source runs
johnchandlerburnham Sep 14, 2026
a415fad
Prove explicit-let steps in beta WHNF traces
johnchandlerburnham Sep 14, 2026
a855716
Prove recursive application heads in beta WHNF traces
johnchandlerburnham Sep 14, 2026
c073407
Rebuild cached WHNF annotations from current source readings
johnchandlerburnham Sep 14, 2026
1ab4b18
Derive WHNF cache origins from complete publication histories
johnchandlerburnham Sep 14, 2026
3a3ad24
Preserve WHNF histories and intern coherence through inference
johnchandlerburnham Sep 15, 2026
7d0a277
Decouple consistency proofs from the named specification
johnchandlerburnham Sep 15, 2026
2d94fc5
Retarget compiler proofs to the set-model syntax
johnchandlerburnham Sep 15, 2026
922ff22
Build compiler proofs strictly in every gate
johnchandlerburnham Sep 15, 2026
32863ec
Bundle run assumptions and the checker state invariant
johnchandlerburnham Sep 15, 2026
5a694f4
fix(deps): update rustls for RUSTSEC-2026-0285
johnchandlerburnham Sep 15, 2026
e5925a2
Refresh verification docs and remove stale references
johnchandlerburnham Sep 15, 2026
a2381ce
State the method soundness contracts and their induction
johnchandlerburnham Sep 15, 2026
6eb11c6
Prove natural-literal inference against the primitive Nat entry
johnchandlerburnham Sep 15, 2026
841d78e
Derive model references from the Ixon environment
johnchandlerburnham Sep 15, 2026
31ca582
Prove the non-reducing DefEq tiers under the contracts
johnchandlerburnham Sep 15, 2026
df8640a
Prove WHNF cache layers, loops, and delta under the contracts
johnchandlerburnham Sep 15, 2026
3f7e85d
Prove the reducing DefEq tiers modulo reducer seams
johnchandlerburnham Sep 15, 2026
ffbaa79
Admit singleton inductive blocks through the certified witness
johnchandlerburnham Sep 15, 2026
026b02b
Admit the canonical quotient constants into the model
johnchandlerburnham Sep 15, 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
  •  
  •  
  •  
28 changes: 27 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ jobs:
with:
build-args: "--wfail -v"
test: false
# build-all lint driver compiles every lib/exe target with --wfail, so a
# build-all checks production targets and the consistency foundation
# with --wfail. The legacy named-specification proofs are not part of
# this gate; named-spec-verification.yml builds them on demand. A
# warning in any target (exes, benchmarks, Apps) — not just the default lib
# lean-action builds above — fails CI.
- name: Build all targets
Expand Down Expand Up @@ -86,6 +88,30 @@ jobs:
use-github-cache: false
- name: Test Ix CLI
run: lake test --wfail -- cli
- name: Check certified source and claim adapters
run: lake run check-certified

theory:
needs: build
runs-on: warp-ubuntu-latest-x64-16x
steps:
- uses: actions/checkout@v7
- uses: ./.github/actions/setup-rust-toolchain
- uses: actions/cache/restore@v6
with:
path: ./.lake
key: lake-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ github.sha }}
restore-keys: lake-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-
- uses: leanprover/lean-action@v1
with:
auto-config: false
use-github-cache: false
- name: Check compiler implementation proofs
run: lake build --wfail IxCompileVerify
- name: Check direct kernel consistency refinement
run: lake build --wfail IxKernelConsistency
- name: Check consistency model and exact foundation manifest
run: lake run check-theory

rust-test:
runs-on: warp-ubuntu-latest-x64-8x
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/merge-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@ jobs:
- name: Valgrind FFI
kind: valgrind
runner: warp-ubuntu-latest-x64-8x
- name: Ix.Tc verification and parity
- name: Ix.Kernel verification and parity
kind: tc
runner: warp-ubuntu-latest-x64-16x
test_args: >-
--ignored
tc-anon-diff tc-init tc-tutorial tc-roundtrip tc-ingress-meta
tc-pins tc-accel-diff lean4lean
tc-pins tc-accel-diff
runs-on: ${{ matrix.runner }}
steps:
- name: Validate merge-test variant
Expand Down Expand Up @@ -147,19 +147,19 @@ jobs:
--suppressions=.github/valgrind.supp \
.lake/build/bin/IxTests ffi

- name: Check Ix.Tc exported theorem trust manifest
# The legacy named-specification proofs (`IxKernelVerify` with its exact
# trust manifests and sorry frontier) are not required here; the
# named-spec-verification workflow builds them on demand.
- name: Build Ix compiler verification
if: ${{ matrix.kind == 'tc' }}
run: lake build Ix.Tc.Verify.Audit.Completed Ix.Tc.Verify.Audit.Conditional Ix.Tc.Verify.Audit.Statements
- name: Build Ix.Tc formal verification
run: lake build --wfail IxCompileVerify
- name: Check Ix.Kernel consistency refinement
if: ${{ matrix.kind == 'tc' }}
run: lake build IxTcVerify
- name: Check Ix.Tc verification sorry frontier
if: ${{ matrix.kind == 'tc' }}
run: lake build Ix.Tc.Verify.Audit.SorryFrontier
- name: Test Ix.Tc unit and adversarial fixtures
run: lake build --wfail IxKernelConsistency
- name: Test Ix.Kernel unit and adversarial fixtures
if: ${{ matrix.kind == 'tc' }}
run: lake test --wfail -- tc-unit
- name: Run Ix.Tc ignored tests
- name: Run Ix.Kernel ignored tests
if: ${{ matrix.kind == 'tc' }}
run: lake test --wfail -- ${{ matrix.test_args }}

Expand Down
49 changes: 49 additions & 0 deletions .github/workflows/named-spec-verification.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Named specification verification

# Legacy, non-required track: the Lean4Lean-derived named specification
# (`Ix.Theory.Named`) and the `Ix.Kernel.Verify` implementation proofs
# stated against it, with their exact trust manifests and sorry frontier.
# The kernel proof gate required on every PR is `lake build --wfail
# IxKernelConsistency` in ci.yml, whose audit rejects any `Ix.Theory.Named`
# module in its import closure. This track is being retired in favour of the
# set model, so it runs on demand and on a weekly schedule only; its audit
# numbers are frozen at the counts recorded in the manifests it builds.

on:
workflow_dispatch:
schedule:
# Weekly, Monday 06:00 UTC.
- cron: '0 6 * * 1'

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
named-spec:
runs-on: warp-ubuntu-latest-x64-16x
steps:
- uses: actions/checkout@v7
- uses: ./.github/actions/setup-rust-toolchain
# Same `.lake` cache as ci.yml (`./.lake`, per-sha key with prefix
# fallback): the newest CI build of the toolchain/manifest pair is
# restored and Lake rebuilds whatever differs. Restore-only: this
# workflow never publishes a cache entry that ci.yml could restore.
- uses: actions/cache/restore@v6
with:
path: ./.lake
key: lake-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-${{ github.sha }}
restore-keys: lake-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain') }}-${{ hashFiles('lake-manifest.json') }}-
- uses: leanprover/lean-action@v1
with:
auto-config: false
use-github-cache: false
- name: Build named-specification implementation proofs
run: lake build IxKernelVerify
- name: Check Ix.Kernel exported theorem trust manifest
run: lake build Ix.Kernel.Verify.Audit.Completed Ix.Kernel.Verify.Audit.Conditional Ix.Kernel.Verify.Audit.Statements
- name: Check Ix.Kernel verification sorry frontier
run: lake build Ix.Kernel.Verify.Audit.SorryFrontier
47 changes: 47 additions & 0 deletions .github/workflows/set-theory-model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Set-theory model

on:
pull_request:
paths:
- 'Models/SetTheory/**'
- 'Ix/Theory/Model/SetTheory/Core.lean'
- 'lakefile.lean'
- 'lake-manifest.json'
- 'lean-toolchain'
- '.github/workflows/set-theory-model.yml'
merge_group:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
model:
runs-on: warp-ubuntu-latest-x64-16x
timeout-minutes: 60
defaults:
run:
working-directory: Models/SetTheory
env:
MATHLIB_NO_CACHE_ON_UPDATE: '1'
MATHLIB_CACHE_DIR: .lake/mathlib-cache
steps:
- uses: actions/checkout@v7
- uses: leanprover/lean-action@v1
with:
auto-config: false
use-github-cache: false
- name: Check Lean toolchains match
run: cmp ../../lean-toolchain lean-toolchain
- uses: actions/cache@v6
with:
path: Models/SetTheory/.lake
key: set-theory-model-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('Models/SetTheory/lean-toolchain', 'Models/SetTheory/lakefile.toml', 'Models/SetTheory/lake-manifest.json') }}
- name: Fetch the imported Mathlib modules and dependencies
run: lake exe cache get Mathlib.SetTheory.Cardinal.Regular Mathlib.SetTheory.ZFC.VonNeumann Mathlib.SetTheory.ZFC.Cardinal
- name: Build model and check axiom guard
run: lake build --wfail
6 changes: 3 additions & 3 deletions BENCHMARKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Head-to-head timings for every stage of the Ix pipeline across three
environments, comparing the pure-Lean implementation (`Ix.CompileM` /
`Ix.DecompileM` / `Ix.Tc`) against the Rust implementation
`Ix.DecompileM` / `Ix.Kernel`) against the Rust implementation
(`crates/compile` / `crates/kernel`).

## Methodology
Expand Down Expand Up @@ -119,7 +119,7 @@ Rust: `ix decompile` (the decompile pass over a `.ixe`). Lean:
flags → Pass 2 aux regeneration/recovery) *plus* the hash comparison
against the canonicalized source (comparison overhead ~5 s at 205k
constants). Lean decompilation is dominated by Pass 2's kernel bridge
(regeneration re-infers through `Ix.Tc`); Pass 2 runs on the
(regeneration re-infers through `Ix.Kernel`); Pass 2 runs on the
wave-parallel driver (`decompileEnvPass2Parallel`, 16 workers — the
count is memory-bound, not core-bound; `IX_DECOMPILE_WORKERS`
overrides). The sequential figures from before the parallel driver are
Expand Down Expand Up @@ -147,7 +147,7 @@ full verdict parity.
worker config keeps warm caches; both a 32-worker meta run and a
32-worker anon run without cache clearing were OOM-killed while
swap-thrashing). The anon row uses the scale configuration from the
`Ix.Tc` Mathlib-tier validation: 16 workers, `--clear-every 50`
`Ix.Kernel` Mathlib-tier validation: 16 workers, `--clear-every 50`
(whole-worker-state renewal every 50 items; RSS plateaus ~42 GB) —
**640,658/640,658 passed, zero failures, full verdict parity**. Anon
mode dedups alpha-identical constants, hence the smaller count.
Expand Down
Loading
Loading