Loop invariant - ohjelmoinnissa - looginen lauseke , joka on tosi jokaisen silmukan rungon läpimenon jälkeen (kiinteän operaattorin suorittamisen jälkeen ) ja ennen silmukan alkua, riippuen silmukan rungossa muuttuvista muuttujista. [1] Invariantteja käytetään ohjelman verifioinnin teoriassa todistamaan syklisellä algoritmilla saadun tuloksen oikeellisuus.
Silmukan invariantti on matemaattinen lauseke (yleensä yhtälö), joka sisältää väistämättä ainakin joitain muuttujia, joiden arvot muuttuvat silmukan iteraatiosta toiseen. Invariantti konstruoidaan siten, että se on tosi välittömästi ennen silmukan suorituksen alkua (ennen ensimmäiseen iteraatioon pääsyä) ja jokaisen iteroinnin jälkeen. Lisäksi, jos invariantissa on vain syklin sisällä määritettyjä muuttujia (esimerkiksi syklilaskuri Pascalissafor tai Adassa ) , syklin syöttämiseksi ne otetaan huomioon arvoilla, jotka ne saavat alustuksen yhteydessä.
Menettely syklin toimivuuden osoittamiseksi invariantin avulla on seuraava:
Invariantteja käytetään myös syklisten algoritmien suunnittelussa ja optimoinnissa . Esimerkiksi sen varmistamiseksi, että optimoitu silmukka pysyy oikeana, riittää, kun todistetaan, että silmukan invarianttia ei rikota ja silmukan lopetusehto on saavutettavissa.