Merge pull request #854 from Sladuca/bool-or-gadget

add `or` gadget for `BoolTarget`
This commit is contained in:
Daniel Lubarov 2022-12-28 19:40:28 -08:00 committed by GitHub
commit 32cda2136b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -337,6 +337,12 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
BoolTarget::new_unsafe(self.mul(b1.target, b2.target))
}
/// computes the arithmetic extension of logical "or": `b1 + b2 - b1 * b2`
pub fn or(&mut self, b1: BoolTarget, b2: BoolTarget) -> BoolTarget {
let res_minus_b2 = self.arithmetic(-F::ONE, F::ONE, b1.target, b2.target, b1.target);
BoolTarget::new_unsafe(self.add(res_minus_b2, b2.target))
}
pub fn _if(&mut self, b: BoolTarget, x: Target, y: Target) -> Target {
let not_b = self.not(b);
let maybe_x = self.mul(b.target, x);