Il modo migliore per tradurre mentre i loop in funzioni per la verifica del software
Domanda
Ho un motore di verifica in cui mentre i loop vengono tradotti in codice funzionale, come questo:
def f() = ... while(c) b ...
def f() = ... fwhile() ...
def fwhile() = if(c){ fwhile() }
Vogliamo che gli utenti siano in grado di annotare mentre i loop con un costrutto diminuiscono che afferma che una certa misura diminuisce ad ogni iterazione. Questo è usato per dimostrare la risoluzione come segue:
while (x > 0) {
decreases(x)
x = x - 1
}
Il problema è che il checker delle diminuzioni utilizza i suggerimenti forniti dalle condizioni preliminari delle funzioni con cui sta lavorando. Non possiamo specificare che il preliminare è la condizione di loop while poiché potrebbe essere falso alla prima chiamata. Da parte mia, ho proposto la seguente traduzione:
def f() = ... if(c) fwhile() else ...
def fwhile() = b if(c) fwhile() else ...
Vorrei avere un feedback sulla correttezza del mio approccio e se ci fossero opzioni migliori, poiché ciò richiederà comunque di spostarsi nella funzione della funzione di tempo che dovrebbe essere naturalmente contenuta nella funzione FUNCO.
Nessuna soluzione corretta