pub fn linear_combination(
        &mut self,
        v1: &Variable,
        c1: FE<F>,
        v2: &Variable,
        c2: FE<F>,
        b: FE<F>,
        hint: Option<Hint<F>>,
    ) -> Variable {
        let result = self.new_variable();

        self.add_constraint(Constraint {
            constraint_type: ConstraintType {
                ql: c1,
                qr: c2,
                qm: FE::zero(),
                qo: -FE::one(),
                qc: b,
            },
            l: *v1,
            r: *v2,
            o: result,
            hint,
        });
        result
    }
Creates a new variable `w` constrained to be equal to `c1 * v1 + c2 * v2 + b`.
Optionally a hint can be provided to insert values in `v1`, `v2` or `w`. To do
so use the `L`, `R`, and `O` input/output columns of the hint to refer to `v1`,
`v2` and `w` respectively.
crates/provers/plonk/src/constraint_system/operations.rs