def definition(self): e, S = self.args from sympy.concrete.expr_with_limits import Exists condition_set = S.condition_set() if condition_set: condition = condition_set.condition if condition_set.variable != e: condition = condition._subs(condition_set.variable, e) return And(condition, self.func(e, condition_set.base_set), equivalent=self) image_set = S.image_set() if image_set is not None: expr, variables, base_set = image_set from sympy import Wild variables_ = Wild(variables.name, **variables.dtype.dict) assert variables_.shape == variables.shape e = e.subs_limits_with_epitome(expr) dic = e.match(expr.subs(variables, variables_)) if dic: variables_ = dic[variables_] if variables.dtype != variables_.dtype: assert len(variables.shape) == 1 variables_ = variables_[:variables.shape[-1]] return Contains(variables_, base_set, equivalent=self) if e._has(variables): _variables = base_set.element_symbol(e.free_symbols) assert _variables.dtype == variables.dtype expr = expr._subs(variables, _variables) variables = _variables assert not e._has(variables) return Exists(Equality(e, expr, evaluate=False), (variables, base_set), equivalent=self) if S.is_UNION: for v in S.variables: if self.lhs._has(v): _v = v.generate_free_symbol(self.free_symbols, **v.dtype.dict) S = S.limits_subs(v, _v) contains = Contains(self.lhs, S.function).simplify() contains.equivalent = None return Exists(contains, *S.limits, equivalent=self).simplify() return self
def definition(self): e, S = self.args from sympy.concrete.expr_with_limits import ForAll image_set = S.image_set() if image_set is not None: expr, variables, base_set = image_set from sympy import Wild variables_ = Wild(variables.name, **variables.dtype.dict) e = e.subs_limits_with_epitome(expr) dic = e.match(expr.subs(variables, variables_)) if dic: variables_ = dic[variables_] if variables.dtype != variables_.dtype: assert len(variables.shape) == 1 variables_ = variables_[:variables.shape[-1]] return self.func(variables_, base_set, equivalent=self) if e.has(variables): _variables = base_set.element_symbol(e.free_symbols) assert _variables.dtype == variables.dtype expr = expr._subs(variables, _variables) variables = _variables assert not e.has(variables) return ForAll(Unequality(e, expr, evaluate=False), (variables, base_set), equivalent=self) condition_set = S.condition_set() if condition_set: return Or( ~condition_set.condition._subs(condition_set.variable, e), ~self.func(e, condition_set.base_set), equivalent=self) if S.is_UNION: contains = self.func(self.lhs, S.function).simplify() contains.equivalent = None return ForAll(contains, *S.limits, equivalent=self).simplify() return self