Use get_required_bits; Optimize Condition::Lt flattening
This commit is contained in:
parent
83c7ce2f21
commit
d9697ec42a
2 changed files with 22 additions and 9 deletions
|
@ -75,14 +75,26 @@ impl Flattener {
|
|||
)
|
||||
));
|
||||
}
|
||||
let mut expr = VariableReference(format!("{}_b0", &cond_result)); // * 2^0
|
||||
for i in 1..self.bits - 1 {
|
||||
let mut expr = Add(
|
||||
box VariableReference(format!("{}_b0", &cond_result)), // * 2^0
|
||||
box Mult(
|
||||
box VariableReference(format!("{}_b1", &cond_result)),
|
||||
box NumberLiteral(T::from(2))
|
||||
)
|
||||
);
|
||||
for i in 1..self.bits/2 {
|
||||
expr = Add(
|
||||
box Mult(
|
||||
box VariableReference(format!("{}_b{}", &cond_result, i)),
|
||||
box NumberLiteral(T::from(2).pow(i))
|
||||
),
|
||||
box expr
|
||||
box expr,
|
||||
box Add(
|
||||
box Mult(
|
||||
box VariableReference(format!("{}_b{}", &cond_result, 2*i)),
|
||||
box NumberLiteral(T::from(2).pow(i))
|
||||
),
|
||||
box Mult(
|
||||
box VariableReference(format!("{}_b{}", &cond_result, 2*i+1)),
|
||||
box NumberLiteral(T::from(2).pow(i))
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
expr = Add(
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
extern crate num;
|
||||
|
||||
mod absy;
|
||||
mod parser;
|
||||
|
@ -18,7 +19,7 @@ mod libsnark;
|
|||
|
||||
use std::fs::File;
|
||||
use std::path::Path;
|
||||
use field::FieldPrime;
|
||||
use field::{Field, FieldPrime};
|
||||
use parser::parse_program;
|
||||
use flatten::Flattener;
|
||||
use r1cs::r1cs_program;
|
||||
|
@ -43,7 +44,7 @@ fn main() {
|
|||
},
|
||||
};
|
||||
println!("program:\n{}", program_ast);
|
||||
let program_flattened = Flattener::new(8).flatten_program(program_ast);
|
||||
let program_flattened = Flattener::new(FieldPrime::get_required_bits()).flatten_program(program_ast);
|
||||
println!("flattened:\n{}", program_flattened);
|
||||
let (variables, a, b, c) = r1cs_program(&program_flattened);
|
||||
println!("variables {:?}", variables);
|
||||
|
|
Loading…
Reference in a new issue