use crate::messages::{
FirstReduceChallenge, FirstReduceMessage, FoldScalarsChallenge, ScalarProductMessage,
SecondReduceChallenge, SecondReduceMessage,
};
pub trait ProverState {
type G1;
type G2;
type GT;
type Scalar;
type Setup;
#[must_use]
fn compute_first_reduce_message(
&self,
setup: &Self::Setup,
) -> FirstReduceMessage<Self::G1, Self::G2, Self::GT>;
#[must_use]
fn reduce_combine(
self,
setup: &Self::Setup,
first_challenge: FirstReduceChallenge<Self::Scalar>,
) -> Self;
#[must_use]
fn compute_second_reduce_message(
&self,
setup: &Self::Setup,
) -> SecondReduceMessage<Self::G1, Self::G2, Self::GT>;
#[must_use]
fn reduce_fold(
self,
setup: &Self::Setup,
second_challenge: SecondReduceChallenge<Self::Scalar>,
) -> Self;
#[must_use]
fn compute_scalar_product_message(
self,
setup: &Self::Setup,
fold_scalars_challenge: FoldScalarsChallenge<Self::Scalar>,
) -> ScalarProductMessage<Self::G1, Self::G2>;
}