1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

Use get_required_bits; Optimize Condition::Lt flattening

This commit is contained in:
Dennis Kuhnert 2017-02-26 12:03:50 +01:00
parent 83c7ce2f21
commit d9697ec42a
2 changed files with 22 additions and 9 deletions

View file

@ -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(

View file

@ -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);