diff --git a/examples/quotient.rs b/examples/quotient.rs index 617b486..66c09f9 100644 --- a/examples/quotient.rs +++ b/examples/quotient.rs @@ -3,19 +3,20 @@ 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 = vec![ + 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> = idem.into_iter().collect(); + let quotient: Rc> = idem.into(); // Build x * x̄ + x in the DAG let xn = quotient.var("x"); diff --git a/src/circuit/quotient.rs b/src/circuit/quotient.rs index e39593c..d216f33 100644 --- a/src/circuit/quotient.rs +++ b/src/circuit/quotient.rs @@ -3,7 +3,6 @@ use std::ops::{Deref, DerefMut}; use std::rc::Rc; use crate::poly::var::{StaticVar, Var}; -use crate::poly::flat::Poly; use crate::poly::ideal::{Generators, GroebnerBasis, Ideal}; use super::dag::{Dag, NodeId}; use super::traits::{Node, SumProdCircuit}; @@ -34,26 +33,15 @@ pub struct QuotientCircuit { dag: Dag>, } -impl QuotientCircuit { - pub fn from_ideal(basis: Ideal) -> Rc> { - Rc::new(RefCell::new(Self { basis, dag: Default::default() })) - } - - pub fn from_polys(iter: impl IntoIterator>) -> Rc> { - let ideal: Ideal = iter.into_iter().collect(); - Rc::new(RefCell::new(Self { basis: ideal.groebner_basis(), dag: Default::default() })) +impl From> for Rc>> { + fn from(ideal: Ideal) -> Self { + ideal.groebner_basis().into() } } impl From> for Rc>> { fn from(basis: Ideal) -> Self { - QuotientCircuit::from_ideal(basis) - } -} - -impl FromIterator> for Rc>> { - fn from_iter>>(iter: T) -> Self { - QuotientCircuit::from_polys(iter) + Rc::new(RefCell::new(QuotientCircuit { basis, dag: Default::default() })) } }