Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
00ff842
WIP: Ixon serialization rewrite with 85% size reduction
johnchandlerburnham Jan 14, 2026
1868bbb
cargo clippy, fmt, plus a per-constant size utility in the integratio…
johnchandlerburnham Jan 14, 2026
f776074
WIP: Docs and serialization improvements
johnchandlerburnham Jan 15, 2026
1727e5b
WIP: Docs
johnchandlerburnham Jan 15, 2026
745f39a
Fix sharing vector topological ordering and hash-consed size calculation
johnchandlerburnham Jan 15, 2026
0c733ef
fix docs
johnchandlerburnham Jan 16, 2026
d32d667
tmp
johnchandlerburnham Jan 21, 2026
818acc3
Merge branch 'main' of github.com:argumentcomputer/ix into jcb/lacon
johnchandlerburnham Jan 21, 2026
6854e0f
canonicalization
johnchandlerburnham Jan 21, 2026
b29eea1
Add pure Lean compiler (CompileM) with cross-implementation verific…
johnchandlerburnham Jan 30, 2026
5100568
Delete old/legacy code, fix all clippy warnings
johnchandlerburnham Feb 2, 2026
bff1e39
Add doc comments across Lean and Rust modules, document test suites i…
johnchandlerburnham Feb 2, 2026
cb56065
Activate pure Lean decompiler with metadata support and roundtrip test
johnchandlerburnham Feb 2, 2026
faa2cce
chore: `Name::get_hash` can return a reference instead of copying (#297)
arthurpaulino Feb 3, 2026
690b8c3
Align Lean/Rust error types for FFI, add Rust serialize and decompi…
johnchandlerburnham Feb 3, 2026
afa4e6c
Merge branch 'jcb/lacon' of github.com:argumentcomputer/ix into jcb/l…
johnchandlerburnham Feb 3, 2026
4f67658
Implement meaningful Shrinkable instances for property-based test g…
johnchandlerburnham Feb 3, 2026
77fbe6e
Remove dead Tests/Ix/FFI.lean, all content migrated to Tests/FFI/*
johnchandlerburnham Feb 3, 2026
f5b8f8e
Track all name components during Lean compilation to match Rust
johnchandlerburnham Feb 4, 2026
ac4f620
Add Claim/Commit modules with commitment pipeline and alpha-invaria…
johnchandlerburnham Feb 4, 2026
03ac8cd
fix: Nix build and tests (#299)
samuelburnham Feb 5, 2026
8a55e1b
Improve documentation and modernize Rust module structure
johnchandlerburnham Feb 5, 2026
3169839
fix breaking module doc comments
johnchandlerburnham Feb 5, 2026
575e030
remove Toy.lean file
johnchandlerburnham Feb 5, 2026
49ebead
Add unit tests for 5 untested Rust modules and instrument compile t…
johnchandlerburnham Feb 5, 2026
1013beb
fix: Nix tests
samuelburnham Feb 5, 2026
c6144ff
fix: Address review findings across compilation pipeline
johnchandlerburnham Feb 6, 2026
8796804
Merge branch 'jcb/lacon' of github.com:argumentcomputer/ix into jcb/l…
johnchandlerburnham Feb 6, 2026
ef54770
fix: Resolve clippy warnings and formatting issues
johnchandlerburnham Feb 6, 2026
43cfc22
fix: Address review findings across branch
johnchandlerburnham Feb 6, 2026
efb3ff0
Harden FFI boundary and make serialization deterministic
johnchandlerburnham Feb 6, 2026
9236fea
Use Tag0 for ReducibilityHints.regular height serialization
johnchandlerburnham Feb 6, 2026
c12b8d5
Harden FFI, remove debug output, and fix unsafe patterns
johnchandlerburnham Feb 6, 2026
5368d72
formatting
johnchandlerburnham Feb 6, 2026
364231d
xclippy warnings
johnchandlerburnham Feb 6, 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
8 changes: 5 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@ jobs:
with:
build-args: "--wfail -v"
test: true
- run: |
lake build bench-aiur
lake build bench-blake3
- name: Test Ix CLI
run: |
mkdir -p ~/.local/bin
lake test -- cli
- run: lake exe test-aiur
- run: lake exe test-ixvm
- run: |
lake build bench-aiur
lake build bench-blake3
- name: Check lean.h.hash
run: lake run check-lean-h-hash

Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ jobs:
# Ix benches
- run: nix build .#bench-aiur --print-build-logs --accept-flake-config
- run: nix build .#bench-blake3 --print-build-logs --accept-flake-config
- run: nix build .#bench-shardmap --print-build-logs --accept-flake-config
# Ix tests
- run: nix build .#test --print-build-logs --accept-flake-config
- run: nix run .#test --accept-flake-config
- run: nix run .#test-aiur --accept-flake-config
- run: nix run .#test-ixvm --accept-flake-config

# Tests Nix devShell support on Ubuntu
nix-devshell:
Expand Down
41 changes: 18 additions & 23 deletions Apps/ZKVoting/Prover.lean
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Ix.Claim
import Ix.Commit
import Ix.Address
import Ix.Meta
import Ix.CompileM
Expand All @@ -14,7 +15,7 @@ structure Result where
charlieVotes: Nat
deriving Repr, Lean.ToExpr

def privateVotes : List Candidate :=
def privateVotes : List Candidate :=
[.alice, .alice, .bob]

def runElection (votes: List Candidate) : Result :=
Expand All @@ -26,37 +27,31 @@ def runElection (votes: List Candidate) : Result :=
| .bob, ⟨a, b, c⟩ => ⟨a, b+1, c⟩
| .charlie, ⟨a, b, c⟩ => ⟨a, b, c+1⟩

open Ix.Compile

def main : IO UInt32 := do
let mut env : Lean.Environment := <- get_env!
let mut env : Lean.Environment ← get_env!

-- 1. Full compilation via Rust
let phases ← Ix.CompileM.rsCompilePhases env
let mut compileEnv := Ix.Commit.mkCompileEnv phases

-- simulate getting the votes from somewhere
let votes : List Candidate <- pure privateVotes
let votes : List Candidate pure privateVotes
let mut as : List Lean.Name := []
-- the type of each vote to commit
let voteType := Lean.toTypeExpr Candidate
-- loop over the votes
for v in votes do
-- add each vote to our environment as a commitment
let (lvls, typ, val) <- runMeta (metaMakeDef v) env
let ((addr, _), stt) <- (commitDef lvls typ val).runIO env
env := stt.env
as := (Address.toUniqueName addr)::as
IO.println s!"vote: {repr v}, commitment: {addr}"
let (lvls, typ, val) ← runMeta (metaMakeDef v) env
let (commitAddr, env', compileEnv') ← Ix.Commit.commitDef compileEnv env lvls typ val
env := env'
compileEnv := compileEnv'
as := (Address.toUniqueName commitAddr)::as
IO.println s!"vote: {repr v}, commitment: {commitAddr}"
-- build a Lean list of our commitments as the argument to runElection
let arg : Lean.Expr <- runMeta (metaMakeList voteType as) env
let (lvls, input, output, type, sort) <-
let arg : Lean.Expr runMeta (metaMakeList voteType as) env
let (lvls, input, output, type, _sort) ←
runMeta (metaMakeEvalClaim ``runElection [arg]) env
let inputPretty <- runMeta (Lean.Meta.ppExpr input) env
let outputPretty <- runMeta (Lean.Meta.ppExpr output) env
let typePretty <- runMeta (Lean.Meta.ppExpr type) env
IO.println s!"claim: {inputPretty}"
IO.println s!" ~> {outputPretty}"
IO.println s!" : {typePretty}"
IO.println s!" @ {repr lvls}"
let ((claim,_,_,_), _stt') <-
(evalClaim lvls input output type sort true).runIO env
let claim ← IO.ofExcept <| Ix.Commit.evalClaim compileEnv lvls input output type
IO.println s!"{claim}"
-- Ix.prove claim stt
return 0

5 changes: 2 additions & 3 deletions Apps/ZKVoting/Verifier.lean
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import Ix.Ixon.Serialize
import Ix.Prove
import Ix.Claim

def main (args : List String) : IO UInt32 := do
def main (_args : List String) : IO UInt32 := do
-- TODO
-- let mut votes := #[]
-- for commStr in args do
Expand Down
Loading