31 lines
871 B
Rust
31 lines
871 B
Rust
use std::cell::RefCell;
|
|
use std::rc::Rc;
|
|
use circuit_cas::circuit::dag::CircuitExt;
|
|
use circuit_cas::circuit::quotient::QuotientCircuit;
|
|
use circuit_cas::circuit::traits::Circuit;
|
|
use circuit_cas::poly::ideal::{Generators, Ideal};
|
|
use circuit_cas::var;
|
|
|
|
fn main() {
|
|
let x = var!("x");
|
|
let nx = var!("x\u{0304}");
|
|
|
|
let idem: Ideal<_, Generators> = vec![
|
|
1 * (&x ^ 2) - 1 * (&x ^ 1),
|
|
1 * (&nx ^ 2) - 1 * (&nx ^ 1),
|
|
1 * ((&x ^ 1) * (&nx ^ 1)) - 1 * (&x ^ 1),
|
|
].into();
|
|
|
|
let quotient: Rc<RefCell<QuotientCircuit>> = idem.into();
|
|
|
|
// Build x * x̄ + x in the DAG
|
|
let xn = quotient.var("x");
|
|
let nxn = quotient.var("x\u{0304}");
|
|
let prod = xn * nxn;
|
|
let xn2 = quotient.var("x");
|
|
let expr = prod + xn2;
|
|
|
|
println!("dag size: {}", quotient.borrow().len());
|
|
println!("expr node id: {:?}", expr.id);
|
|
}
|