use alloc::vec::Vec;
use p3_challenger::{CanObserve, CanSampleUniformBits, FieldChallenger, GrindingChallenger};
use p3_commit::MultilinearPcs;
use p3_field::ExtensionField;
use p3_multilinear_util::point::Point;
use crate::table::{OpeningEvals, OpeningProtocol};
pub trait PrescribedPointPcs<Challenge, Challenger>: MultilinearPcs<Challenge, Challenger>
where
Challenge: ExtensionField<Self::Val>,
Challenger: FieldChallenger<Self::Val>
+ GrindingChallenger<Witness = Self::Val>
+ CanSampleUniformBits<Self::Val>
+ CanObserve<Self::Commitment>,
{
fn open_at(
&self,
prover_data: Self::ProverData,
protocol: &OpeningProtocol,
points: &[Point<Challenge>],
challenger: &mut Challenger,
) -> Self::Proof;
fn verify_at(
&self,
commitment: &Self::Commitment,
proof: &Self::Proof,
protocol: &OpeningProtocol,
points: &[Point<Challenge>],
challenger: &mut Challenger,
) -> Result<Vec<OpeningEvals<Challenge>>, Self::Error>;
}