pub fn if_else(
        &mut self,
        boolean_condition: &Variable,
        v1: &Variable,
        v2: &Variable,
    ) -> Variable {
        let not_boolean_condition = self.not(boolean_condition);
        let if_branch = self.mul(v1, boolean_condition);
        let else_branch = self.mul(v2, &not_boolean_condition);
        self.add(&if_branch, &else_branch)
    }
Creates a new variable `w` constrained to be `v1` in case
`boolean_condition` is `1` and `v2` otherwise.
crates/provers/plonk/src/constraint_system/conditional.rs