La sémantique opérationnelle qui domine actuellement la programmation logique en Prolog est celle qui est modélisée par la -résolution. Elle consiste à partir d'un but et à le déplier jusqu'à ne plus pouvoir. Si à ce moment le but est vide, on dit que c'est un succès, sinon, on dit qu'on a un échec. De ce point de vue, la situation n'est pas très différente en Prolog. On cherche une preuve uniforme au lieu d'une preuve .
C'est une technique «descendante». Cette sémantique est intuitivement simple, mais elle conduit à des implémentations incomplètes. Des variantes de cette sémantique opérationnelle comme la -résolution [Chen et Warren 93] sont moins simples mais conduisent à des implémentations complètes, y compris pour différentes formalisations de la négation par l'échec. Elles consistent à distinguer des prédicats qui feront l'objet d'une exécution où leurs conclusions intermédiaires sont mémorisées. Ce sont des techniques essentiellement descendantes, mais qui injectent une composante remontante pour traiter les prédicats mémorisés.
On peut envisager une autre approche qui serait essentiellement remontante. Des prédicats seraient distingués comme représentant un état et seraient exécutés de manière purement remontante. Cela consiste à partir de faits qui décrivent l'état initial, et à dériver l'ensemble de leur conséquences immédiates, puis les conséquences immédiates de celles-ci, etc. Si le corps d'une clause d'un prédicat d'état contient un but d'un prédicat qui n'est pas d'état ce but est exécuté par la technique descendante. Dans cette approche, les prédicats d'état représentent l'état du système, alors que les autres ne représentent que des relations purement logiques. L'état du système évolue au fur et à mesure du calcul des conséquences immédiates de premier rang, de second rang, etc. C'est donc le rang des conséquences immédiates qui modélise l'horloge du système. Celui-ci s'arrête quand aucune nouvelle conséquence ne peut être calculée.
Nous pensons que cette approche fournit une meilleure interface avec l'environnement que la convention habituelle qui considère la conjonction dans les buts comme signifiant la séquentialité. Elle ouvre cependant de nouveaux problèmes. Premièrement, les gestions de mémoire connues pour la programmation logique, dont celle de , font l'hypothèse d'une exécution essentiellement descendante, alors que dans la nouvelle approche elle est essentiellement remontante. Le calcul de chaque conséquence immédiate d'un rang donné consomme de la mémoire et il faut la libérer à chaque fois qu'une conséquence immédiate d'un rang donné ne peut plus être utilisée dans un rang supérieur. Mais, comment le prouver ? Probablement en considérant le graphe d'appel des prédicats d'état comme le germe d'un ordonnancement des tâches. Deuxièmement, on retrouve un problème déjà connu en base de données et qui est que la résolution remontante naïve est inefficace. Là encore, le graphe d'appel des prédicats d'état semble devoir jouer un rôle.