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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top