Meilleur moyen de traduire lors des boucles en fonctions pour la vérification des logiciels
Question
J'ai un moteur de vérification où tandis que les boucles sont traduites en code fonctionnel, comme ceci:
def f() = ... while(c) b ...
def f() = ... fwhile() ...
def fwhile() = if(c){ fwhile() }
Nous voulons que les utilisateurs puissent annoter pendant que les boucles avec une construction diminuent qui indique qu'une certaine mesure diminue à chaque itération. Ceci est utilisé pour prouver la résiliation comme suit:
while (x > 0) {
decreases(x)
x = x - 1
}
Le problème est que le vérificateur des diminutions utilise les indices donnés par les conditions préalables des fonctions avec lesquelles il fonctionne. Nous ne pouvons pas spécifier que la condition préalable est la condition de boucle while car elle peut être fausse au premier appel. De mon côté, j'ai proposé la traduction suivante:
def f() = ... if(c) fwhile() else ...
def fwhile() = b if(c) fwhile() else ...
Je voudrais avoir des commentaires sur l'exactitude de mon approche ainsi que s'il y a de meilleures options, car cela nécessitera toujours de se déplacer dans la fonction FA partie du temps qui devrait être naturellement contenu dans la fonction F
Pas de solution correcte