cprudhom/Galak — Issue #72: Incrementality + delta monitor : bug
Author: cprudhom
Created: 2012-02-06 15:30:49+00:00
State: open

Ce n'est pas un bug particulier, mais plutot la description d'un bug qui peut apparaitre et qu'il faut discuter.

Il peut arriver qu'une constrainte, C1, supprime une valeur d'une variable, V1, au cours de sa propagation.
Cette variable schedule alors ces recordeurs, sauf celui portant sur C1.
Puis, V1 est de nouveau modifié, par C2, et le recordeur de C1 est schedulé de nouveau.
Lorsqu'il se réveille sur la nouvelle modification de V1, il itére sur les valeurs supprimées, et redécouvre les valeurs qu'il a lui même supprimé!
On peut étendre ce cas à un cas plus complexe où V1 est modifié par C1 plusieurs fois (par ex. par différents recordeurs de C1 portant sur d'autres variables et schédulé plus tôt dans le moteur de propagation).

C'est donc problématique si la contrainte est incrémentale et que son incrémentalité repose sur le principe qu'elle ne peut pas se réveiller elle-même.

Il existe au moins 2 solutions:
- avoir ce cas en tête en développant la contrainte -- ca peut vite devenir compliqué
- avoir un delta monitor qui gére ce cas. C'est dit (et peut-être vite fait) mais ca implique que chaque recordeur mémorise toutes les valeurs non propagées (ie, on vire le delta de la variable et on en met un dans chaque recordeur). Je pense que ca va vite peter en mémoire et ajouter une (grosse) constante à la compléxité algo de la méthode de modification de variable.

Il y a peut-être d'autres solutions, que je ne vois pas pour le moment.

J'ajoute les 2 remarques présentes dans l'[issue #66](https://github.com/cprudhom/Galak/issues/66) :
- certaines contraintes réagissent à la suppression de valeurs mais n'ont pas besoin de connaitre les valeurs supprimées (ex. PropElement). Il est peut-être judicieux de considérer ce cas;
- dans la même veine, la promotion d'évenement perd la cause. Est-ce vraiment utile? Y'a-t-il des contraintes pour lesquelles c'est vraiment nécessaire?