一般来说,如何组合和优化谓词?

时间:2009-09-21 15:36:15

标签: performance algorithm

我在复杂事件处理系统上做了一些工作。它支持使用查询语言基于这些记录的成员过滤记录集。该语言支持对任意成员的逻辑,算术和用户定义的运算符。

以下是受支持查询的示例:

( MemberA > MemberB ) && 
( @in MemberC { "str1", "str2" } ) &&
( com.foo.Bar.myPred( MemberD, MemberE ) )

我的问题是我想将查询合并到一个超级查询中,然后我想优化该超级查询以消除冗余,重言式和矛盾。例如我想采取

A > 0

并将其与

结合使用
A > 1

这很容易:

A > 0 || A > 1

然后我想优化它以便减少到

A > 0

如果有任何网址或书籍讨论这个一般主题,我很感激了解它们。

1 个答案:

答案 0 :(得分:0)

书籍?我想有几个;而且你很可能应该在这个领域寻找文章。

您可能会看到SMT solvers可以使用您的查询域。你用表达语言的数学化定义,你所支持的关系的状态公理来提供它们。然后,他们可以推断,如果(是的,两个相等的连词)一个谓词是否暗示另一个是一个重言式。

请注意,此任务的自动化解决方案含糊不清,有时超出了图灵机(即计算机)的理论功能。您将无法找到解决问题的唯一解决方案。