Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
20b489b
stark: add field-generic constraint IR with builder and CPU interpreter
MauroToscano Jul 2, 2026
ad15768
stark: unit tests for the constraint IR, incl. a non-Goldilocks tower
MauroToscano Jul 2, 2026
b7da04c
stark: add the ConstraintBuilder single-body constraint framework
MauroToscano Jul 2, 2026
87ddd90
stark: zerofier evaluation as free functions of ConstraintMeta
MauroToscano Jul 2, 2026
e72e1b3
docs(gpu-constraint-eval): single-source constraints plan + constrain…
MauroToscano Jul 2, 2026
6ba06f5
stark: pre-flight guards for the constraint switch
MauroToscano Jul 2, 2026
3ab24cb
prover: single-body emit twins for the template and CPU constraints
MauroToscano Jul 2, 2026
1e64bb9
prover: old-vs-new random-row differentials for the emit twins
MauroToscano Jul 2, 2026
dece3d9
docs(gpu-constraint-eval): retire golden-proof gate (nondeterministic…
MauroToscano Jul 2, 2026
53b0745
spike(stark): convert EQ + STORE tables to single-source ConstraintSet
MauroToscano Jul 2, 2026
4547890
sscs: convert LT table to single-source ConstraintSet + differential …
MauroToscano Jul 2, 2026
5612427
spike(stark): convert MEMW / MEMW_A / MEMW_R tables to single-source …
MauroToscano Jul 2, 2026
178d551
spike(stark): convert BRANCH + COMMIT tables to single-source Constra…
MauroToscano Jul 2, 2026
4839152
spike(stark): convert KECCAK + KECCAK_RND tables to single-source Con…
MauroToscano Jul 2, 2026
7a2053e
spike(stark): convert CPU32 table to single-source ConstraintSet
MauroToscano Jul 2, 2026
51a07b9
sscs: convert DVRM + SHIFT tables to single-source ConstraintSet
MauroToscano Jul 2, 2026
48fab6a
sscs: convert MUL + LOAD tables to single-source ConstraintSet
MauroToscano Jul 2, 2026
5e247ef
sscs: convert ECSM + ECDAS + EC_SCALAR tables + differential tests fo…
MauroToscano Jul 2, 2026
1bb9ff3
spike(stark): use iterator comparisons in constraint_set_tests_b (cli…
MauroToscano Jul 2, 2026
e6cd301
Merge branch 'feat/sscs-tables-b' into feat/single-source-constraints…
MauroToscano Jul 2, 2026
f52a028
stark: delete the bit_flags and simple_periodic_cols example AIRs
MauroToscano Jul 2, 2026
88adbfa
stark: add examples-cli prove/verify binary over the example AIRs
MauroToscano Jul 2, 2026
ef62859
stark: run_transition_prover/run_transition_verifier framework helpers
MauroToscano Jul 2, 2026
abf52c6
stark: migrate simple_fibonacci, simple_addition, quadratic_air, dumm…
MauroToscano Jul 2, 2026
db12541
stark: migrate the fibonacci_2_cols family + fibonacci_multi_column t…
MauroToscano Jul 2, 2026
2dff6db
stark: migrate fibonacci_rap + read_only_memory(_logup) to ConstraintSet
MauroToscano Jul 2, 2026
f2d34ef
stark: move period=1 end-exemption tests onto the ConstraintMeta zero…
MauroToscano Jul 2, 2026
2499b2a
stark: cross-version verification harness for the example AIRs + run …
MauroToscano Jul 2, 2026
936745d
stark: single-source LogUp constraints (LogUpLayout + emit_logup_cons…
MauroToscano Jul 2, 2026
9ae7428
prover: single-source CpuConstraints ConstraintSet
MauroToscano Jul 2, 2026
3239eb8
stark+prover: switch the engine to single-source constraints
MauroToscano Jul 2, 2026
4c1a943
scripts: VM cross-version verification harness + pre-deletion run log
MauroToscano Jul 2, 2026
734faae
stark+prover: delete the old boxed constraint machinery
MauroToscano Jul 2, 2026
3fe62aa
reports: post-deletion cross-verification evidence
MauroToscano Jul 2, 2026
5d72590
stark: rip the dead periodic machinery + trim ConstraintMeta to the e…
MauroToscano Jul 2, 2026
e76807e
reports: final-tip cross-verification evidence (post periodic rip + m…
MauroToscano Jul 2, 2026
0d8e5d1
stark: pass StorageMode to multi_prove in examples-cli under disk-spill
MauroToscano Jul 2, 2026
b6f0271
stark: fold LogUp fingerprint terms straight into the accumulator
MauroToscano Jul 2, 2026
1d0f0ae
stark: restore the LogUp Linear zero-skip via a builder fold hook
MauroToscano Jul 2, 2026
cfc4f1d
prover: stop heap-allocating AddOperands inside the per-row bodies
MauroToscano Jul 2, 2026
af8a23a
math: #[inline(always)] the base-x-ext IsSubFieldOf ops
MauroToscano Jul 2, 2026
c8f91eb
scripts: perf_diff.sh — symbol-level profile diff for ABBA-confirmed …
MauroToscano Jul 2, 2026
0bf7167
Merge branch 'main' into feat/single-source-constraints-switch
MauroToscano Jul 2, 2026
73d33d4
stark+prover: micro-op bundle for the constraint hot path
MauroToscano Jul 2, 2026
41e2d35
prover: revert the table-body subexpression hoists; keep the note
MauroToscano Jul 2, 2026
d67a0f6
stark+math: revert the engine-side micro-ops too
MauroToscano Jul 2, 2026
3638d7a
stark: borrow trace rows in place for prover transition eval
MauroToscano Jul 2, 2026
30b6148
prover: drop a redundant Multiplicity clone in shift bus setup
MauroToscano Jul 2, 2026
26782e2
docs: describe the constraint code as it is, not as it was
MauroToscano Jul 2, 2026
b26050e
stark: drop the dead packing_shifts context field and the complete flag
MauroToscano Jul 2, 2026
daef533
tests: close the interpreter-path coverage gaps; release-safe exact-o…
MauroToscano Jul 2, 2026
8cc1803
stark: small review-feedback comments + drop a duplicate pow
MauroToscano Jul 2, 2026
6614332
reports: move the cross-verification evidence logs off the PR branch
MauroToscano Jul 2, 2026
aa2f649
refactor(stark): derive constraint metadata from the single eval body…
MauroToscano Jul 3, 2026
4fa8c0a
Merge branch 'main' into feat/single-source-constraints-switch
MauroToscano Jul 3, 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
31 changes: 31 additions & 0 deletions cross_verify_examples.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
==> Refs
OLD 88adbfa6 -> 88adbfa64c
NEW f2d34efd -> f2d34efd01
Preparing worktree (detached HEAD 88adbfa6)
==> Building examples_cli @ 88adbfa64c -> cli_old
==> Building examples_cli @ f2d34efd01 -> cli_new
==> Cross-verifying 11 examples, both directions
PASS prove-NEW-verify-OLD : simple_fibonacci
PASS prove-OLD-verify-NEW : simple_fibonacci
PASS prove-NEW-verify-OLD : fibonacci_2_columns
PASS prove-OLD-verify-NEW : fibonacci_2_columns
PASS prove-NEW-verify-OLD : fibonacci_2_cols_shifted
PASS prove-OLD-verify-NEW : fibonacci_2_cols_shifted
PASS prove-NEW-verify-OLD : fibonacci_multi_column
PASS prove-OLD-verify-NEW : fibonacci_multi_column
PASS prove-NEW-verify-OLD : quadratic_air
PASS prove-OLD-verify-NEW : quadratic_air
PASS prove-NEW-verify-OLD : fibonacci_rap
PASS prove-OLD-verify-NEW : fibonacci_rap
PASS prove-NEW-verify-OLD : dummy_air
PASS prove-OLD-verify-NEW : dummy_air
PASS prove-NEW-verify-OLD : simple_addition
PASS prove-OLD-verify-NEW : simple_addition
PASS prove-NEW-verify-OLD : read_only_memory
PASS prove-OLD-verify-NEW : read_only_memory
PASS prove-NEW-verify-OLD : read_only_memory_logup
PASS prove-OLD-verify-NEW : read_only_memory_logup
PASS prove-NEW-verify-OLD : multi_table_lookup
PASS prove-OLD-verify-NEW : multi_table_lookup

==> RESULT: all 11 examples cross-verify in both directions.
17 changes: 17 additions & 0 deletions crypto/math/src/field/extensions_goldilocks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,11 @@ impl IsField for Degree2GoldilocksExtensionField {
}

impl IsSubFieldOf<Degree2GoldilocksExtensionField> for GoldilocksField {
// The base×ext ops run in the constraint-eval hot loop from downstream
// crates; these impls are concrete (non-generic), so without the
// attribute they compile as cross-crate calls under the default
// no-LTO release profile — unlike the #[inline(always)] IsField ops.
#[inline(always)]
fn mul(
a: &Self::BaseType,
b: &<Degree2GoldilocksExtensionField as IsField>::BaseType,
Expand All @@ -208,6 +213,7 @@ impl IsSubFieldOf<Degree2GoldilocksExtensionField> for GoldilocksField {
[c0, c1]
}

#[inline(always)]
fn add(
a: &Self::BaseType,
b: &<Degree2GoldilocksExtensionField as IsField>::BaseType,
Expand All @@ -224,6 +230,7 @@ impl IsSubFieldOf<Degree2GoldilocksExtensionField> for GoldilocksField {
Ok(<Self as IsSubFieldOf<Degree2GoldilocksExtensionField>>::mul(a, &b_inv))
}

#[inline(always)]
fn sub(
a: &Self::BaseType,
b: &<Degree2GoldilocksExtensionField as IsField>::BaseType,
Expand All @@ -233,6 +240,7 @@ impl IsSubFieldOf<Degree2GoldilocksExtensionField> for GoldilocksField {
[c0, c1]
}

#[inline(always)]
fn embed(a: Self::BaseType) -> <Degree2GoldilocksExtensionField as IsField>::BaseType {
[FpE::from_raw(a), FpE::zero()]
}
Expand Down Expand Up @@ -410,6 +418,12 @@ impl IsField for Degree3GoldilocksExtensionField {
}

impl IsSubFieldOf<Degree3GoldilocksExtensionField> for GoldilocksField {
// The base×ext ops run in the constraint-eval hot loop from downstream
// crates (the evaluator's eval·β fold and every LogUp fingerprint term);
// these impls are concrete (non-generic), so without the attribute they
// compile as cross-crate calls under the default no-LTO release profile —
// unlike the #[inline(always)] IsField ops.
#[inline(always)]
fn mul(
a: &Self::BaseType,
b: &<Degree3GoldilocksExtensionField as IsField>::BaseType,
Expand All @@ -420,6 +434,7 @@ impl IsSubFieldOf<Degree3GoldilocksExtensionField> for GoldilocksField {
[c0, c1, c2]
}

#[inline(always)]
fn add(
a: &Self::BaseType,
b: &<Degree3GoldilocksExtensionField as IsField>::BaseType,
Expand All @@ -436,6 +451,7 @@ impl IsSubFieldOf<Degree3GoldilocksExtensionField> for GoldilocksField {
Ok(<Self as IsSubFieldOf<Degree3GoldilocksExtensionField>>::mul(a, &b_inv))
}

#[inline(always)]
fn sub(
a: &Self::BaseType,
b: &<Degree3GoldilocksExtensionField as IsField>::BaseType,
Expand All @@ -446,6 +462,7 @@ impl IsSubFieldOf<Degree3GoldilocksExtensionField> for GoldilocksField {
[c0, c1, c2]
}

#[inline(always)]
fn embed(a: Self::BaseType) -> <Degree3GoldilocksExtensionField as IsField>::BaseType {
[FpE::from_raw(a), FpE::zero(), FpE::zero()]
}
Expand Down
5 changes: 5 additions & 0 deletions crypto/stark/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ web-sys = { version = "0.3.64", features = ['console'], optional = true }
serde_cbor = { version = "0.11.1" }

[dev-dependencies]
math = { path = "../math", features = ["test-utils"] }
criterion = { version = "0.4", default-features = false }
env_logger = "*"
test-log = { version = "0.2.11", features = ["log"] }
Expand Down Expand Up @@ -78,6 +79,10 @@ dwarf-debug-info = false
# Should we omit the default import path
omit-default-module-path = false

[[example]]
name = "examples_cli"
required-features = ["test-utils"]

[[bench]]
name = "prover_benchmark"
harness = false
Expand Down
Loading
Loading