2009-09-21 8 views
0

Je travaille sur un système de traitement d'événements complexes. Il prend en charge le filtrage des ensembles d'enregistrements en fonction des membres de ces enregistrements, en utilisant un langage de requête. Le langage prend en charge les opérateurs logiques, arithmétiques et définis par l'utilisateur sur des membres arbitraires.Comment combiner et optimiser un prédicat, en général?

Voici un exemple d'une requête pris en charge:

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

Mon problème est que je veux combiner les requêtes dans une super requête, puis je veux optimiser cette super-requête pour éliminer les redondances, les tautologies et les contradictions. par exemple. Je veux prendre

A > 0 

et le combiner avec

A > 1 

qui est assez facile:

A > 0 || A > 1 

mais je veux optimiser afin qu'il réduit à

A > 0 

S'il existe des URL ou des livres sur ce disque utilise ce sujet général, j'apprécierais savoir à leur sujet.

Répondre

0

Livres? Je pense qu'il y en a quelques-uns; et très probablement vous devriez chercher des articles dans ce domaine.

Ce que vous pouvez regarder sont SMT solvers qui peut fonctionner avec votre domaine de requêtes. Vous les nourrissez avec la définition mathématique de votre langage d'expression, les axiomes d'état des relations que vous soutenez. Alors ils peuvent, par exemple, raisonner si (oui, deux conjonctions égales) si un prédicat en implique un autre est une tautologie. Notez que les solutions automatisées à cette tâche sont vagues et dépassent parfois les capacités théoriques des machines de Turing (c'est-à-dire de l'ordinateur). Vous n'aurez pas une seule et bonne solution à votre problème.

+0

Merci Pavel. Mon sentiment était que la solution entièrement optimale serait intraitable, mais qu'il devrait être possible de faire quelques optimisations raisonnables dans une période de temps limitée. Les SMT ont l'air intéressants, merci de les signaler, mais j'ai du mal à comprendre cette phrase à partir de votre réponse: "Alors ils peuvent, par exemple, raisonner si (oui, deux conjonctions égales) si un prédicat en implique un autre est une tautologie ", Pouvez-vous clarifier s'il vous plait? –

+0

@Bill: Clarification. Dans votre exemple, vous deviez ignorer le prédicat 'A> 1' car il était impliqué par' A> 0'. C'est à dire. dans tous les cas où 'A> 1' est vrai,' A> 0' est vrai aussi (cela s'appelle "implication"). Étant donné que votre solveur SMT a les axiomes arithmétiques formels téléchargés, il peut raisonner que la formule '(A> 0) implique (A> 1)' est une tautologie. Après ce raisonnement, vous pouvez retirer 'A> 0' de votre expression. Mais ce n'est qu'une des nombreuses applications des solveurs SMT et je l'ai décrite simplement parce que vous l'avez utilisée dans votre question. –

+0

D'accord, c'est logique, merci Pavel. –

Questions connexes