Struct ark_linear_sumcheck::ml_sumcheck::protocol::IPForMLSumcheck [−][src]
Interactive Proof for Multilinear Sumcheck
Implementations
impl<F: Field> IPForMLSumcheck<F>[src]
pub fn prover_init(
polynomial: &ListOfProductsOfPolynomials<F>
) -> ProverState<F>[src]
polynomial: &ListOfProductsOfPolynomials<F>
) -> ProverState<F>
initialize the prover to argue for the sum of polynomial over {0,1}^num_vars
The polynomial is represented by a list of products of polynomials along with its coefficient that is meant to be added together.
This data structure of the polynomial is a list of list of (coefficient, DenseMultilinearExtension).
- Number of products n =
polynomial.products.len(), - Number of multiplicands of ith product m_i =
polynomial.products[i].1.len(), - Coefficient of ith product c_i =
polynomial.products[i].0
The resulting polynomial is
$$\sum_{i=0}^{n}C_i\cdot\prod_{j=0}^{m_i}P_{ij}$$
pub fn prove_round(
prover_state: ProverState<F>,
v_msg: &Option<VerifierMsg<F>>
) -> (ProverMsg<F>, ProverState<F>)[src]
prover_state: ProverState<F>,
v_msg: &Option<VerifierMsg<F>>
) -> (ProverMsg<F>, ProverState<F>)
receive message from verifier, generate prover message, and proceed to next round
Main algorithm used is from section 3.2 of XZZPS19.
impl<F: Field> IPForMLSumcheck<F>[src]
pub fn verifier_init(index_info: &PolynomialInfo) -> VerifierState<F>[src]
initialize the verifier
pub fn verify_round<R: RngCore>(
prover_msg: ProverMsg<F>,
verifier_state: VerifierState<F>,
rng: &mut R
) -> (Option<VerifierMsg<F>>, VerifierState<F>)[src]
prover_msg: ProverMsg<F>,
verifier_state: VerifierState<F>,
rng: &mut R
) -> (Option<VerifierMsg<F>>, VerifierState<F>)
Run verifier at current round, given prover message
Normally, this function should perform actual verification. Instead, verify_round only samples
and stores randomness and perform verifications altogether in check_and_generate_subclaim at
the last step.
pub fn check_and_generate_subclaim(
verifier_state: VerifierState<F>,
asserted_sum: F
) -> Result<SubClaim<F>, Error>[src]
verifier_state: VerifierState<F>,
asserted_sum: F
) -> Result<SubClaim<F>, Error>
verify the sumcheck phase, and generate the subclaim
If the asserted sum is correct, then the multilinear polynomial evaluated at subclaim.point
is subclaim.expected_evaluation. Otherwise, it is highly unlikely that those two will be equal.
Larger field size guarantees smaller soundness error.
pub fn sample_round<R: RngCore>(rng: &mut R) -> VerifierMsg<F>[src]
simulate a verifier message without doing verification
Given the same calling context, random_oracle_round output exactly the same message as
verify_round
Auto Trait Implementations
impl<F> RefUnwindSafe for IPForMLSumcheck<F> where
F: RefUnwindSafe,
F: RefUnwindSafe,
impl<F> Send for IPForMLSumcheck<F>
impl<F> Sync for IPForMLSumcheck<F>
impl<F> Unpin for IPForMLSumcheck<F> where
F: Unpin,
F: Unpin,
impl<F> UnwindSafe for IPForMLSumcheck<F> where
F: UnwindSafe,
F: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,