Skip to content

Commit

Permalink
powers of alpha changes
Browse files Browse the repository at this point in the history
  • Loading branch information
umadayal committed Jan 29, 2025
2 parents 8e9d600 + 7debd25 commit 7d1bcb7
Show file tree
Hide file tree
Showing 19 changed files with 694 additions and 481 deletions.
264 changes: 159 additions & 105 deletions Cargo.lock

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions crates/core/machine/src/utils/test.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use p3_air::Air;
use p3_baby_bear::BabyBear;
use p3_matrix::dense::RowMajorMatrix;
use p3_uni_stark::SymbolicAirBuilder;
use serde::{de::DeserializeOwned, Serialize};
use sp1_core_executor::{ExecutionRecord, Executor, Program, SP1Context};
use sp1_primitives::io::SP1PublicValues;
Expand Down Expand Up @@ -128,7 +129,8 @@ where
A: MachineAir<SC::Val>
+ Air<InteractionBuilder<Val<SC>>>
+ for<'a> Air<VerifierConstraintFolder<'a, SC>>
+ for<'a> Air<DebugConstraintBuilder<'a, Val<SC>, SC::Challenge>>,
+ for<'a> Air<DebugConstraintBuilder<'a, Val<SC>, SC::Challenge>>
+ Air<SymbolicAirBuilder<SC::Val>>,
A::Record: MachineRecord<Config = SP1CoreOpts>,
SC: StarkGenericConfig,
SC::Val: p3_field::PrimeField32,
Expand Down Expand Up @@ -169,7 +171,8 @@ where
+ for<'a> Air<ProverConstraintFolder<'a, SC>>
+ Air<InteractionBuilder<Val<SC>>>
+ for<'a> Air<VerifierConstraintFolder<'a, SC>>
+ for<'a> Air<DebugConstraintBuilder<'a, Val<SC>, SC::Challenge>>,
+ for<'a> Air<DebugConstraintBuilder<'a, Val<SC>, SC::Challenge>>
+ Air<SymbolicAirBuilder<SC::Val>>,
A::Record: MachineRecord<Config = SP1CoreOpts>,
SC: StarkGenericConfig,
SC::Val: p3_field::PrimeField32,
Expand Down
1 change: 1 addition & 0 deletions crates/recursion/circuit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ p3-challenger = { workspace = true }
p3-dft = { workspace = true }
p3-bn254-fr = { workspace = true }
p3-baby-bear = { workspace = true }
p3-uni-stark = { workspace = true }

sp1-core-machine = { workspace = true }
sp1-core-executor = { workspace = true }
Expand Down
8 changes: 5 additions & 3 deletions crates/recursion/circuit/src/machine/compress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use p3_baby_bear::BabyBear;
use p3_commit::Mmcs;
use p3_field::AbstractField;
use p3_matrix::dense::RowMajorMatrix;

use p3_uni_stark::SymbolicAirBuilder;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use sp1_recursion_compiler::ir::{Builder, Felt, SymbolicFelt};

Expand Down Expand Up @@ -78,7 +78,9 @@ where
SC: BabyBearFriConfigVariable<C>,
C: CircuitConfig<F = SC::Val, EF = SC::Challenge>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<SC::Val> + for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>,
A: MachineAir<SC::Val>
+ for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>
+ Air<SymbolicAirBuilder<SC::Val>>,
{
/// Verify a batch of recursive proofs and aggregate their public values.
///
Expand Down Expand Up @@ -508,7 +510,7 @@ impl<SC: BabyBearFriConfig> SP1CompressWitnessValues<SC> {
}

impl SP1CompressWitnessValues<BabyBearPoseidon2> {
pub fn dummy<A: MachineAir<BabyBear>>(
pub fn dummy<A: MachineAir<BabyBear> + Air<SymbolicAirBuilder<BabyBear>>>(
machine: &StarkMachine<BabyBearPoseidon2, A>,
shape: &SP1CompressShape,
) -> Self {
Expand Down
16 changes: 9 additions & 7 deletions crates/recursion/circuit/src/machine/deferred.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@ use p3_baby_bear::BabyBear;
use p3_commit::Mmcs;
use p3_field::AbstractField;
use p3_matrix::dense::RowMajorMatrix;
use p3_uni_stark::SymbolicAirBuilder;
use sp1_primitives::consts::WORD_SIZE;
use sp1_recursion_compiler::ir::{Builder, Felt};
use sp1_recursion_core::{
air::{RecursionPublicValues, PV_DIGEST_NUM_WORDS, RECURSIVE_PROOF_NUM_PV_ELTS},
DIGEST_SIZE,
};
use sp1_stark::septic_curve::SepticCurve;
use sp1_stark::septic_digest::SepticDigest;
use sp1_stark::{
Expand All @@ -20,11 +25,6 @@ use sp1_stark::{
Dom, ShardProof, StarkMachine, StarkVerifyingKey, Word,
};

use sp1_recursion_core::{
air::{RecursionPublicValues, PV_DIGEST_NUM_WORDS, RECURSIVE_PROOF_NUM_PV_ELTS},
DIGEST_SIZE,
};

use crate::{
challenger::{CanObserveVariable, DuplexChallengerVariable},
constraints::RecursiveVerifierConstraintFolder,
Expand Down Expand Up @@ -98,7 +98,9 @@ where
>,
C: CircuitConfig<F = SC::Val, EF = SC::Challenge, Bit = Felt<BabyBear>>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<SC::Val> + for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>,
A: MachineAir<SC::Val>
+ for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>
+ Air<SymbolicAirBuilder<SC::Val>>,
{
/// Verify a batch of deferred proofs.
///
Expand Down Expand Up @@ -249,7 +251,7 @@ where
}

impl SP1DeferredWitnessValues<BabyBearPoseidon2> {
pub fn dummy<A: MachineAir<BabyBear>>(
pub fn dummy<A: MachineAir<BabyBear> + Air<SymbolicAirBuilder<BabyBear>>>(
machine: &StarkMachine<BabyBearPoseidon2, A>,
shape: &SP1DeferredShape,
) -> Self {
Expand Down
9 changes: 7 additions & 2 deletions crates/recursion/circuit/src/machine/root.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use p3_baby_bear::BabyBear;
use p3_commit::Mmcs;
use p3_field::AbstractField;
use p3_matrix::dense::RowMajorMatrix;
use p3_uni_stark::SymbolicAirBuilder;

use super::{
PublicValuesOutputDigest, SP1CompressVerifier, SP1CompressWithVKeyVerifier,
Expand Down Expand Up @@ -41,7 +42,9 @@ where
SC: BabyBearFriConfigVariable<C>,
C: CircuitConfig<F = SC::Val, EF = SC::Challenge>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<SC::Val> + for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>,
A: MachineAir<SC::Val>
+ for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>
+ Air<SymbolicAirBuilder<SC::Val>>,
{
pub fn verify(
builder: &mut Builder<C>,
Expand Down Expand Up @@ -71,7 +74,9 @@ where
>,
C: CircuitConfig<F = SC::Val, EF = SC::Challenge, Bit = Felt<BabyBear>>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<SC::Val> + for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>,
A: MachineAir<SC::Val>
+ for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>
+ Air<SymbolicAirBuilder<SC::Val>>,
{
pub fn verify(
builder: &mut Builder<C>,
Expand Down
26 changes: 14 additions & 12 deletions crates/recursion/circuit/src/machine/vkey_proof.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
use std::marker::PhantomData;

use crate::{
challenger::DuplexChallengerVariable,
constraints::RecursiveVerifierConstraintFolder,
hash::{FieldHasher, FieldHasherVariable},
merkle_tree::{verify, MerkleProof},
stark::MerkleProofVariable,
witness::{WitnessWriter, Witnessable},
BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, TwoAdicPcsProofVariable,
};
use p3_air::Air;
use p3_baby_bear::BabyBear;
use p3_commit::Mmcs;
use p3_field::AbstractField;
use p3_matrix::dense::RowMajorMatrix;
use p3_uni_stark::SymbolicAirBuilder;
use serde::{Deserialize, Serialize};
use sp1_recursion_compiler::ir::{Builder, Felt};
use sp1_recursion_core::DIGEST_SIZE;
Expand All @@ -13,16 +23,6 @@ use sp1_stark::{
StarkGenericConfig, StarkMachine,
};

use crate::{
challenger::DuplexChallengerVariable,
constraints::RecursiveVerifierConstraintFolder,
hash::{FieldHasher, FieldHasherVariable},
merkle_tree::{verify, MerkleProof},
stark::MerkleProofVariable,
witness::{WitnessWriter, Witnessable},
BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, TwoAdicPcsProofVariable,
};

use super::{
PublicValuesOutputDigest, SP1CompressShape, SP1CompressVerifier, SP1CompressWitnessValues,
SP1CompressWitnessVariable,
Expand Down Expand Up @@ -120,7 +120,9 @@ where
>,
C: CircuitConfig<F = SC::Val, EF = SC::Challenge, Bit = Felt<BabyBear>>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<SC::Val> + for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>,
A: MachineAir<SC::Val>
+ for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>
+ Air<SymbolicAirBuilder<SC::Val>>,
{
/// Verify the proof shape phase of the compress stage.
pub fn verify(
Expand Down Expand Up @@ -161,7 +163,7 @@ impl SP1MerkleProofWitnessValues<BabyBearPoseidon2> {
}

impl SP1CompressWithVKeyWitnessValues<BabyBearPoseidon2> {
pub fn dummy<A: MachineAir<BabyBear>>(
pub fn dummy<A: MachineAir<BabyBear> + Air<SymbolicAirBuilder<BabyBear>>>(
machine: &StarkMachine<BabyBearPoseidon2, A>,
shape: &SP1CompressWithVkeyShape,
) -> Self {
Expand Down
5 changes: 4 additions & 1 deletion crates/recursion/circuit/src/machine/wrap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use p3_baby_bear::BabyBear;
use p3_commit::Mmcs;
use p3_field::AbstractField;
use p3_matrix::dense::RowMajorMatrix;
use p3_uni_stark::SymbolicAirBuilder;
use sp1_recursion_compiler::ir::{Builder, Felt};
use sp1_stark::{air::MachineAir, StarkMachine};

Expand All @@ -29,7 +30,9 @@ where
SC: BabyBearFriConfigVariable<C>,
C: CircuitConfig<F = SC::Val, EF = SC::Challenge>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<SC::Val> + for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>,
A: MachineAir<SC::Val>
+ for<'a> Air<RecursiveVerifierConstraintFolder<'a, C>>
+ Air<SymbolicAirBuilder<SC::Val>>,
{
/// Verify a batch of recursive proofs and aggregate their public values.
///
Expand Down
5 changes: 3 additions & 2 deletions crates/recursion/circuit/src/stark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use p3_baby_bear::BabyBear;
use p3_commit::{Mmcs, Pcs, PolynomialSpace, TwoAdicMultiplicativeCoset};
use p3_field::{AbstractField, ExtensionField, Field, TwoAdicField};
use p3_matrix::{dense::RowMajorMatrix, Dimensions};
use p3_uni_stark::SymbolicAirBuilder;
use sp1_recursion_compiler::{
circuit::CircuitV2Builder,
ir::{Builder, Config, Ext, ExtConst},
Expand Down Expand Up @@ -56,7 +57,7 @@ pub fn dummy_challenger(config: &BabyBearPoseidon2) -> Challenger<BabyBearPoseid
}

/// Make a dummy shard proof for a given proof shape.
pub fn dummy_vk_and_shard_proof<A: MachineAir<BabyBear>>(
pub fn dummy_vk_and_shard_proof<A: MachineAir<BabyBear> + Air<SymbolicAirBuilder<BabyBear>>>(
machine: &StarkMachine<BabyBearPoseidon2, A>,
shape: &OrderedShape,
) -> (StarkVerifyingKey<BabyBearPoseidon2>, ShardProof<BabyBearPoseidon2>) {
Expand Down Expand Up @@ -232,7 +233,7 @@ where
C: CircuitConfig<F = SC::Val>,
SC: BabyBearFriConfigVariable<C>,
<SC::ValMmcs as Mmcs<BabyBear>>::ProverData<RowMajorMatrix<BabyBear>>: Clone,
A: MachineAir<Val<SC>>,
A: MachineAir<Val<SC>> + Air<SymbolicAirBuilder<SC::Val>>,
{
pub fn natural_domain_for_degree(
config: &SC,
Expand Down
16 changes: 10 additions & 6 deletions crates/stark/src/folder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,14 @@ pub struct ProverConstraintFolder<'a, SC: StarkGenericConfig> {
pub is_last_row: PackedVal<SC>,
/// The selector for the transition.
pub is_transition: PackedVal<SC>,
/// The constraint folding challenge.
pub alpha: SC::Challenge,
/// The powers of the constraint folding challenge.
pub powers_of_alpha: &'a Vec<SC::Challenge>,
/// The accumulator for the constraint folding.
pub accumulator: PackedChallenge<SC>,
/// The public values.
pub public_values: &'a [Val<SC>],
/// The constraint index.
pub constraint_index: usize,
}

impl<'a, SC: StarkGenericConfig> AirBuilder for ProverConstraintFolder<'a, SC> {
Expand Down Expand Up @@ -77,8 +79,9 @@ impl<'a, SC: StarkGenericConfig> AirBuilder for ProverConstraintFolder<'a, SC> {

fn assert_zero<I: Into<Self::Expr>>(&mut self, x: I) {
let x: PackedVal<SC> = x.into();
self.accumulator *= PackedChallenge::<SC>::from_f(self.alpha);
self.accumulator += x;
self.accumulator +=
PackedChallenge::<SC>::from_f(self.powers_of_alpha[self.constraint_index]) * x;
self.constraint_index += 1;
}
}

Expand All @@ -94,8 +97,9 @@ impl<SC: StarkGenericConfig> ExtensionBuilder for ProverConstraintFolder<'_, SC>
I: Into<Self::ExprEF>,
{
let x: PackedChallenge<SC> = x.into();
self.accumulator *= PackedChallenge::<SC>::from_f(self.alpha);
self.accumulator += x;
self.accumulator +=
PackedChallenge::<SC>::from_f(self.powers_of_alpha[self.constraint_index]) * x;
self.constraint_index += 1;
}
}

Expand Down
7 changes: 4 additions & 3 deletions crates/stark/src/lookup/debug.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use std::collections::BTreeMap;

use p3_air::Air;
use p3_baby_bear::BabyBear;
use p3_field::{AbstractField, Field, PrimeField32, PrimeField64};
use p3_matrix::Matrix;
use p3_uni_stark::SymbolicAirBuilder;
use std::collections::BTreeMap;

use super::InteractionKind;
use crate::{
Expand Down Expand Up @@ -141,7 +142,7 @@ pub fn debug_interactions_with_all_chips<SC, A>(
where
SC: StarkGenericConfig,
SC::Val: PrimeField32,
A: MachineAir<SC::Val>,
A: MachineAir<SC::Val> + Air<SymbolicAirBuilder<SC::Val>>,
{
if scope == InteractionScope::Local {
assert!(shards.len() == 1);
Expand Down
Loading

0 comments on commit 7d1bcb7

Please sign in to comment.