[add] fixed flattening for OR
This commit is contained in:
parent
182449812f
commit
f1966e918d
2 changed files with 24 additions and 9 deletions
|
@ -370,17 +370,32 @@ impl Flattener {
|
|||
statements_flattened,
|
||||
rhs
|
||||
);
|
||||
let name_x_and_y = self.use_sym();
|
||||
assert!(x.is_linear() && y.is_linear());
|
||||
let name_x = self.use_sym();
|
||||
let name_y = self.use_sym();
|
||||
let name_x_or_y = self.use_sym();
|
||||
statements_flattened.push(FlatStatement::Definition(
|
||||
name_x_and_y,
|
||||
name_x,
|
||||
x
|
||||
));
|
||||
statements_flattened.push(FlatStatement::Definition(
|
||||
name_y,
|
||||
y
|
||||
));
|
||||
statements_flattened.push(FlatStatement::Definition(
|
||||
name_x_or_y,
|
||||
FlatExpression::Sub(
|
||||
box FlatExpression::Add(box x, box y),
|
||||
box FlatExpression::Mult(box x, box y)
|
||||
))
|
||||
);
|
||||
|
||||
FlatExpression::Identifier(name_x_and_y)
|
||||
box FlatExpression::Add(
|
||||
box FlatExpression::Identifier(name_x),
|
||||
box FlatExpression::Identifier(name_y)
|
||||
),
|
||||
box FlatExpression::Mult(
|
||||
box FlatExpression::Identifier(name_x),
|
||||
box FlatExpression::Identifier(name_y)
|
||||
)
|
||||
)
|
||||
));
|
||||
FlatExpression::Identifier(name_x_or_y)
|
||||
},
|
||||
BooleanExpression::And(box lhs, box rhs) => {
|
||||
let x = self.flatten_boolean_expression(
|
||||
|
|
|
@ -297,7 +297,7 @@ pub enum BooleanExpression<T: Field> {
|
|||
Eq(Box<FieldElementExpression<T>>, Box<FieldElementExpression<T>>),
|
||||
Ge(Box<FieldElementExpression<T>>, Box<FieldElementExpression<T>>),
|
||||
Gt(Box<FieldElementExpression<T>>, Box<FieldElementExpression<T>>),
|
||||
Or(Box<FieldElementExpression<T>>, Box<FieldElementExpression<T>>),
|
||||
Or(Box<BooleanExpression<T>>, Box<BooleanExpression<T>>),
|
||||
And(Box<BooleanExpression<T>>, Box<BooleanExpression<T>>),
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue