invert lhs and rhs in r1cs import to please the R1CS exporter. Replace fold with reduce for more concise output
This commit is contained in:
parent
04b624688a
commit
4889989de2
3 changed files with 28 additions and 7 deletions
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -341,6 +341,11 @@ dependencies = [
|
|||
"redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reduce"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "0.2.11"
|
||||
|
@ -571,6 +576,7 @@ dependencies = [
|
|||
"lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"reduce 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -623,6 +629,7 @@ dependencies = [
|
|||
"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5"
|
||||
"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
|
||||
"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
|
||||
"checksum reduce 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f77b717415291f4d7929a111402316b272c566ae9d4b75a61507dba88ecbd89"
|
||||
"checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
|
||||
"checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
|
||||
"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5"
|
||||
|
|
|
@ -13,6 +13,7 @@ nolibsnark = []
|
|||
libc = "0.2.0"
|
||||
num = "0.1.36"
|
||||
lazy_static = "0.1.*"
|
||||
reduce = "0.1.1"
|
||||
# cli
|
||||
clap = "2.26.2"
|
||||
# serialization and deserialization
|
||||
|
|
|
@ -4,6 +4,7 @@ use flat_absy::{FlatStatement, FlatExpression, FlatFunction, FlatExpressionList}
|
|||
use field::Field;
|
||||
use executable::Sha256Libsnark;
|
||||
use parameter::Parameter;
|
||||
use reduce::Reduce;
|
||||
|
||||
// for r1cs import, can be moved.
|
||||
// r1cs data strucutre reflecting JSON standard format:
|
||||
|
@ -32,19 +33,31 @@ pub struct Constraint {
|
|||
|
||||
impl<T: Field> Into<FlatStatement<T>> for Constraint {
|
||||
fn into(self: Constraint) -> FlatStatement<T> {
|
||||
let lhs_a = self.a.iter()
|
||||
let rhs_a = match self.a.iter()
|
||||
.map(|(key, val)| FlatExpression::Mult(box FlatExpression::Number(T::from_dec_string(val.to_string())), box FlatExpression::Identifier(format!("inter{}",key.clone()))))
|
||||
.fold(FlatExpression::Number(T::zero()), |acc, e| FlatExpression::Add(box acc, box e));
|
||||
.reduce(|acc, e| FlatExpression::Add(box acc, box e)) {
|
||||
Some(e @ FlatExpression::Mult(..)) => FlatExpression::Add(box FlatExpression::Number(T::zero()), box e), // the R1CS serializer only recognizes Add
|
||||
Some(e) => e,
|
||||
None => FlatExpression::Number(T::zero())
|
||||
};
|
||||
|
||||
let lhs_b = self.b.iter()
|
||||
let rhs_b = match self.b.iter()
|
||||
.map(|(key, val)| FlatExpression::Mult(box FlatExpression::Number(T::from_dec_string(val.to_string())), box FlatExpression::Identifier(format!("inter{}",key.clone()))))
|
||||
.fold(FlatExpression::Number(T::zero()), |acc, e| FlatExpression::Add(box acc, box e));
|
||||
.reduce(|acc, e| FlatExpression::Add(box acc, box e)) {
|
||||
Some(e @ FlatExpression::Mult(..)) => FlatExpression::Add(box FlatExpression::Number(T::zero()), box e), // the R1CS serializer only recognizes Add
|
||||
Some(e) => e,
|
||||
None => FlatExpression::Number(T::zero())
|
||||
};
|
||||
|
||||
let rhs = self.c.iter()
|
||||
let lhs = match self.c.iter()
|
||||
.map(|(key, val)| FlatExpression::Mult(box FlatExpression::Number(T::from_dec_string(val.to_string())), box FlatExpression::Identifier(format!("inter{}",key.clone()))))
|
||||
.fold(FlatExpression::Number(T::zero()), |acc, e| FlatExpression::Add(box acc, box e));
|
||||
.reduce(|acc, e| FlatExpression::Add(box acc, box e)) {
|
||||
Some(e @ FlatExpression::Mult(..)) => FlatExpression::Add(box FlatExpression::Number(T::zero()), box e), // the R1CS serializer only recognizes Add
|
||||
Some(e) => e,
|
||||
None => FlatExpression::Number(T::zero())
|
||||
};
|
||||
|
||||
FlatStatement::Condition(FlatExpression::Mult(box lhs_a, box lhs_b), rhs)
|
||||
FlatStatement::Condition(lhs, FlatExpression::Mult(box rhs_a, box rhs_b))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue