From 47bff255b8feb9f342c3fdc63805e9dee0c7bc22 Mon Sep 17 00:00:00 2001 From: "github-merge-queue[bot]" Date: Tue, 20 Feb 2024 15:05:45 +0000 Subject: [PATCH] deploy: f3560c8d8ec4c131b91a4728218c9d28648d2ab5 --- docs/arecibo/provider/ipa_pc/index.html | 2 +- docs/arecibo/provider/shplonk/index.html | 2 +- docs/arecibo/r1cs/fn.default_T.html | 2 +- docs/arecibo/r1cs/index.html | 2 +- .../r1cs/struct.RelaxedR1CSInstance.html | 14 +- .../r1cs/struct.RelaxedR1CSWitness.html | 8 +- docs/arecibo/spartan/batched/index.html | 2 +- .../struct.BatchedRelaxedR1CSSNARK.html | 12 +- docs/arecibo/spartan/snark/index.html | 2 +- .../snark/struct.RelaxedR1CSSNARK.html | 4 +- .../trait.BatchedRelaxedR1CSSNARKTrait.html | 2 +- .../snark/trait.RelaxedR1CSSNARKTrait.html | 2 +- .../arecibo/traits/trait.AbsorbInROTrait.html | 2 +- .../traits/trait.TranscriptReprTrait.html | 2 +- .../arecibo/bellpepper/test_shape_cs.rs.html | 8 +- .../arecibo/gadgets/nonnative/bignat.rs.html | 20 +-- docs/src/arecibo/nifs.rs.html | 132 +----------------- docs/src/arecibo/provider/ipa_pc.rs.html | 30 ++-- docs/src/arecibo/provider/keccak.rs.html | 12 +- docs/src/arecibo/provider/poseidon.rs.html | 2 +- docs/src/arecibo/provider/shplonk.rs.html | 8 +- docs/src/arecibo/r1cs/mod.rs.html | 34 +---- docs/src/arecibo/spartan/batched.rs.html | 2 - .../arecibo/spartan/polys/univariate.rs.html | 2 +- docs/src/arecibo/spartan/ppsnark.rs.html | 2 +- docs/src/arecibo/spartan/snark.rs.html | 2 + docs/src/arecibo/supernova/circuit.rs.html | 24 ++-- 27 files changed, 75 insertions(+), 261 deletions(-) diff --git a/docs/arecibo/provider/ipa_pc/index.html b/docs/arecibo/provider/ipa_pc/index.html index 5816da72e..f83fc3546 100644 --- a/docs/arecibo/provider/ipa_pc/index.html +++ b/docs/arecibo/provider/ipa_pc/index.html @@ -1,3 +1,3 @@ arecibo::provider::ipa_pc - Rust -

Module arecibo::provider::ipa_pc

source ·
Expand description

This module implements EvaluationEngine using an IPA-based polynomial commitment scheme

+

Module arecibo::provider::ipa_pc

source ·
Expand description

This module implements EvaluationEngine using an IPA-based polynomial commitment scheme

Structs

\ No newline at end of file diff --git a/docs/arecibo/provider/shplonk/index.html b/docs/arecibo/provider/shplonk/index.html index 46d490ab5..5595599d8 100644 --- a/docs/arecibo/provider/shplonk/index.html +++ b/docs/arecibo/provider/shplonk/index.html @@ -1,3 +1,3 @@ arecibo::provider::shplonk - Rust -

Module arecibo::provider::shplonk

source ·
Expand description

Shplonk PCS

+

Module arecibo::provider::shplonk

source ·
Expand description

Shplonk PCS

Structs

\ No newline at end of file diff --git a/docs/arecibo/r1cs/fn.default_T.html b/docs/arecibo/r1cs/fn.default_T.html index ce893f309..496f59c6e 100644 --- a/docs/arecibo/r1cs/fn.default_T.html +++ b/docs/arecibo/r1cs/fn.default_T.html @@ -1,3 +1,3 @@ default_T in arecibo::r1cs - Rust -

Function arecibo::r1cs::default_T

source ·
pub fn default_T<E: Engine>(num_cons: usize) -> Vec<E::Scalar>
Expand description

Empty buffer for commit_T_into

+

Function arecibo::r1cs::default_T

source ·
pub fn default_T<E: Engine>(num_cons: usize) -> Vec<E::Scalar>
Expand description

Empty buffer for commit_T_into

\ No newline at end of file diff --git a/docs/arecibo/r1cs/index.html b/docs/arecibo/r1cs/index.html index 195f2d2c1..72e440c61 100644 --- a/docs/arecibo/r1cs/index.html +++ b/docs/arecibo/r1cs/index.html @@ -1,3 +1,3 @@ arecibo::r1cs - Rust -

Module arecibo::r1cs

source ·
Expand description

This module defines R1CS related types and a folding scheme for Relaxed R1CS

+

Module arecibo::r1cs

source ·
Expand description

This module defines R1CS related types and a folding scheme for Relaxed R1CS

Structs

Functions

  • Generates public parameters for a Rank-1 Constraint System (R1CS).
  • Computes the number of generators required for the commitment key corresponding to shape S.
  • Empty buffer for commit_T_into

Type Aliases

  • A type for functions that hints commitment key sizing by returning the floor of the number of required generators.
\ No newline at end of file diff --git a/docs/arecibo/r1cs/struct.RelaxedR1CSInstance.html b/docs/arecibo/r1cs/struct.RelaxedR1CSInstance.html index acca57e93..8d83bfe3c 100644 --- a/docs/arecibo/r1cs/struct.RelaxedR1CSInstance.html +++ b/docs/arecibo/r1cs/struct.RelaxedR1CSInstance.html @@ -1,38 +1,38 @@ RelaxedR1CSInstance in arecibo::r1cs - Rust
pub struct RelaxedR1CSInstance<E: Engine> { /* private fields */ }
Expand description

A type that holds a Relaxed R1CS instance

-

Implementations§

source§

impl<E: Engine> RelaxedR1CSInstance<E>

source

pub fn default( +

Implementations§

source§

impl<E: Engine> RelaxedR1CSInstance<E>

source

pub fn default( _ck: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey, S: &R1CSShape<E> ) -> Self

Produces a default RelaxedR1CSInstance given R1CSGens and R1CSShape

-
source

pub fn from_r1cs_instance( +

source

pub fn from_r1cs_instance( _ck: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey, S: &R1CSShape<E>, instance: R1CSInstance<E> ) -> Self

Initializes a new RelaxedR1CSInstance from an R1CSInstance

-
source

pub fn from_r1cs_instance_unchecked( +

source

pub fn from_r1cs_instance_unchecked( comm_W: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::Commitment, X: &[E::Scalar] ) -> Self

Initializes a new RelaxedR1CSInstance from an R1CSInstance

-
source

pub fn fold( +

source

pub fn fold( &self, U2: &R1CSInstance<E>, comm_T: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::Commitment, r: &E::Scalar ) -> Self

Folds an incoming RelaxedR1CSInstance into the current one

-
source

pub fn fold_mut( +

source

pub fn fold_mut( &mut self, U2: &R1CSInstance<E>, comm_T: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::Commitment, r: &E::Scalar )

Mutably folds an incoming RelaxedR1CSInstance into the current one

-

Trait Implementations§

source§

impl<E: Engine> AbsorbInROTrait<E> for RelaxedR1CSInstance<E>

source§

fn absorb_in_ro(&self, ro: &mut E::RO)

Absorbs the value in the provided RO
source§

impl<E: Clone + Engine> Clone for RelaxedR1CSInstance<E>
where +

Trait Implementations§

source§

impl<E: Engine> AbsorbInROTrait<E> for RelaxedR1CSInstance<E>

source§

fn absorb_in_ro(&self, ro: &mut E::RO)

Absorbs the value in the provided RO
source§

impl<E: Clone + Engine> Clone for RelaxedR1CSInstance<E>
where E::Scalar: Clone,

source§

fn clone(&self) -> RelaxedR1CSInstance<E>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<E: Debug + Engine> Debug for RelaxedR1CSInstance<E>
where E::Scalar: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, E: Engine> Deserialize<'de> for RelaxedR1CSInstance<E>

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<E: PartialEq + Engine> PartialEq for RelaxedR1CSInstance<E>
where E::Scalar: PartialEq,

source§

fn eq(&self, other: &RelaxedR1CSInstance<E>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<E: Engine> Serialize for RelaxedR1CSInstance<E>

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<E: Engine> TranscriptReprTrait<<E as Engine>::GE> for RelaxedR1CSInstance<E>

source§

fn to_transcript_bytes(&self) -> Vec<u8>

returns a byte representation of self to be added to the transcript
source§

impl<E: Eq + Engine> Eq for RelaxedR1CSInstance<E>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<E: Engine> TranscriptReprTrait<<E as Engine>::GE> for RelaxedR1CSInstance<E>

source§

fn to_transcript_bytes(&self) -> Vec<u8>

returns a byte representation of self to be added to the transcript
source§

impl<E: Eq + Engine> Eq for RelaxedR1CSInstance<E>
where E::Scalar: Eq,

source§

impl<E: Engine> StructuralEq for RelaxedR1CSInstance<E>

source§

impl<E: Engine> StructuralPartialEq for RelaxedR1CSInstance<E>

Auto Trait Implementations§

§

impl<E> RefUnwindSafe for RelaxedR1CSInstance<E>

§

impl<E> Send for RelaxedR1CSInstance<E>

§

impl<E> Sync for RelaxedR1CSInstance<E>

§

impl<E> Unpin for RelaxedR1CSInstance<E>
where diff --git a/docs/arecibo/r1cs/struct.RelaxedR1CSWitness.html b/docs/arecibo/r1cs/struct.RelaxedR1CSWitness.html index 1443495d4..e64e5c6c8 100644 --- a/docs/arecibo/r1cs/struct.RelaxedR1CSWitness.html +++ b/docs/arecibo/r1cs/struct.RelaxedR1CSWitness.html @@ -1,24 +1,24 @@ RelaxedR1CSWitness in arecibo::r1cs - Rust
pub struct RelaxedR1CSWitness<E: Engine> { /* private fields */ }
Expand description

A type that holds a witness for a given Relaxed R1CS instance

-

Implementations§

source§

impl<E: Engine> RelaxedR1CSWitness<E>

source

pub fn default(S: &R1CSShape<E>) -> Self

Produces a default RelaxedR1CSWitness given an R1CSShape

+

Implementations§

source§

impl<E: Engine> RelaxedR1CSWitness<E>

source

pub fn default(S: &R1CSShape<E>) -> Self

Produces a default RelaxedR1CSWitness given an R1CSShape

source

pub fn from_r1cs_witness(S: &R1CSShape<E>, witness: R1CSWitness<E>) -> Self

Initializes a new RelaxedR1CSWitness from an R1CSWitness

source

pub fn commit( &self, ck: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey ) -> (<<E as Engine>::CE as CommitmentEngineTrait<E>>::Commitment, <<E as Engine>::CE as CommitmentEngineTrait<E>>::Commitment)

Commits to the witness using the supplied generators

-
source

pub fn fold( +

source

pub fn fold( &self, W2: &R1CSWitness<E>, T: &[E::Scalar], r: &E::Scalar ) -> Result<Self, NovaError>

Folds an incoming R1CSWitness into the current one

-
source

pub fn fold_mut( +

source

pub fn fold_mut( &mut self, W2: &R1CSWitness<E>, T: &[E::Scalar], r: &E::Scalar ) -> Result<(), NovaError>

Mutably folds an incoming R1CSWitness into the current one

-
source

pub fn pad(&self, S: &R1CSShape<E>) -> Self

Pads the provided witness to the correct length

+
source

pub fn pad(&self, S: &R1CSShape<E>) -> Self

Pads the provided witness to the correct length

Trait Implementations§

source§

impl<E: Clone + Engine> Clone for RelaxedR1CSWitness<E>
where E::Scalar: Clone,

source§

fn clone(&self) -> RelaxedR1CSWitness<E>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<E: Debug + Engine> Debug for RelaxedR1CSWitness<E>
where E::Scalar: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, E: Engine> Deserialize<'de> for RelaxedR1CSWitness<E>

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where diff --git a/docs/arecibo/spartan/batched/index.html b/docs/arecibo/spartan/batched/index.html index 022fa15be..dc3fa1ed3 100644 --- a/docs/arecibo/spartan/batched/index.html +++ b/docs/arecibo/spartan/batched/index.html @@ -1,5 +1,5 @@ arecibo::spartan::batched - Rust -

Module arecibo::spartan::batched

source ·
Expand description

This module implements BatchedRelaxedR1CSSNARKTrait using Spartan that is generic over the polynomial commitment +

Module arecibo::spartan::batched

source ·
Expand description

This module implements BatchedRelaxedR1CSSNARKTrait using Spartan that is generic over the polynomial commitment and evaluation argument (i.e., a PCS) This version of Spartan does not use preprocessing so the verifier keeps the entire description of R1CS matrices. This is essentially optimal for the verifier when using an IPA-based polynomial commitment scheme. This batched implementation batches the outer and inner sumchecks of the Spartan SNARK.

diff --git a/docs/arecibo/spartan/batched/struct.BatchedRelaxedR1CSSNARK.html b/docs/arecibo/spartan/batched/struct.BatchedRelaxedR1CSSNARK.html index 0a77372f9..d83c2acc7 100644 --- a/docs/arecibo/spartan/batched/struct.BatchedRelaxedR1CSSNARK.html +++ b/docs/arecibo/spartan/batched/struct.BatchedRelaxedR1CSSNARK.html @@ -2,7 +2,7 @@
pub struct BatchedRelaxedR1CSSNARK<E: Engine, EE: EvaluationEngineTrait<E>> { /* private fields */ }
Expand description

A succinct proof of knowledge of a witness to a batch of relaxed R1CS instances The proof is produced using Spartan’s combination of the sum-check and the commitment to a vector viewed as a polynomial commitment

-

Trait Implementations§

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> BatchedRelaxedR1CSSNARKTrait<E> for BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

A type that represents the prover’s key
§

type VerifierKey = VerifierKey<E, EE>

A type that represents the verifier’s key
source§

fn setup( +

Trait Implementations§

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> BatchedRelaxedR1CSSNARKTrait<E> for BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

A type that represents the prover’s key
§

type VerifierKey = VerifierKey<E, EE>

A type that represents the verifier’s key
source§

fn setup( ck: Arc<<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey>, S: Vec<&R1CSShape<E>> ) -> Result<(Self::ProverKey, Self::VerifierKey), NovaError>

Produces the keys for the prover and the verifier Read more
source§

fn prove( @@ -11,7 +11,7 @@ S: Vec<&R1CSShape<E>>, U: &[RelaxedR1CSInstance<E>], W: &[RelaxedR1CSWitness<E>] -) -> Result<Self, NovaError>

Produces a new SNARK for a batch of relaxed R1CS
source§

fn verify( +) -> Result<Self, NovaError>

Produces a new SNARK for a batch of relaxed R1CS
source§

fn verify( &self, vk: &Self::VerifierKey, U: &[RelaxedR1CSInstance<E>] @@ -21,19 +21,19 @@ be at least as large as this hint.

source§

impl<E: Debug + Engine, EE: Debug + EvaluationEngineTrait<E>> Debug for BatchedRelaxedR1CSSNARK<E, EE>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, E: Engine, EE: EvaluationEngineTrait<E>> Deserialize<'de> for BatchedRelaxedR1CSSNARK<E, EE>

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

A type that represents the prover’s key
§

type VerifierKey = VerifierKey<E, EE>

A type that represents the verifier’s key
source§

fn ck_floor() -> Box<dyn for<'a> Fn(&'a R1CSShape<E>) -> usize>

This associated function (not a method) provides a hint that offers + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

A type that represents the prover’s key
§

type VerifierKey = VerifierKey<E, EE>

A type that represents the verifier’s key
source§

fn ck_floor() -> Box<dyn for<'a> Fn(&'a R1CSShape<E>) -> usize>

This associated function (not a method) provides a hint that offers a minimum sizing cue for the commitment key used by this SNARK implementation. The commitment key passed in setup should then -be at least as large as this hint.
source§

fn setup( +be at least as large as this hint.

source§

fn setup( ck: Arc<<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey>, S: &R1CSShape<E> -) -> Result<(Self::ProverKey, Self::VerifierKey), NovaError>

Produces the keys for the prover and the verifier
source§

fn prove( +) -> Result<(Self::ProverKey, Self::VerifierKey), NovaError>

Produces the keys for the prover and the verifier
source§

fn prove( ck: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey, pk: &Self::ProverKey, S: &R1CSShape<E>, U: &RelaxedR1CSInstance<E>, W: &RelaxedR1CSWitness<E> -) -> Result<Self, NovaError>

Produces a new SNARK for a relaxed R1CS
source§

fn verify( +) -> Result<Self, NovaError>

Produces a new SNARK for a relaxed R1CS
source§

fn verify( &self, vk: &Self::VerifierKey, U: &RelaxedR1CSInstance<E> diff --git a/docs/arecibo/spartan/snark/index.html b/docs/arecibo/spartan/snark/index.html index be2146a2e..c4aa2aa61 100644 --- a/docs/arecibo/spartan/snark/index.html +++ b/docs/arecibo/spartan/snark/index.html @@ -1,5 +1,5 @@ arecibo::spartan::snark - Rust -

Module arecibo::spartan::snark

source ·
Expand description

This module implements RelaxedR1CSSNARKTrait using Spartan that is generic +

Module arecibo::spartan::snark

source ·
Expand description

This module implements RelaxedR1CSSNARKTrait using Spartan that is generic over the polynomial commitment and evaluation argument (i.e., a PCS) This version of Spartan does not use preprocessing so the verifier keeps the entire description of R1CS matrices. This is essentially optimal for the verifier when using diff --git a/docs/arecibo/spartan/snark/struct.RelaxedR1CSSNARK.html b/docs/arecibo/spartan/snark/struct.RelaxedR1CSSNARK.html index 102615c9e..f42369e00 100644 --- a/docs/arecibo/spartan/snark/struct.RelaxedR1CSSNARK.html +++ b/docs/arecibo/spartan/snark/struct.RelaxedR1CSSNARK.html @@ -7,14 +7,14 @@ EE::EvaluationArgument: Clone,

source§

fn clone(&self) -> RelaxedR1CSSNARK<E, EE>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<E: Debug + Engine, EE: Debug + EvaluationEngineTrait<E>> Debug for RelaxedR1CSSNARK<E, EE>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, E: Engine, EE: EvaluationEngineTrait<E>> Deserialize<'de> for RelaxedR1CSSNARK<E, EE>

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for RelaxedR1CSSNARK<E, EE>

source§

fn prove( + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for RelaxedR1CSSNARK<E, EE>

source§

fn prove( ck: &<<E as Engine>::CE as CommitmentEngineTrait<E>>::CommitmentKey, pk: &Self::ProverKey, S: &R1CSShape<E>, U: &RelaxedR1CSInstance<E>, W: &RelaxedR1CSWitness<E> ) -> Result<Self, NovaError>

produces a succinct proof of satisfiability of a RelaxedR1CS instance

-
source§

fn verify( +

source§

fn verify( &self, vk: &Self::VerifierKey, U: &RelaxedR1CSInstance<E> diff --git a/docs/arecibo/traits/snark/trait.BatchedRelaxedR1CSSNARKTrait.html b/docs/arecibo/traits/snark/trait.BatchedRelaxedR1CSSNARKTrait.html index 56cc992cd..4fa505d36 100644 --- a/docs/arecibo/traits/snark/trait.BatchedRelaxedR1CSSNARKTrait.html +++ b/docs/arecibo/traits/snark/trait.BatchedRelaxedR1CSSNARKTrait.html @@ -48,4 +48,4 @@ a minimum sizing cue for the commitment key used by this SNARK implementation. The commitment key passed in setup should then be at least as large as this hint.

-

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> BatchedRelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> BatchedRelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched_ppsnark::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> BatchedRelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> BatchedRelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched_ppsnark::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

\ No newline at end of file diff --git a/docs/arecibo/traits/snark/trait.RelaxedR1CSSNARKTrait.html b/docs/arecibo/traits/snark/trait.RelaxedR1CSSNARKTrait.html index a6fb4cc83..908e3f827 100644 --- a/docs/arecibo/traits/snark/trait.RelaxedR1CSSNARKTrait.html +++ b/docs/arecibo/traits/snark/trait.RelaxedR1CSSNARKTrait.html @@ -46,4 +46,4 @@ a minimum sizing cue for the commitment key used by this SNARK implementation. The commitment key passed in setup should then be at least as large as this hint.

-

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched_ppsnark::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::ppsnark::RelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::snark::RelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::batched_ppsnark::BatchedRelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::ppsnark::RelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

source§

impl<E: Engine, EE: EvaluationEngineTrait<E>> RelaxedR1CSSNARKTrait<E> for arecibo::spartan::snark::RelaxedR1CSSNARK<E, EE>

§

type ProverKey = ProverKey<E, EE>

§

type VerifierKey = VerifierKey<E, EE>

\ No newline at end of file diff --git a/docs/arecibo/traits/trait.AbsorbInROTrait.html b/docs/arecibo/traits/trait.AbsorbInROTrait.html index c2f662b8e..9d71f32bb 100644 --- a/docs/arecibo/traits/trait.AbsorbInROTrait.html +++ b/docs/arecibo/traits/trait.AbsorbInROTrait.html @@ -4,4 +4,4 @@ fn absorb_in_ro(&self, ro: &mut E::RO); }
Expand description

A helper trait to absorb different objects in RO

Required Methods§

source

fn absorb_in_ro(&self, ro: &mut E::RO)

Absorbs the value in the provided RO

-

Implementors§

source§

impl<E: Engine> AbsorbInROTrait<E> for R1CSInstance<E>

source§

impl<E: Engine> AbsorbInROTrait<E> for RelaxedR1CSInstance<E>

\ No newline at end of file +

Implementors§

source§

impl<E: Engine> AbsorbInROTrait<E> for R1CSInstance<E>

source§

impl<E: Engine> AbsorbInROTrait<E> for RelaxedR1CSInstance<E>

\ No newline at end of file diff --git a/docs/arecibo/traits/trait.TranscriptReprTrait.html b/docs/arecibo/traits/trait.TranscriptReprTrait.html index b1987727a..558cc8fb9 100644 --- a/docs/arecibo/traits/trait.TranscriptReprTrait.html +++ b/docs/arecibo/traits/trait.TranscriptReprTrait.html @@ -4,4 +4,4 @@ fn to_transcript_bytes(&self) -> Vec<u8> ; }
Expand description

This trait allows types to implement how they want to be added to TranscriptEngine

Required Methods§

source

fn to_transcript_bytes(&self) -> Vec<u8>

returns a byte representation of self to be added to the transcript

-

Implementations on Foreign Types§

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group, T: TranscriptReprTrait<G>> TranscriptReprTrait<G> for &[T]

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

Implementors§

source§

impl<E: Engine> TranscriptReprTrait<<E as Engine>::GE> for RelaxedR1CSInstance<E>

source§

impl<E: Engine> TranscriptReprTrait<<E as Engine>::GE> for R1CSShapeSparkCommitment<E>

\ No newline at end of file +

Implementations on Foreign Types§

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group> TranscriptReprTrait<G> for Scalar

source§

impl<G: Group, T: TranscriptReprTrait<G>> TranscriptReprTrait<G> for &[T]

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Affine

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

source§

impl<G: DlogGroup> TranscriptReprTrait<G> for Compressed

Implementors§

source§

impl<E: Engine> TranscriptReprTrait<<E as Engine>::GE> for RelaxedR1CSInstance<E>

source§

impl<E: Engine> TranscriptReprTrait<<E as Engine>::GE> for R1CSShapeSparkCommitment<E>

\ No newline at end of file diff --git a/docs/src/arecibo/bellpepper/test_shape_cs.rs.html b/docs/src/arecibo/bellpepper/test_shape_cs.rs.html index 81586ec15..6eee1963e 100644 --- a/docs/src/arecibo/bellpepper/test_shape_cs.rs.html +++ b/docs/src/arecibo/bellpepper/test_shape_cs.rs.html @@ -314,9 +314,6 @@ 313 314 315 -316 -317 -318
//! Support for generating R1CS shape using bellpepper.
 //! `TestShapeCS` implements a superset of `ShapeCS`, adding non-trivial namespace support for use in testing.
 
@@ -616,10 +613,7 @@
 }
 
 fn compute_path(ns: &[String], this: &str) -> String {
-  assert!(
-    !this.chars().any(|a| a == '/'),
-    "'/' is not allowed in names"
-  );
+  assert!(!this.contains('/'), "'/' is not allowed in names");
 
   let mut name = String::new();
 
diff --git a/docs/src/arecibo/gadgets/nonnative/bignat.rs.html b/docs/src/arecibo/gadgets/nonnative/bignat.rs.html
index c17f722f1..97395b02b 100644
--- a/docs/src/arecibo/gadgets/nonnative/bignat.rs.html
+++ b/docs/src/arecibo/gadgets/nonnative/bignat.rs.html
@@ -890,14 +890,6 @@
 889
 890
 891
-892
-893
-894
-895
-896
-897
-898
-899
 
use super::{
   util::{
     Bitvector, Num, {f_to_nat, nat_to_f},
@@ -1108,11 +1100,7 @@
       .collect::<Result<Vec<_>, _>>()?;
     Ok(Self {
       value,
-      limb_values: if !limb_values.is_empty() {
-        Some(limb_values)
-      } else {
-        None
-      },
+      limb_values: (!limb_values.is_empty()).then_some(limb_values),
       limbs,
       params: BigNatParams::new(limb_width, n_limbs),
     })
@@ -1204,11 +1192,7 @@
       };
       allocations.extend(bv.allocations);
     }
-    let values = if !values.is_empty() {
-      Some(values)
-    } else {
-      None
-    };
+    let values = (!values.is_empty()).then_some(values);
     Ok(Bitvector {
       bits,
       values,
diff --git a/docs/src/arecibo/nifs.rs.html b/docs/src/arecibo/nifs.rs.html
index 4ce750f2f..f27eec5c3 100644
--- a/docs/src/arecibo/nifs.rs.html
+++ b/docs/src/arecibo/nifs.rs.html
@@ -383,69 +383,6 @@
 382
 383
 384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
 
//! This module implements a non-interactive folding scheme
 #![allow(non_snake_case)]
 
@@ -626,7 +563,7 @@
       test_shape_cs::TestShapeCS,
     },
     provider::{Bn256EngineKZG, PallasEngine, Secp256k1Engine},
-    r1cs::{commitment_key, SparseMatrix},
+    r1cs::commitment_key,
     traits::{snark::default_ck_hint, Engine},
   };
   use ::bellpepper_core::{num::AllocatedNum, ConstraintSystem, SynthesisError};
@@ -761,72 +698,9 @@
   }
 
   fn test_tiny_r1cs_with<E: Engine>() {
+    let num_vars = 3;
+    let S = crate::r1cs::tests::tiny_r1cs::<E>(num_vars);
     let one = <E::Scalar as Field>::ONE;
-    let (num_cons, num_vars, num_io, A, B, C) = {
-      let num_cons = 4;
-      let num_vars = 3;
-      let num_io = 2;
-
-      // Consider a cubic equation: `x^3 + x + 5 = y`, where `x` and `y` are respectively the input and output.
-      // The R1CS for this problem consists of the following constraints:
-      // `I0 * I0 - Z0 = 0`
-      // `Z0 * I0 - Z1 = 0`
-      // `(Z1 + I0) * 1 - Z2 = 0`
-      // `(Z2 + 5) * 1 - I1 = 0`
-
-      // Relaxed R1CS is a set of three sparse matrices (A B C), where there is a row for every
-      // constraint and a column for every entry in z = (vars, u, inputs)
-      // An R1CS instance is satisfiable iff:
-      // Az \circ Bz = u \cdot Cz + E, where z = (vars, 1, inputs)
-      let mut A: Vec<(usize, usize, E::Scalar)> = Vec::new();
-      let mut B: Vec<(usize, usize, E::Scalar)> = Vec::new();
-      let mut C: Vec<(usize, usize, E::Scalar)> = Vec::new();
-
-      // constraint 0 entries in (A,B,C)
-      // `I0 * I0 - Z0 = 0`
-      A.push((0, num_vars + 1, one));
-      B.push((0, num_vars + 1, one));
-      C.push((0, 0, one));
-
-      // constraint 1 entries in (A,B,C)
-      // `Z0 * I0 - Z1 = 0`
-      A.push((1, 0, one));
-      B.push((1, num_vars + 1, one));
-      C.push((1, 1, one));
-
-      // constraint 2 entries in (A,B,C)
-      // `(Z1 + I0) * 1 - Z2 = 0`
-      A.push((2, 1, one));
-      A.push((2, num_vars + 1, one));
-      B.push((2, num_vars, one));
-      C.push((2, 2, one));
-
-      // constraint 3 entries in (A,B,C)
-      // `(Z2 + 5) * 1 - I1 = 0`
-      A.push((3, 2, one));
-      A.push((3, num_vars, one + one + one + one + one));
-      B.push((3, num_vars, one));
-      C.push((3, num_vars + 2, one));
-
-      (num_cons, num_vars, num_io, A, B, C)
-    };
-
-    // create a shape object
-    let rows = num_cons;
-    let num_inputs = num_io + 1;
-    let cols = num_vars + num_inputs;
-    let S = {
-      let res = R1CSShape::new(
-        num_cons,
-        num_vars,
-        num_inputs - 1,
-        SparseMatrix::new(&A, rows, cols),
-        SparseMatrix::new(&B, rows, cols),
-        SparseMatrix::new(&C, rows, cols),
-      );
-      assert!(res.is_ok());
-      res.unwrap()
-    };
 
     // generate generators and ro constants
     let ck = commitment_key(&S, &*default_ck_hint());
diff --git a/docs/src/arecibo/provider/ipa_pc.rs.html b/docs/src/arecibo/provider/ipa_pc.rs.html
index 4fbca93d9..725480755 100644
--- a/docs/src/arecibo/provider/ipa_pc.rs.html
+++ b/docs/src/arecibo/provider/ipa_pc.rs.html
@@ -412,9 +412,6 @@
 411
 412
 413
-414
-415
-416
 
//! This module implements `EvaluationEngine` using an IPA-based polynomial commitment scheme
 use crate::{
   digest::SimpleDigestible,
@@ -650,17 +647,17 @@
       let r_inverse = r.invert().unwrap();
 
       // fold the left half and the right half
-      let a_vec_folded = a_vec[0..n / 2]
-        .par_iter()
-        .zip_eq(a_vec[n / 2..n].par_iter())
-        .map(|(a_L, a_R)| *a_L * r + r_inverse * *a_R)
-        .collect::<Vec<E::Scalar>>();
-
-      let b_vec_folded = b_vec[0..n / 2]
-        .par_iter()
-        .zip_eq(b_vec[n / 2..n].par_iter())
-        .map(|(b_L, b_R)| *b_L * r_inverse + r * *b_R)
-        .collect::<Vec<E::Scalar>>();
+      let a_vec_folded = zip_with!(
+        (a_vec[0..n / 2].par_iter(), a_vec[n / 2..n].par_iter()),
+        |a_L, a_R| *a_L * r + r_inverse * *a_R
+      )
+      .collect::<Vec<E::Scalar>>();
+
+      let b_vec_folded = zip_with!(
+        (b_vec[0..n / 2].par_iter(), b_vec[n / 2..n].par_iter()),
+        |b_L, b_R| *b_L * r_inverse + r * *b_R
+      )
+      .collect::<Vec<E::Scalar>>();
 
       let ck_folded = CommitmentKeyExtTrait::fold(&ck_L, &ck_R, &r_inverse, &r);
 
@@ -731,10 +728,7 @@
       }
 
       // return error if acc is zero
-      acc = match Option::from(acc.invert()) {
-        Some(inv) => inv,
-        None => return Err(NovaError::InternalError),
-      };
+      acc = Option::from(acc.invert()).ok_or(NovaError::InternalError)?;
 
       // compute the inverse once for all entries
       let mut inv = vec![E::Scalar::ZERO; v.len()];
diff --git a/docs/src/arecibo/provider/keccak.rs.html b/docs/src/arecibo/provider/keccak.rs.html
index 80cb6c17f..264e59331 100644
--- a/docs/src/arecibo/provider/keccak.rs.html
+++ b/docs/src/arecibo/provider/keccak.rs.html
@@ -252,7 +252,6 @@
 251
 252
 253
-254
 
//! This module provides an implementation of `TranscriptEngineTrait` using keccak256
 use crate::traits::PrimeFieldExt;
 use crate::{
@@ -327,12 +326,11 @@
 
     // update state
     self.round = {
-      if let Some(v) = self.round.checked_add(1) {
-        v
-      } else {
-        return Err(NovaError::InternalTranscriptError);
-      }
-    };
+      self
+        .round
+        .checked_add(1)
+        .ok_or(NovaError::InternalTranscriptError)?
+    };
     self.state.copy_from_slice(&output);
     self.transcript = Keccak256::new();
 
diff --git a/docs/src/arecibo/provider/poseidon.rs.html b/docs/src/arecibo/provider/poseidon.rs.html
index 9e34224d5..39222a67f 100644
--- a/docs/src/arecibo/provider/poseidon.rs.html
+++ b/docs/src/arecibo/provider/poseidon.rs.html
@@ -362,7 +362,7 @@
     let bits = hash[0].to_le_bits();
     let mut res = Scalar::ZERO;
     let mut coeff = Scalar::ONE;
-    for bit in bits[0..num_bits].into_iter() {
+    for bit in bits[..num_bits].into_iter() {
       if *bit {
         res += coeff;
       }
diff --git a/docs/src/arecibo/provider/shplonk.rs.html b/docs/src/arecibo/provider/shplonk.rs.html
index c7255613c..6aa8fa581 100644
--- a/docs/src/arecibo/provider/shplonk.rs.html
+++ b/docs/src/arecibo/provider/shplonk.rs.html
@@ -718,8 +718,6 @@
 717
 718
 719
-720
-721
 
//! Shplonk PCS
 use crate::provider::kzg_commitment::KZGCommitmentEngine;
 use crate::provider::kzg_commitment::{KZGProverKey, KZGVerifierKey, UniversalKZGParam};
@@ -1052,6 +1050,7 @@
   use super::*;
   use crate::provider::util::iterators::DoubleEndedIteratorExt as _;
   use crate::traits::TranscriptEngineTrait;
+  use crate::zip_with;
   use crate::{provider::keccak::Keccak256Transcript, CommitmentEngineTrait, CommitmentKey};
   use halo2curves::bn256::G1;
   use itertools::Itertools;
@@ -1201,10 +1200,7 @@
         .map(|poly| UniPoly::new(poly).evaluate(evaluation_scalar))
         .collect::<Vec<Fr>>();
 
-      let expected = evals
-        .iter()
-        .zip_eq(q_powers.iter())
-        .map(|(eval, q)| eval * q)
+      let expected = zip_with!((evals.iter(), q_powers.iter()), |eval, q| eval * q)
         .collect::<Vec<Fr>>()
         .into_iter()
         .sum::<Fr>();
diff --git a/docs/src/arecibo/r1cs/mod.rs.html b/docs/src/arecibo/r1cs/mod.rs.html
index 270005884..45e3399cc 100644
--- a/docs/src/arecibo/r1cs/mod.rs.html
+++ b/docs/src/arecibo/r1cs/mod.rs.html
@@ -923,18 +923,6 @@
 922
 923
 924
-925
-926
-927
-928
-929
-930
-931
-932
-933
-934
-935
-936
 
//! This module defines R1CS related types and a folding scheme for Relaxed R1CS
 mod sparse;
 pub(crate) mod util;
@@ -1597,16 +1585,8 @@
       return Err(NovaError::InvalidWitnessLength);
     }
 
-    let W = W1
-      .par_iter()
-      .zip_eq(W2)
-      .map(|(a, b)| *a + *r * *b)
-      .collect::<Vec<E::Scalar>>();
-    let E = E1
-      .par_iter()
-      .zip_eq(T)
-      .map(|(a, b)| *a + *r * *b)
-      .collect::<Vec<E::Scalar>>();
+    let W = zip_with!((W1.par_iter(), W2), |a, b| *a + *r * *b).collect::<Vec<E::Scalar>>();
+    let E = zip_with!((E1.par_iter(), T), |a, b| *a + *r * *b).collect::<Vec<E::Scalar>>();
     Ok(Self { W, E })
   }
 
@@ -1692,11 +1672,7 @@
     let (X2, comm_W_2) = (&U2.X, &U2.comm_W);
 
     // weighted sum of X, comm_W, comm_E, and u
-    let X = X1
-      .par_iter()
-      .zip_eq(X2)
-      .map(|(a, b)| *a + *r * *b)
-      .collect::<Vec<E::Scalar>>();
+    let X = zip_with!((X1.par_iter(), X2), |a, b| *a + *r * *b).collect::<Vec<E::Scalar>>();
     let comm_W = *comm_W_1 + *comm_W_2 * *r;
     let comm_E = *comm_E_1 + *comm_T * *r;
     let u = *u1 + *r;
@@ -1757,7 +1733,7 @@
 }
 
 #[cfg(test)]
-mod tests {
+pub(crate) mod tests {
   use ff::Field;
   use rand_chacha::ChaCha20Rng;
   use rand_core::SeedableRng;
@@ -1769,7 +1745,7 @@
     traits::Engine,
   };
 
-  fn tiny_r1cs<E: Engine>(num_vars: usize) -> R1CSShape<E> {
+  pub(crate) fn tiny_r1cs<E: Engine>(num_vars: usize) -> R1CSShape<E> {
     let one = <E::Scalar as Field>::ONE;
     let (num_cons, num_vars, num_io, A, B, C) = {
       let num_cons = 4;
diff --git a/docs/src/arecibo/spartan/batched.rs.html b/docs/src/arecibo/spartan/batched.rs.html
index cec405f26..966a95a88 100644
--- a/docs/src/arecibo/spartan/batched.rs.html
+++ b/docs/src/arecibo/spartan/batched.rs.html
@@ -625,7 +625,6 @@
 624
 625
 626
-627
 
//! This module implements `BatchedRelaxedR1CSSNARKTrait` using Spartan that is generic over the polynomial commitment
 //! and evaluation argument (i.e., a PCS) This version of Spartan does not use preprocessing so the verifier keeps the
 //! entire description of R1CS matrices. This is essentially optimal for the verifier when using an IPA-based polynomial
@@ -1052,7 +1051,6 @@
       .collect::<Vec<_>>();
 
     // Extract evaluations into a vector [(Azᵢ, Bzᵢ, Czᵢ, Eᵢ)]
-    // TODO: This is a multizip, simplify
     let ABCE_evals = || self.claims_outer.iter().zip_eq(self.evals_E.iter());
 
     // Add evaluations of Az, Bz, Cz, E to transcript
diff --git a/docs/src/arecibo/spartan/polys/univariate.rs.html b/docs/src/arecibo/spartan/polys/univariate.rs.html
index 7f519a40d..3be8241be 100644
--- a/docs/src/arecibo/spartan/polys/univariate.rs.html
+++ b/docs/src/arecibo/spartan/polys/univariate.rs.html
@@ -439,7 +439,7 @@
   }
 
   pub fn compress(&self) -> CompressedUniPoly<Scalar> {
-    let coeffs_except_linear_term = [&self.coeffs[0..1], &self.coeffs[2..]].concat();
+    let coeffs_except_linear_term = [&self.coeffs[..1], &self.coeffs[2..]].concat();
     assert_eq!(coeffs_except_linear_term.len() + 1, self.coeffs.len());
     CompressedUniPoly {
       coeffs_except_linear_term,
diff --git a/docs/src/arecibo/spartan/ppsnark.rs.html b/docs/src/arecibo/spartan/ppsnark.rs.html
index 9d3a03b30..145b077cf 100644
--- a/docs/src/arecibo/spartan/ppsnark.rs.html
+++ b/docs/src/arecibo/spartan/ppsnark.rs.html
@@ -2141,7 +2141,7 @@
     let result = padded::<PallasEngine>(&v, n, &e);
 
     assert_eq!(result.len(), n);
-    assert_eq!(&result[0..10], &v[..]);
+    assert_eq!(&result[..10], &v[..]);
     assert!(result[10..].iter().all(|&i| i == e));
   }
 }
diff --git a/docs/src/arecibo/spartan/snark.rs.html b/docs/src/arecibo/spartan/snark.rs.html
index 78038ad96..d3548d6fa 100644
--- a/docs/src/arecibo/spartan/snark.rs.html
+++ b/docs/src/arecibo/spartan/snark.rs.html
@@ -551,6 +551,7 @@
 550
 551
 552
+553
 
//! This module implements `RelaxedR1CSSNARKTrait` using Spartan that is generic
 //! over the polynomial commitment and evaluation argument (i.e., a PCS)
 //! This version of Spartan does not use preprocessing so the verifier keeps the entire
@@ -702,6 +703,7 @@
     let (mut poly_Az, mut poly_Bz, poly_Cz, mut poly_uCz_E) = {
       let (poly_Az, poly_Bz, poly_Cz) = S.multiply_vec(&z)?;
       let poly_uCz_E = (0..S.num_cons)
+        .into_par_iter()
         .map(|i| U.u * poly_Cz[i] + W.E[i])
         .collect::<Vec<E::Scalar>>();
       (
diff --git a/docs/src/arecibo/supernova/circuit.rs.html b/docs/src/arecibo/supernova/circuit.rs.html
index 9bb72203b..1c5ea5c03 100644
--- a/docs/src/arecibo/supernova/circuit.rs.html
+++ b/docs/src/arecibo/supernova/circuit.rs.html
@@ -888,7 +888,6 @@
 887
 888
 889
-890
 
//! Supernova implementation support arbitrary argumented circuits and running instances.
 //! There are two Verification Circuits for each argumented circuit: The primary and the secondary.
 //! Each of them is over a Pasta curve but
@@ -917,7 +916,7 @@
   },
   r1cs::{R1CSInstance, RelaxedR1CSInstance},
   traits::{commitment::CommitmentTrait, Engine, ROCircuitTrait, ROConstantsCircuit},
-  Commitment,
+  zip_with, Commitment,
 };
 use bellpepper_core::{
   boolean::{AllocatedBit, Boolean},
@@ -1353,11 +1352,10 @@
     ro.absorb(i);
 
     if self.params.is_primary_circuit {
-      if let Some(program_counter) = program_counter.as_ref() {
-        ro.absorb(program_counter)
-      } else {
-        Err(SynthesisError::AssignmentMissing)?
-      }
+      let Some(program_counter) = program_counter.as_ref() else {
+        return Err(SynthesisError::AssignmentMissing);
+      };
+      ro.absorb(program_counter)
     }
 
     for e in z_0 {
@@ -1396,18 +1394,18 @@
     )?;
 
     // update AllocatedRelaxedR1CSInstance on index match augmented circuit index
-    let U_next: Vec<AllocatedRelaxedR1CSInstance<E, NIO_NOVA_FOLD>> = U
-      .iter()
-      .zip_eq(last_augmented_circuit_selector.iter())
-      .map(|(U, equal_bit)| {
+    let U_next: Vec<AllocatedRelaxedR1CSInstance<E, NIO_NOVA_FOLD>> = zip_with!(
+      (U.iter(), last_augmented_circuit_selector.iter()),
+      |U, equal_bit| {
         conditionally_select_alloc_relaxed_r1cs(
           cs.namespace(|| "select on index namespace"),
           &U_fold,
           U,
           equal_bit,
         )
-      })
-      .collect::<Result<Vec<AllocatedRelaxedR1CSInstance<E, NIO_NOVA_FOLD>>, _>>()?;
+      }
+    )
+    .collect::<Result<Vec<AllocatedRelaxedR1CSInstance<E, NIO_NOVA_FOLD>>, _>>()?;
 
     Ok((U_next, check_pass))
   }