Hoaren logiikkaa

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 15.6.2021 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .

Hoare-logiikka ( eng.  Hoare logic , myös Floyd-Hoare logic tai Hoare-säännöt ) on muodollinen järjestelmä , jossa on joukko loogisia sääntöjä, jotka on suunniteltu todistamaan oikeellisuus tietokoneohjelmat . Sitä ehdotti vuonna 1969 englantilainen tietojenkäsittelytieteilijä ja matemaattinen logiikka Hoare , jonka myöhemmin kehitti Hoare itse ja muut tutkijat. [1] Alkuperäisen idean ehdotti Floyd , joka julkaisi samanlaisen järjestelmän [2 ] , jota sovelletaan vuokaavioihin . 

Hoare kolmoset

Hoaren logiikan pääominaisuus on Hoaren kolmois .  _ Kolmiosa kuvaa kuinka koodinpalan suoritus muuttaa laskennan tilaa. Hoare-kolmiolla on seuraava muoto:

missä P ja Q ovat väitteitä ja C on komento . _  _  _ P :tä kutsutaan ennakkoehdoksi ( antecedent ) ja Q :  ta jälkiehdoksi ( seuraus ). Jos ennakkoehto on tosi, komento tekee jälkiehdon tosi. Lausekkeet ovat predikaattilogiikan kaavoja .

Hoaren logiikassa on aksioomat ja päättelysäännöt kaikille yksinkertaisen pakottavan ohjelmointikielen konstrukteille . Näiden Hoaren alkuperäisessä työssä kuvattujen konstruktien lisäksi Hoare ja muut kehittivät sääntöjä muille rakenteille: samanaikainen suoritus , proseduurikutsu , hyppy ja osoitin .

Hoaren pääideana on antaa jokaiselle imperatiivisen kielen konstruktiolle esi- ja jälkiehto , joka on kirjoitettu loogisena kaavana. Siksi nimessä esiintyy kolmois  - ennakkoehto , kielirakenne, jälkiehto .

Hyvin toimiva ohjelma voidaan kirjoittaa monella tapaa ja monissa tapauksissa se on tehokas. Tämä epäselvyys vaikeuttaa ohjelmointia. Voit tehdä tämän esittelemällä tyylin. Mutta tämä ei riitä. Monien ohjelmien (esimerkiksi epäsuorasti ihmisten elämään liittyvien) kohdalla on myös tarpeen todistaa niiden oikeellisuus. Kävi ilmi, että oikeellisuustodistus tekee ohjelman kalliimmaksi suuruusluokkaa (noin 10 kertaa).

Osittainen ja täydellinen oikeellisuus

Hoaren standardilogiikassa vain osittainen oikeellisuus voidaan todistaa, koska ohjelman lopettaminen on todistettava erikseen. Myöskään sääntöä olla käyttämättä redundantteja ohjelman osia ei voida ilmaista Hoaren logiikassa. "Intuitiivinen" ymmärrys Hoaren kolmiosta voidaan ilmaista seuraavasti: jos P esiintyy ennen kuin C on valmis, joko Q tapahtuu tai C ei koskaan pääty. Itse asiassa, jos C ei pääty, ei ole jälkiä, joten Q voi olla mikä tahansa lause. Lisäksi voimme valita Q :n epätosi osoittamaan, että C ei koskaan pääty.

Täysi oikeellisuus voidaan myös todistaa käyttämällä While -lauseen säännön laajennettua versiota .

Säännöt

Tyhjä operaattoriaksiooma

Tyhjän käskyn sääntö sanoo, että skip -käsky ( tyhjä lause ) ei muuta ohjelman tilaa, joten lause, joka oli tosi ennen ohitusta , pysyy tosi sen suorittamisen jälkeen.

Tehtäväoperaattorin aksiooma

Tehtäväoperaattorin aksiooma toteaa, että osoituksen jälkeen minkään predikaatin arvo tehtävän oikean puolen suhteen ei muutu, kun oikea puoli korvataan vasemmalla:

Tässä tarkoitetaan lauseketta P , jossa kaikki vapaan muuttujan x esiintymät korvataan lausekkeella E .

Tehtäväaksiooman tarkoitus on, että totuus on ekvivalentti tehtävän suorittamisen jälkeen. Siten, jos se oli tosi ennen tehtävää, tehtävän aksiooman mukaan se on totta tehtävän jälkeen. Päinvastoin, jos se oli yhtä suuri kuin "false" ennen määrityslauseketta, sen pitäisi olla yhtä suuri kuin "false" sen jälkeen.

Esimerkkejä kelvollisista kolmioista:

Hoaren muotoilun osoitusaksiooma ei päde , kun useampi kuin yksi tunniste viittaa samaan arvoon. Esimerkiksi,

on epätosi, jos x ja y viittaavat samaan muuttujaan, koska mikään ennakkoehto ei voi varmistaa, että y on 3 sen jälkeen, kun x :lle on annettu 2.

Koostumussääntö

Hoaren kokoonpanosääntö pätee ohjelmien S ja T peräkkäiseen suoritukseen , jossa S suoritetaan ennen T :tä, joka kirjoitetaan S;T :llä .

Tarkastellaan esimerkiksi kahta tehtävän aksiooman esiintymää:

ja

Koostumussäännön mukaan saamme:

Ehdollinen operaattorin sääntö

Päättelysääntö

Silmukkalauseen sääntö

Tässä P on sykliinvariantti .

Kierrä lauseen sääntö täysin oikein

Tässä säännössä silmukan invariantin säilyttämisen lisäksi silmukan päättyminen todistetaan termillä, jota kutsutaan silmukkamuuttujaksi (tässä t ), jonka arvoa pienennetään tiukasti perustellun suhteen " < " mukaisesti jokaisella iteraatiolla. Tässä tapauksessa ehdon B tulee viitata siihen, että t ei ole alueensa vähimmäiselementti, muuten tämän säännön lähtökohta on väärä. Koska " < "-relaatio on täysin perusteltu, jokainen silmukan vaihe määritellään äärellisen lineaarisesti järjestetyn joukon pienenevillä jäsenillä .

Tämän säännön merkinnöissä käytetään hakasulkeita, ei kiharoita, osoittamaan säännön täydellistä oikeellisuutta. (Tämä on yksi tapa osoittaa täydellistä oikeellisuutta.)

Esimerkkejä

Esimerkki 1
— tehtävän aksiooman perusteella.
Koska päättelysäännön perusteella saamme:
Esimerkki 2
— tehtävän aksiooman perusteella.
Jos x ja N ovat kokonaislukuja, niin , ja päättelysäännön perusteella saadaan:

Katso myös

Linkit

  1. CAR Hoare . " Aksiomaattinen perusta tietokoneohjelmointiin Arkistoitu 17. heinäkuuta 2011 Wayback Machinessa ". ACM:n tiedonannot , 12(10):576-580,583, lokakuu 1969. doi : 10.1145/363235.363259
  2. RW Floyd . « Sanojen antaminen ohjelmille. Arkistoitu alkuperäisestä 9. joulukuuta 2008.  (downlink alkaen 13-05-2013 [3444 päivää] - historia ) »  (ladattu linkki) Proceedings of the American Mathematical Society Symposia on Applied Mathematics. Voi. 19, s. 19-31. 1967.

Kirjallisuus