sp1_hypercube/prover/
cpu.rs1use slop_algebra::extension::BinomialExtensionField;
2use slop_challenger::IopCtx;
3use slop_jagged::{DefaultJaggedProver, JaggedProver};
4use slop_multilinear::MultilinearPcsVerifier;
5use slop_stacked::StackedPcsProver;
6use sp1_primitives::{SP1Field, SP1GlobalContext};
7
8use super::{DefaultTraceGenerator, ShardProver, SimpleProver, ZerocheckAir};
9use crate::{
10 prover::SP1MerkleTreeProver, GkrProverImpl, InnerSC, LogupGkrCpuTraceGenerator, SP1Pcs,
11 ShardContextImpl, ShardVerifier,
12};
13
14type SC<GC, Verifier, A> = ShardContextImpl<GC, Verifier, A>;
15
16pub type CpuShardProver<GC, Verifier, PcsComponents, A> =
18 ShardProver<GC, SC<GC, Verifier, A>, PcsComponents>;
19
20pub type CpuSimpleProver<GC, Verifier, PcsComponents, A> =
22 SimpleProver<GC, SC<GC, Verifier, A>, CpuShardProver<GC, Verifier, PcsComponents, A>>;
23
24impl<GC, Verifier, A, PcsComponents> CpuShardProver<GC, Verifier, PcsComponents, A>
25where
26 GC: IopCtx,
27 Verifier: MultilinearPcsVerifier<GC>,
28 PcsComponents: DefaultJaggedProver<GC, Verifier>,
29 A: ZerocheckAir<GC::F, GC::EF>,
30{
31 #[must_use]
33 pub fn new(verifier: ShardVerifier<GC, ShardContextImpl<GC, Verifier, A>>) -> Self {
34 let ShardVerifier { jagged_pcs_verifier: pcs_verifier, machine } = verifier;
36 let pcs_prover = JaggedProver::from_verifier(&pcs_verifier);
37 let trace_generator = DefaultTraceGenerator::new(machine);
38 let logup_gkr_trace_generator = LogupGkrCpuTraceGenerator::default();
39 let logup_gkr_prover = GkrProverImpl::new(logup_gkr_trace_generator);
40
41 Self::from_components(trace_generator, logup_gkr_prover, pcs_prover)
42 }
43}
44
45#[must_use]
49pub fn simple_prover<A>(
50 verifier: ShardVerifier<SP1GlobalContext, InnerSC<A>>,
51) -> CpuSimpleProver<
52 SP1GlobalContext,
53 SP1Pcs<SP1GlobalContext>,
54 StackedPcsProver<SP1MerkleTreeProver, SP1GlobalContext>,
55 A,
56>
57where
58 A: ZerocheckAir<SP1Field, BinomialExtensionField<SP1Field, 4>>,
59{
60 let shard_prover = CpuShardProver::new(verifier.clone());
61 SimpleProver::new(verifier, shard_prover)
62}