             }
         }
         
-        assertChainContraction()
+//        assertChainContraction()
         
         log("")
         log("final result")

        return c.sum{ (s, a) in a * g(s) }
    }
    
    internal func h(_ s: S) -> C {
        return hTable[s] ?? C.zero
    }
    
    internal func h(_ c: C) -> C {
        return c.sum{ (s, a) in a * h(s) }
    }
    
    internal func isZero(_ c: C) -> Bool {

            } else {
                log("\tadd: \(s) with diff: \(f_bs)")
                
                fTable[s] = C(s)
                generators.append(s)
                relations.append(f_bs)
                diff[s] = f_bs
            }
        }
        
        done.insert(s)
        
        log("\tgenerators: \(generators)")
        log("")
        log("\tf: \(fTable)")
        log("\th: \(hTable)")
        log("")
        
//        assertChainContraction()
