sp1_recursion_program/fri/
types.rs

1use 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}