 public struct _HomologyExactSequence<chainType: ChainType, A: FreeModuleBase, R: EuclideanRing>: Sequence, CustomStringConvertible {
     public typealias Object = _Homology<chainType, A, R>.Summand
     public typealias Arrow  = _HomologyMap<chainType, A, A, R>
-    public typealias Element = (Object, Arrow)
     
     internal let H:    [_Homology<chainType, A, R>]       // [0,      1,      2]
     internal let map : [_HomologyMap<chainType, A, A, R>] // [0 -> 1, 1 -> 2, 2 -> 0]

        }
    }
    
    public var description: String {
        return "\(H[0]) -> \(H[1]) -> \(H[2])"
    }

            : (bottomDegree ... topDegree).toArray()
    }
    
    public func assertExactness(at i: Int, _ n: Int, debug: Bool = false) {
        let k = seqIndex(i, n)
        let H1 = object(k)
        
        if H1.isTrivial {
            return
        }
        
        let (H0, H2) = (object(k - 1), object(k + 1))
        let (f0, f1) = (arrow(k - 1), arrow(k))
        
        debugLog(print: debug, "----------\nExactness at \(H[i])[\((n))]\n\(H0) -> \(H1) -> \(H2)\n----------")
        
        // Im ⊂ Ker
        for x in H0.generators {
