@@ -7,30 +7,26 @@ use ff_ext::{BabyBearExt4, SmallField};
77use itertools:: Either ;
88use openvm_native_compiler:: prelude:: * ;
99use openvm_native_compiler_derive:: iter_zip;
10- use openvm_native_recursion:: challenger:: ChallengerVariable ;
11- use openvm_native_recursion:: challenger:: {
12- duplex:: DuplexChallengerVariable , CanObserveVariable , FeltChallenger ,
13- } ;
14- use p3_field:: { FieldAlgebra , FieldExtensionAlgebra } ;
10+ use openvm_native_recursion:: challenger:: { duplex:: DuplexChallengerVariable , FeltChallenger } ;
11+ use openvm_stark_backend:: p3_field:: { FieldAlgebra , FieldExtensionAlgebra } ;
1512type E = BabyBearExt4 ;
16- const HASH_RATE : usize = 8 ;
1713const MAX_NUM_VARS : usize = 25 ;
1814
19- pub fn print_ext_arr < C : Config > ( builder : & mut Builder < C > , arr : & Array < C , Ext < C :: F , C :: EF > > ) {
15+ pub fn _print_ext_arr < C : Config > ( builder : & mut Builder < C > , arr : & Array < C , Ext < C :: F , C :: EF > > ) {
2016 iter_zip ! ( builder, arr) . for_each ( |ptr_vec, builder| {
2117 let e = builder. iter_ptr_get ( arr, ptr_vec[ 0 ] ) ;
2218 builder. print_e ( e) ;
2319 } ) ;
2420}
2521
26- pub fn print_felt_arr < C : Config > ( builder : & mut Builder < C > , arr : & Array < C , Felt < C :: F > > ) {
22+ pub fn _print_felt_arr < C : Config > ( builder : & mut Builder < C > , arr : & Array < C , Felt < C :: F > > ) {
2723 iter_zip ! ( builder, arr) . for_each ( |ptr_vec, builder| {
2824 let f = builder. iter_ptr_get ( arr, ptr_vec[ 0 ] ) ;
2925 builder. print_f ( f) ;
3026 } ) ;
3127}
3228
33- pub fn print_usize_arr < C : Config > ( builder : & mut Builder < C > , arr : & Array < C , Usize < C :: N > > ) {
29+ pub fn _print_usize_arr < C : Config > ( builder : & mut Builder < C > , arr : & Array < C , Usize < C :: N > > ) {
3430 iter_zip ! ( builder, arr) . for_each ( |ptr_vec, builder| {
3531 let n = builder. iter_ptr_get ( arr, ptr_vec[ 0 ] ) ;
3632 builder. print_v ( n. get_var ( ) ) ;
@@ -204,24 +200,6 @@ pub fn dot_product<C: Config>(
204200 acc
205201}
206202
207- pub fn dot_product_pt_n_eval < C : Config > (
208- builder : & mut Builder < C > ,
209- pt_and_eval : & Array < C , PointAndEvalVariable < C > > ,
210- b : & Array < C , Ext < C :: F , C :: EF > > ,
211- ) -> Ext < <C as Config >:: F , <C as Config >:: EF > {
212- let acc: Ext < C :: F , C :: EF > = builder. eval ( C :: F :: ZERO ) ;
213-
214- iter_zip ! ( builder, pt_and_eval, b) . for_each ( |idx_vec, builder| {
215- let ptr_a = idx_vec[ 0 ] ;
216- let ptr_b = idx_vec[ 1 ] ;
217- let v_a = builder. iter_ptr_get ( & pt_and_eval, ptr_a) ;
218- let v_b = builder. iter_ptr_get ( & b, ptr_b) ;
219- builder. assign ( & acc, acc + v_a. eval * v_b) ;
220- } ) ;
221-
222- acc
223- }
224-
225203pub fn reverse < C : Config , T : MemVariable < C > > (
226204 builder : & mut Builder < C > ,
227205 arr : & Array < C , T > ,
@@ -321,20 +299,6 @@ pub fn eq_eval_with_index<C: Config>(
321299 acc
322300}
323301
324- // Multiply all elements in the Array
325- pub fn product < C : Config > (
326- builder : & mut Builder < C > ,
327- arr : & Array < C , Ext < C :: F , C :: EF > > ,
328- ) -> Ext < C :: F , C :: EF > {
329- let acc = builder. constant ( C :: EF :: ONE ) ;
330- iter_zip ! ( builder, arr) . for_each ( |idx_vec, builder| {
331- let el = builder. iter_ptr_get ( arr, idx_vec[ 0 ] ) ;
332- builder. assign ( & acc, acc * el) ;
333- } ) ;
334-
335- acc
336- }
337-
338302// Multiply all elements in a nested Array
339303pub fn nested_product < C : Config > (
340304 builder : & mut Builder < C > ,
@@ -353,47 +317,6 @@ pub fn nested_product<C: Config>(
353317 acc
354318}
355319
356- // Add all elements in the Array
357- pub fn sum < C : Config > (
358- builder : & mut Builder < C > ,
359- arr : & Array < C , Ext < C :: F , C :: EF > > ,
360- ) -> Ext < C :: F , C :: EF > {
361- let acc = builder. constant ( C :: EF :: ZERO ) ;
362- iter_zip ! ( builder, arr) . for_each ( |idx_vec, builder| {
363- let el = builder. iter_ptr_get ( arr, idx_vec[ 0 ] ) ;
364- builder. assign ( & acc, acc + el) ;
365- } ) ;
366-
367- acc
368- }
369-
370- // Join two arrays
371- pub fn join < C : Config > (
372- builder : & mut Builder < C > ,
373- a : & Array < C , Ext < C :: F , C :: EF > > ,
374- b : & Array < C , Ext < C :: F , C :: EF > > ,
375- ) -> Array < C , Ext < C :: F , C :: EF > > {
376- let a_len = a. len ( ) ;
377- let b_len = b. len ( ) ;
378- let out_len = builder. eval_expr ( a_len. clone ( ) + b_len. clone ( ) ) ;
379- let out = builder. dyn_array ( out_len) ;
380-
381- builder. range ( 0 , a_len. clone ( ) ) . for_each ( |i_vec, builder| {
382- let i = i_vec[ 0 ] ;
383- let a_val = builder. get ( a, i) ;
384- builder. set ( & out, i, a_val) ;
385- } ) ;
386-
387- builder. range ( 0 , b_len) . for_each ( |i_vec, builder| {
388- let b_i = i_vec[ 0 ] ;
389- let i = builder. eval_expr ( b_i + a_len. clone ( ) ) ;
390- let b_val = builder. get ( b, b_i) ;
391- builder. set ( & out, i, b_val) ;
392- } ) ;
393-
394- out
395- }
396-
397320// Generate alpha power challenges
398321pub fn gen_alpha_pows < C : Config > (
399322 builder : & mut Builder < C > ,
@@ -421,7 +344,6 @@ pub fn gen_alpha_pows<C: Config>(
421344/// = \sum_{\mathbf{b}=0}^{max_idx} \prod_{i=0}^{n-1} (x_i y_i b_i + (1 - x_i)(1 - y_i)(1 - b_i))
422345pub fn eq_eval_less_or_equal_than < C : Config > (
423346 builder : & mut Builder < C > ,
424- _challenger : & mut DuplexChallengerVariable < C > ,
425347 opcode_proof : & ZKVMChipProofInputVariable < C > ,
426348 a : & Array < C , Ext < C :: F , C :: EF > > ,
427349 b : & Array < C , Ext < C :: F , C :: EF > > ,
@@ -519,35 +441,6 @@ pub fn build_eq_x_r_vec_sequential<C: Config>(
519441 evals
520442}
521443
522- pub fn build_eq_x_r_vec_sequential_with_offset < C : Config > (
523- builder : & mut Builder < C > ,
524- r : & Array < C , Ext < C :: F , C :: EF > > ,
525- offset : Usize < C :: N > ,
526- ) -> Array < C , Ext < C :: F , C :: EF > > {
527- // we build eq(x,r) from its evaluations
528- // we want to evaluate eq(x,r) over x \in {0, 1}^num_vars
529- // for example, with num_vars = 4, x is a binary vector of 4, then
530- // 0 0 0 0 -> (1-r0) * (1-r1) * (1-r2) * (1-r3)
531- // 1 0 0 0 -> r0 * (1-r1) * (1-r2) * (1-r3)
532- // 0 1 0 0 -> (1-r0) * r1 * (1-r2) * (1-r3)
533- // 1 1 0 0 -> r0 * r1 * (1-r2) * (1-r3)
534- // ....
535- // 1 1 1 1 -> r0 * r1 * r2 * r3
536- // we will need 2^num_var evaluations
537-
538- let r_len: Var < C :: N > = builder. eval ( r. len ( ) - offset) ;
539- let evals_len: Felt < C :: F > = builder. constant ( C :: F :: ONE ) ;
540- let evals_len = builder. exp_power_of_2_v :: < Felt < C :: F > > ( evals_len, r_len) ;
541- let evals_len = builder. cast_felt_to_var ( evals_len) ;
542-
543- let evals: Array < C , Ext < C :: F , C :: EF > > = builder. dyn_array ( evals_len) ;
544- // _debug
545- // build_eq_x_r_helper_sequential_offset(r, &mut evals, E::ONE);
546- // unsafe { std::mem::transmute(evals) }
547- // FIXME: this function is not implemented yet
548- evals
549- }
550-
551444pub fn ceil_log2 ( x : usize ) -> usize {
552445 assert ! ( x > 0 , "ceil_log2: x must be positive" ) ;
553446 // Calculate the number of bits in usize
0 commit comments