openvm_native_recursion/fri/
types.rs1use 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 commit_proof_of_work_bits: usize,
12 pub query_proof_of_work_bits: usize,
13 pub generators: Array<C, Felt<C::F>>,
14 pub subgroups: Array<C, TwoAdicMultiplicativeCosetVariable<C>>,
15}
16
17impl<C: Config> FriConfigVariable<C> {
18 pub fn get_subgroup(
19 &self,
20 builder: &mut Builder<C>,
21 log_degree: impl Into<RVar<C::N>>,
22 ) -> TwoAdicMultiplicativeCosetVariable<C> {
23 builder.get(&self.subgroups, log_degree)
24 }
25
26 pub fn get_two_adic_generator(
27 &self,
28 builder: &mut Builder<C>,
29 bits: impl Into<RVar<C::N>>,
30 ) -> Felt<C::F> {
31 builder.get(&self.generators, bits)
32 }
33}
34
35#[derive(DslVariable, Clone)]
36pub struct FriProofVariable<C: Config> {
37 pub commit_phase_commits: Array<C, DigestVariable<C>>,
38 pub query_proofs: Array<C, FriQueryProofVariable<C>>,
39 pub final_poly: Array<C, Ext<C::F, C::EF>>,
40 pub commit_pow_witnesses: Array<C, Felt<C::F>>,
41 pub query_pow_witness: Felt<C::F>,
42}
43
44#[derive(DslVariable, Clone)]
45pub struct FriQueryProofVariable<C: Config> {
46 pub input_proof: Array<C, BatchOpeningVariable<C>>,
47 pub commit_phase_openings: Array<C, FriCommitPhaseProofStepVariable<C>>,
48}
49
50#[derive(DslVariable, Clone)]
51pub struct FriCommitPhaseProofStepVariable<C: Config> {
52 pub sibling_value: Ext<C::F, C::EF>,
53 pub opening_proof: HintSlice<C>,
54}
55
56#[derive(DslVariable, Clone)]
57pub struct FriChallengesVariable<C: Config> {
58 pub query_indices: Array<C, Array<C, Var<C::N>>>,
59 pub betas: Array<C, Ext<C::F, C::EF>>,
60}
61
62#[derive(DslVariable, Clone)]
63pub struct DimensionsVariable<C: Config> {
64 pub log_height: Usize<C::N>,
65}
66
67#[derive(DslVariable, Clone)]
68pub struct BatchOpeningVariable<C: Config> {
69 pub opened_values: HintSlice<C>,
70 pub opening_proof: HintSlice<C>,
71}
72
73#[derive(DslVariable, Clone)]
74pub struct TwoAdicPcsRoundVariable<C: Config> {
75 pub batch_commit: DigestVariable<C>,
76 pub mats: Array<C, TwoAdicPcsMatsVariable<C>>,
77 pub permutation: Array<C, Usize<C::N>>,
80}
81
82#[derive(DslVariable, Clone)]
83pub struct TwoAdicPcsMatsVariable<C: Config> {
84 pub domain: TwoAdicMultiplicativeCosetVariable<C>,
85 pub points: Array<C, Ext<C::F, C::EF>>,
86 #[allow(clippy::type_complexity)]
87 pub values: Array<C, Array<C, Ext<C::F, C::EF>>>,
88}