Skip to content

Commit ea5964d

Browse files
authored
replace join by extend (#18)
1 parent f5a0a47 commit ea5964d

File tree

2 files changed

+13
-22
lines changed

2 files changed

+13
-22
lines changed

src/arithmetics/mod.rs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -238,29 +238,21 @@ pub fn sum<C: Config>(
238238
acc
239239
}
240240

241-
// Join two arrays
242-
pub fn join<C: Config>(
241+
// Extend an array by one element
242+
pub fn extend<C: Config>(
243243
builder: &mut Builder<C>,
244-
a: &Array<C, Ext<C::F, C::EF>>,
245-
b: &Array<C, Ext<C::F, C::EF>>,
244+
arr: &Array<C, Ext<C::F, C::EF>>,
245+
elem: &Ext<C::F, C::EF>,
246246
) -> Array<C, Ext<C::F, C::EF>> {
247-
let a_len = a.len();
248-
let b_len = b.len();
249-
let out_len = builder.eval_expr(a_len.clone() + b_len.clone());
250-
let out = builder.dyn_array(out_len);
247+
let new_len: Var<C::N> = builder.eval(arr.len() + C::N::ONE);
248+
let out = builder.dyn_array(new_len);
251249

252-
builder.range(0, a_len.clone()).for_each(|i_vec, builder| {
250+
builder.range(0, arr.len()).for_each(|i_vec, builder| {
253251
let i = i_vec[0];
254-
let a_val = builder.get(a, i);
255-
builder.set(&out, i, a_val);
256-
});
257-
258-
builder.range(0, b_len).for_each(|i_vec, builder| {
259-
let b_i = i_vec[0];
260-
let i = builder.eval_expr(b_i + a_len.clone());
261-
let b_val = builder.get(b, b_i);
262-
builder.set(&out, i, b_val);
252+
let val = builder.get(arr, i);
253+
builder.set_value(&out, i, val);
263254
});
255+
builder.set_value(&out, arr.len(), elem.clone());
264256

265257
out
266258
}

src/tower_verifier/program.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ use super::binding::{
22
IOPProverMessageVariable, PointAndEvalVariable, PointVariable, TowerVerifierInputVariable,
33
};
44
use crate::arithmetics::{
5-
challenger_multi_observe, dot_product, dot_product_pt_n_eval, eq_eval, evaluate_at_point, exts_to_felts, fixed_dot_product, gen_alpha_pows, is_smaller_than, join, product, reverse
5+
challenger_multi_observe, dot_product, dot_product_pt_n_eval, eq_eval, evaluate_at_point,
6+
extend, exts_to_felts, fixed_dot_product, gen_alpha_pows, is_smaller_than, product, reverse,
67
};
78
use crate::transcript::transcript_observe_label;
89
use openvm_native_compiler::prelude::*;
@@ -444,9 +445,7 @@ pub fn verify_tower_proof<C: Config>(
444445
let c2: Ext<<C as Config>::F, <C as Config>::EF> = builder.eval(r_merge.clone());
445446
let coeffs = vec![c1, c2];
446447

447-
let r_merge_arr = builder.dyn_array(RVar::from(1));
448-
builder.set(&r_merge_arr, 0, r_merge);
449-
let rt_prime = join(builder, &sub_rt, &r_merge_arr);
448+
let rt_prime = extend(builder, &sub_rt, &r_merge);
450449
builder.cycle_tracker_end("derive rt_prime");
451450

452451
// generate next round challenge

0 commit comments

Comments
 (0)