openvm_native_recursion/fri/
types.rs
1use openvm_native_compiler::prelude::*;
2
3use crate::{digest::DigestVariable, fri::TwoAdicMultiplicativeCosetVariable, vars::HintSlice};
4
5#[derive(Clone)]
6pub struct FriConfigVariable<C: Config> {
7 pub log_blowup: usize,
8 pub blowup: usize,
9 pub log_final_poly_len: usize,
10 pub num_queries: usize,
11 pub proof_of_work_bits: usize,
12 pub generators: Array<C, Felt<C::F>>,
13 pub subgroups: Array<C, TwoAdicMultiplicativeCosetVariable<C>>,
14}
15
16impl<C: Config> FriConfigVariable<C> {
17 pub fn get_subgroup(
18 &self,
19 builder: &mut Builder<C>,
20 log_degree: impl Into<RVar<C::N>>,
21 ) -> TwoAdicMultiplicativeCosetVariable<C> {
22 builder.get(&self.subgroups, log_degree)
23 }
24
25 pub fn get_two_adic_generator(
26 &self,
27 builder: &mut Builder<C>,
28 bits: impl Into<RVar<C::N>>,
29 ) -> Felt<C::F> {
30 builder.get(&self.generators, bits)
31 }
32}
33
34#[derive(DslVariable, Clone)]
35pub struct FriProofVariable<C: Config> {
36 pub commit_phase_commits: Array<C, DigestVariable<C>>,
37 pub query_proofs: Array<C, FriQueryProofVariable<C>>,
38 pub final_poly: Array<C, Ext<C::F, C::EF>>,
39 pub pow_witness: Felt<C::F>,
40}
41
42#[derive(DslVariable, Clone)]
43pub struct FriQueryProofVariable<C: Config> {
44 pub input_proof: Array<C, BatchOpeningVariable<C>>,
45 pub commit_phase_openings: Array<C, FriCommitPhaseProofStepVariable<C>>,
46}
47
48#[derive(DslVariable, Clone)]
49pub struct FriCommitPhaseProofStepVariable<C: Config> {
50 pub sibling_value: Ext<C::F, C::EF>,
51 pub opening_proof: HintSlice<C>,
52}
53
54#[derive(DslVariable, Clone)]
55pub struct FriChallengesVariable<C: Config> {
56 pub query_indices: Array<C, Array<C, Var<C::N>>>,
57 pub betas: Array<C, Ext<C::F, C::EF>>,
58}
59
60#[derive(DslVariable, Clone)]
61pub struct DimensionsVariable<C: Config> {
62 pub log_height: Usize<C::N>,
63}
64
65#[derive(DslVariable, Clone)]
66pub struct BatchOpeningVariable<C: Config> {
67 pub opened_values: HintSlice<C>,
68 pub opening_proof: HintSlice<C>,
69}
70
71#[derive(DslVariable, Clone)]
72pub struct TwoAdicPcsRoundVariable<C: Config> {
73 pub batch_commit: DigestVariable<C>,
74 pub mats: Array<C, TwoAdicPcsMatsVariable<C>>,
75 pub permutation: Array<C, Usize<C::N>>,
78}
79
80#[derive(DslVariable, Clone)]
81pub struct TwoAdicPcsMatsVariable<C: Config> {
82 pub domain: TwoAdicMultiplicativeCosetVariable<C>,
83 pub points: Array<C, Ext<C::F, C::EF>>,
84 #[allow(clippy::type_complexity)]
85 pub values: Array<C, Array<C, Ext<C::F, C::EF>>>,
86}