Une règle de trame , comme celle donnée ci-dessous, capture l'idée que, étant donné un programme c
avec une précondition p
qui tient avant qu'il s'exécute et une postcondition q
qui tient après, une condition disjointe r
devrait tenir à la fois avant et après les c
exécutions. (Le *
connectif nécessite que ses arguments soient disjoints.) Souvent, les pré- et post-conditions sont des états d'un tas, et c
est un programme efficace qui modifie le tas d'une manière ou d'une autre.
{p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}
Les discussions sur la règle de trame que j'ai vues semblent toujours se concentrer sur la façon dont la partie disjointe du tas r
est préservée. Cela permet un «raisonnement local»: lorsque nous raisonnons sur l'effet qui en c
résulte, nous pouvons ignorer la r
partie du tas et ne nous préoccuper que de la partie qui change réellement. Mais une autre façon de voir les choses est que le changement de p
àq
est conservé, même s'il r
est maintenant là. En d'autres termes, il est important que nous nous retrouvions avec la postcondition {q * r}
, plutôt que {q' * r}
pour une autre q'
.
Donc, ma question est de savoir s'il y a un traitement de la règle de cadre qui traite ou fait usage de la conservation-de-changement From- p
-à- q
chose.