     }
 }
 
+// MARK: MultivariateLaurentPolynomial
+
 public struct MultivariatePolynomial<R: Ring, xn: MultivariatePolynomialIndeterminates>: MultivariatePolynomialType {
     public typealias BaseRing = R
     public typealias Indeterminate = xn
 
     public let elements: [Exponent : R]
     public init(elements: [Exponent : R]) {
+        assert(elements.keys.allSatisfy{ e in e.indices.allSatisfy{ $0 >= 0 } })
         self.elements = elements
     }
     

}

extension MultivariatePolynomial: ExpressibleByIntegerLiteral where R: ExpressibleByIntegerLiteral {}

    
    public static func descriptionOfMonomial(withExponent e: Exponent) -> String {
        let s = e.indices.enumerated().map{ (i, d) in
            (d != 0) ? Format.power(symbolOfIndeterminate(at: i), d) : ""
        }.joined()
        return s.isEmpty ? "1" : s
    }
