use rand_core::RngCore;
pub trait Proof: Sized {
type ProvingKey;
type VerifyingKey;
type Instance;
type Witness;
type Error;
fn create<R: RngCore>(
pk: &Self::ProvingKey,
instance: &Self::Instance,
witness: &Self::Witness,
rng: R,
) -> Result<Self, Self::Error>;
fn verify(&self, vk: &Self::VerifyingKey, instance: &Self::Instance)
-> Result<(), Self::Error>;
}