Domanda per principianti riguardante la logica di una prova di correttezza molto semplice
-
29-09-2020 - |
Domanda
Sto cercando di familiarizzare con le prove di correttezza e necessitano di aiuto.In Prova per SimplesELECT (P.25), perché assumiamo sia $ a '[i] e $ 1 \ LeqI \ Leq K $ ?Non sono sicuro del motivo per cui lo facciamo, poiché il testo afferma che perché "di cosa significhi per un algoritmo per soddisfare le sue specifiche, qualsiasi prova di correttezza inizierà assumendo la precondizione".Tuttavia, non è la precondizione qui semplicemente la precondizione di Simpleselect come specificato qui (P.6)?
Soluzione
Entrambe le ipotesi che menzioni sono "locali" nel senso che sono una sottocomprensione nella prova e non fanno parte delle condizioni del teorema. Puoi anche vederli come definizione di una variabile locale $ i $ , una formulazione equivalente delle due ipotesi sarebbe
..
Let $ I $ Sii tale che $ a '[i] e $ 1 \ leq i \ leq n $ .
Let $ i $ Sii tale che $ 1 \ leq i \ leq k $ .
La prova conta il numero di valori di $ I $ per il quale queste affermazioni Hold, che mostrano che la postcondition è soddisfatta.
.
Penso che parte della tua confusione deriva da un linguaggio implicito in questi paragrafi, quindi riscriverò uno di loro per essere più esplicito. Il primo paragrafo del libro legge:
.
Un fraseggio più esplicito è il seguente:
Let $ i $ essere tale che $ a '[i] e $ 1 \ Leq I \ Leq N $ . Se $ k , quindi $ a '[i] contraddice Con la postcondition di ordinamento, quindi $ i \ leq k $ . Se $ i= k $ , quindi $ a '[i]= a' [k] $ , che contraddice con la nostra definizione di $ i $ .
La struttura complessiva del secondo paragrafo è simile, quindi dovresti essere in grado di afferrarlo se riesci a capire il primo.