             return values.reduce(false) { $0 || $1 }
         }
     }
-    
-    public init<L: PropertyType, R: PropertyType where L.Value == Bool, R.Value == Bool>(lhs: L, rhs: R) {
-        terms = [AnyProperty(lhs), AnyProperty(rhs)]
+
+    public init(terms: [AnyProperty<Bool>]) {
+        self.terms = terms
     }
 }
 


extension PropertyType where Value == Bool {
    public func and(other: Self) -> AndProperty {
        return AndProperty(lhs: self, rhs: other)
    }

    public func or(other: Self) -> OrProperty {
        return OrProperty(lhs: self, rhs: other)
    }

    public func not() -> NotProperty {

        }
    }

    public init(terms: [AnyProperty<Bool>]) {
        self.terms = terms
    }
}

