     internal var debug = false
     
     internal var generators = [S]()
-    internal var relations  = [C]()
     internal var diff = [S : C]()
 
     internal var fNodes = [S : Node]()

        let bs = C(s).boundary()
        let f_bs = f(bs)
        
        log("\(step)\t\(s) -> \(f_bs)")
        log("")
        
        if isZero(f_bs) {
            log("\tadd: \(s)")
            
            generators.append(s)

                return self.value
            }
            
            let value = _collect()
            
            if flatten {
//                self.value = value
//                self.refs = []
            }
            
            return value
        }
        
        @_specialize(where R == ComputationSpecializedRing)
        private func _collect() -> C {
            return value + refs.filter{ !$0.0.isZero }
                               .sum { (n, r) in r * n._collect() }
        }
        
        var hashValue: Int {
