Как вообще объединить и оптимизировать предикат? - PullRequest
0 голосов
/ 21 сентября 2009

Я работаю над системой обработки сложных событий. Он поддерживает фильтрацию наборов записей на основе членов этих записей, используя язык запросов. Язык поддерживает логические, арифметические и пользовательские операторы для произвольных членов.

Вот пример поддерживаемого запроса:

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

Моя проблема в том, что я хочу объединить запросы в один суперзапрос, а затем я хочу оптимизировать этот суперзапрос, чтобы устранить избыточность, тавтологии и противоречия. например Я хочу взять

A > 0

и объединить его с

A > 1

что довольно просто:

A > 0 || A > 1

но затем я хочу оптимизировать его, чтобы оно уменьшилось до

A > 0

Если есть какие-либо URL-адреса или книги, в которых обсуждается эта общая тема, я был бы рад узнать о них.

1 Ответ

0 голосов
/ 21 сентября 2009

Книги? Я думаю, что есть несколько; и, скорее всего, вам следует поискать статьи в этой области.

Вы можете посмотреть SMT-решатели , которые могут работать с вашим доменом запросов. Вы кормите их математическим определением языка выражений, аксиомами отношений, которые вы поддерживаете. Тогда они могут, например, обосновать, если (да, два равных соединения), подразумевает ли один предикат другой, является тавтологией.

Обратите внимание, что автоматизированные решения этой задачи являются расплывчатыми и иногда выходят за рамки теоретических возможностей машин Тьюринга (т.е. компьютера). У вас не будет единственного и правильного решения вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...