sp1_recursion_program/fri/
types.rs1use sp1_recursion_compiler::prelude::*;
2
3use crate::fri::TwoAdicMultiplicativeCosetVariable;
4
5pub type DigestVariable<C> = Array<C, Felt<<C as Config>::F>>;
6
7#[derive(DslVariable, Clone)]
8pub struct FriConfigVariable<C: Config> {
9 pub log_blowup: Var<C::N>,
10 pub blowup: Var<C::N>,
11 pub num_queries: Var<C::N>,
12 pub proof_of_work_bits: Var<C::N>,
13 pub generators: Array<C, Felt<C::F>>,
14 pub subgroups: Array<C, TwoAdicMultiplicativeCosetVariable<C>>,
15}
16
17#[derive(DslVariable, Clone)]
18pub struct FriProofVariable<C: Config> {
19 pub commit_phase_commits: Array<C, DigestVariable<C>>,
20 pub query_proofs: Array<C, FriQueryProofVariable<C>>,
21 pub final_poly: Ext<C::F, C::EF>,
22 pub pow_witness: Felt<C::F>,
23}
24
25#[derive(DslVariable, Clone)]
26pub struct FriQueryProofVariable<C: Config> {
27 pub commit_phase_openings: Array<C, FriCommitPhaseProofStepVariable<C>>,
28}
29
30#[derive(DslVariable, Clone)]
31pub struct FriCommitPhaseProofStepVariable<C: Config> {
32 pub sibling_value: Ext<C::F, C::EF>,
33 pub opening_proof: Array<C, DigestVariable<C>>,
34}
35
36#[derive(DslVariable, Clone)]
37pub struct FriChallengesVariable<C: Config> {
38 pub query_indices: Array<C, Array<C, Var<C::N>>>,
39 pub betas: Array<C, Ext<C::F, C::EF>>,
40}
41
42#[derive(DslVariable, Clone)]
43pub struct DimensionsVariable<C: Config> {
44 pub height: Var<C::N>,
45}
46
47#[derive(DslVariable, Clone)]
48pub struct TwoAdicPcsProofVariable<C: Config> {
49 pub fri_proof: FriProofVariable<C>,
50 pub query_openings: Array<C, Array<C, BatchOpeningVariable<C>>>,
51}
52
53#[derive(DslVariable, Clone)]
54pub struct BatchOpeningVariable<C: Config> {
55 pub opened_values: Array<C, Array<C, Ext<C::F, C::EF>>>,
56 pub opening_proof: Array<C, Array<C, Felt<C::F>>>,
57}
58
59#[derive(DslVariable, Clone)]
60pub struct TwoAdicPcsRoundVariable<C: Config> {
61 pub batch_commit: DigestVariable<C>,
62 pub mats: Array<C, TwoAdicPcsMatsVariable<C>>,
63}
64
65#[allow(clippy::type_complexity)]
66#[derive(DslVariable, Clone)]
67pub struct TwoAdicPcsMatsVariable<C: Config> {
68 pub domain: TwoAdicMultiplicativeCosetVariable<C>,
69 pub points: Array<C, Ext<C::F, C::EF>>,
70 pub values: Array<C, Array<C, Ext<C::F, C::EF>>>,
71}