180 likes | 254 Views
Ohjelmien oikeaksitodistamisen historia. Tuomo Malinen Tietojenkäsittelytieteen historia -seminaari 3.5.2001. Sisältö. oikeellisuustodistusten historia tarkastellaan tieteellisen kehityksen näkökulmasta ohjelmien oikeellisuus
E N D
Ohjelmien oikeaksitodistamisen historia Tuomo Malinen Tietojenkäsittelytieteen historia -seminaari 3.5.2001
Sisältö • oikeellisuustodistusten historia • tarkastellaan tieteellisen kehityksen näkökulmasta • ohjelmien oikeellisuus • oikeellinen toiminta on muodollisesti määriteltävissä ja siten todistettavissa • eri laskennan tarkoitukset • 1+1, käyttöjärjestelmät, pesukone, ...
erilaiset oikeellisuuden määritelmät • pysähtyvät ja pysähtymättömät ohjelmat • pysähtyvä ohjelma toimii oikein, jos se • pysähtyy kaikilla syötteillä • antaa aina oikean tuloksen • pysähtymätön ohjelma toimii oikein, jos • sen kaikki laskennat ovat oikeellisia • esityksen rakenne • taustaa oikeellisuustodistuksille • pysähtyvät ohjelmat • pysähtymättömät ohjelmat
Taustaa • Turing 1936 • mielivaltaisen ohjelman pysähtyminen ratkeamaton ongelma • 1960-luku • ohjelmien ja järjestelmien koon kasvu • ohjelmistotuotannon “kriisi” • kriittiset sovellukset • ohjelmointikäytännöt riittämättömiä • ohjelmoinnista tieteellisesti mielenkiintoista
idea ohjelmasta täsmällisenä oliona • syntaksi • Chomsky, kontekstittomat kieliopit • Backus-Naur -normaalimuoto • kääntäjien kehitys • semantiikka? • ohjelman merkitys? • McCarthy, 1961 • idea muodollisesta oikeaksitodistamisesta • ohjelmien ekvivalenssi
Peter Naur, 1966 • “Proofs of algorithms by general snapshots” • “snapshot”: väite, joka toteutuu tietyssä kohdassa suoritusta • Robert Floyd, 1967 • “Assigning meanings to programs” • semantiikka! • ohjelman käskykaavioon liitetyt väittämät • silmukkainvariantit • ohjelmointikielen määrittely todistustekniikoiden avulla
Tony Hoare, 1967 • “An Axiomatic Basis for Computer Programming” • käskyjen ja kontrollirakenteiden merkityksen aksiomatisointi • kiinnittää ohjelman merkityksen formaalisti • merkitys = vaikutus käsiteltyihin tietorakenteisiin • yksinkertainen ohjelmointikieli • modulo-aritmetiikka, sijoituslause, peräkkäis- ja toistorakenteet • aksioomat ja johtosäännöt • syntaktiset tarkastelut • ei todistusta helpottavia konstruktioita • osittainen oikeellisuus • teoreettinen uranavaus
1970-luku • kehitys Hoaren jäljillä • monimutkaisemmat rakenteet • proseduurikutsut, taulukot, yms. • Pascalin aksiomatisointi • automaattinen todistaminen • jatkui 1980-luvulle • Hoaren todistusmenetelmien vaikeakäyttöisyys • valmiiden ohjelmien todistaminen vaikeaa • ohjelma ja todistus käsi kädessä • metodologioita ei esitetty
Dijkstra, 1975 • ohjelmien johtaminen • ohjelman muodostaminen täsmällisen “laskuopin” avulla • laskuopin noudattamisesta seuraa oikeellisuustodistus • predikaattimuunnin wp • viimeisin oleellinen kehitysaskel
Pysähtymättömät ohjelmat • tarve • käyttöjärjestelmät, tietoliikenneprotokollat, • reaktiiviset järjestelmät • erilainen laskennan määritelmä • erilainen oikeellisen laskennan määritelmä • kiinnostus 1960-luvulla • samantyylisiä kokeiluja kuin sarjallisten puolella • ei merkittävää kehitystä • yksittäisten algoritmien todistuksia
Petri-verkot 1962 • poissulkemisongelma • Dijkstra, Dekker, Knuth, Hyman • Dijkstra: semaforit, aterioivat filosofit • 1970-luku • Hoaren ideat • kontrollirakenteiden, kuten monitoreiden täsmällinen määrittely • ei yleistä todistustapaa eikä -menetelmää
Amir Pnueli, 1977 • “The temporal logic of programs” • uusi abstraktio tietokonejärjestelmän toiminnalle • temporaali- eli aikalogiikan malli • järjestelmän tila = maailman tila • järjestelmän tilan muutos ohjelman edetessä = maailman tilan muutos ajan kuluessa • oikeellisen toiminnan määrittely temporaalilogiikan kaavana • jos kaava toteutuu kaikissa ohjelman suorituksissa (kaikissa mielenkiintoisissa malleissa) ohjelma toimii oikein
Temporaalilogiikka • mahdollisuus määritellä keskinäisiä seuraavuuksia ohjelman toiminnoille • vaste syötteeseen, pääsy resurssia käyttämään • aksioomien määrittely • todistus Hoaren tapaan kaavojen syntaktista muuntelua
Automaattinen todistaminen? • edeltävät todistustavat vaikeita automatisoida • ylipäätään hankalia • oikeellisen toiminnan määrittely kaavana ja sen matemaattinen todistus sovellettavassa formalismissa • voidaan käsitellä äärettömiä malleja • monet systeemit voidaan kuvata äärellisillä malleilla • liian väkevä formalismi?
Clarke, Emerson 1981 • “mallintarkastus”, “model checking” • rakennetaan äärellinen malli järjestelmästä • järjestelmän tila-avaruus • voidaan tarkastaa järjestelmän oikeellisuus eksplisiittisesti • vs. kaavatodistukset • oikeellinen toiminta kaavana • toteutuuko kaava mallissa • järjestelmän äärettömät (->sykliset) suoritukset • malli äärellinen -> ongelma ratkeava
Mallintarkastus • todistusmenetelmä • riippuu ohjelman mallinnuksesta • usein palautettavissa yksinkertaisiin ongelmiin • tavalliset verkkoalgoritmit • vastaesimerkki • ohjelman virhekäyttäytyminen • helpottaa virheen oikaisemista • laskennan vaativuus
Yhteenveto • ohjelma matemaattinen, eksakti objekti • oikeellisuus pystytään todistamaan • sekä tuotannollisesti että tieteellisesti mielenkiintoinen ongelma • kehitystä 1960-luvulta lähtien • ohjelmointikielen täsmällinen määrittely • aluksi syntaksi • semanttisista määrittelyistä todistusmenetelmiin • Dijkstra ja ohjelmien johtaminen
Yhteenveto • rinnakkaisjärjestelmät • temporaalilogiikka • uusi abstraktio järjestelmän suorituksille • mallintarkastus • todistus yksinkertaisten algoritmien avulla • 1980-luvun alun jälkeen ei merkittäviä uusia todistusmenetelmiä