Buclă invariantă

Loop invariant  - în programare  - o expresie logică care este adevărată după fiecare trecere a corpului buclei (după execuția operatorului fix ) și înainte de începerea buclei, în funcție de variabilele care se modifică în corpul buclei. [1] Invarianții sunt utilizați în teoria verificării programelor pentru a demonstra corectitudinea rezultatului obținut printr-un algoritm ciclic.

Definiție

Un invariant de buclă este o expresie matematică (de obicei o egalitate) care include inevitabil cel puțin unele variabile ale căror valori se schimbă de la o iterație a buclei la următoarea. Invariantul este construit în așa fel încât să fie adevărat imediat înainte de începerea execuției buclei (înainte de a intra în prima iterație) și după fiecare dintre iterațiile sale. Mai mult, dacă invariantul include variabile definite doar în interiorul ciclului (de exemplu, contorul de ciclu forîn Pascal sau Ada ), atunci pentru a intra în ciclu sunt luate în considerare cu valorile pe care le vor primi în momentul inițializării.

Dovada corectitudinii buclei folosind invariantul

Procedura de demonstrare a operabilității ciclului cu ajutorul unui invariant este următoarea:

  1. Se dovedește că expresia invariantului este adevărată înainte de începutul ciclului.
  2. Se demonstrează că expresia invariantului rămâne adevărată după executarea corpului buclei; astfel, prin inducție, se demonstrează că la sfârșitul întregului ciclu, invariantul va fi satisfăcut.
  3. Se dovedește că dacă invariantul este adevărat, după finalizarea buclei, variabilele vor lua exact valorile care trebuie obținute (aceasta este determinată elementar din expresia invariantului și a valorilor finale cunoscute ale variabilele, pe care se bazează condiția de terminare a buclei).
  4. Se dovedește (poate fără aplicarea invariantului) că ciclul se va termina, adică condiția de terminare va fi îndeplinită mai devreme sau mai târziu.
  5. Adevărul afirmațiilor dovedite în etapele anterioare indică fără ambiguitate că bucla va fi executată într-un timp finit și va da rezultatul dorit.

Invarianții sunt, de asemenea, utilizați în proiectarea și optimizarea algoritmilor ciclici . De exemplu, pentru a vă asigura că bucla optimizată rămâne corectă, este suficient să demonstrați că invariantul buclei nu este încălcat și că condiția de terminare a buclei este realizabilă.

Note

  1. V.V. Borisenko. Fundamentele de programare (link indisponibil) . CUNOAȘTE Intuitul . Consultat la 18 iunie 2013. Arhivat din original la 20 mai 2012.