Abstraktne interpretatsioon

Allikas: testwiki
Redaktsioon seisuga 28. veebruar 2020, kell 15:55 kasutajalt imported>Kuriuss
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)
Mine navigeerimisribale Mine otsikasti

Abstraktne interpretatsioon (inglise keeles abstract interpretation) on informaatika teooria arvutiprogrammide semantika korrektseks lähendamiseks, põhinedes monotoonsetel funktsioonidel üle osaliselt järjestatud hulkade, eelkõige võrede. Seda võib vaadelda kui arvutiprogrammi osalist täitmist, millega kogutakse informatsiooni selle semantika (nt juhtimisvoo, andmevoo) kohta, tegemata kõiki arvutusi.

Selle teooria põhiline rakendus on formaalne staatiline analüüs, mis hangib informatsiooni programmide võimalike täitmiste kohta. Sellistel analüüsidel on kaks põhilist kasutusvaldkonda:

Abstraktse interpretatsiooni teooria formaliseerisid prantsuse informaatikud Patrick Cousot ja Radhia Cousot 1970. aastate lõpus.[2][3] Esimene suuremahuline automaatne programmianalüüs abstraktse interpretatsiooni abil teostati Ariane 5 raketi koodil pärast selle esmalennu ebaõnnestumist 1996. aastal.[4]

Abstraktsed domeenid

Abstraktseks interpretatsiooniks kasutatavaid võresid nimetatakse abstraktseteks domeenideks (inglise keeles abstract domain). Domeeni elemendid on programmi konkreetsete seisundite lähendused, millel sooritatakse konkreetsetele operatsioonidele vastavaid abstraktseid operatsioone. Lähendamine ja sellega kaasnev täpsuse kaotus võib olla vajalik, et semantika oleks lahenduv (vt Rice'i teoreem, peatumisprobleem).[5]

Domeeni valik sõltub sellest, milliste programmi omaduste kohta informatsiooni otsitakse. Lisaks tuleb teha kompromiss selle täpsuse ja keerukuse vahel.

Täisarvude domeenid

Täisarvuliste muutujate ja nende tehete lähendamiseks on abstraktsel interpreteerimisel mitmeid võimalusi.

Kombinatsioon intervallaritmeetikast (Mall:Font color) ja kongurentsist mod 2 (Mall:Font color) abstraktsete domeenidena, et analüüsida C programmi (Mall:Font color: konkreetsed võimalike väärtuste hulgad täitmisel). Kasutades jääke (Mall:Font color=paaris, Mall:Font color=paaritu), saab nulliga jagamise välistada

Märkide domeen

Selliste muutujate puhul võib unustada täpsed väärtused, jättes alles ainult nende väärtuste märgid (+, - või 0). Mõningate aritmeetiliste tehete, näiteks korrutamise puhul selline lähendus täpsust ei kaota: kahe täisarvu korrutise märk on üheselt määratud korrutatud arvude märkidega. Teiste tehete, näiteks liitmise puhul lähendus võib kaotada täpsust: positiivse ja negatiivse arvu summa märki pole võimalik ainult liidetavate märke teades määrata.[5]

Intervallide domeen

Täpsemaks analüüsiks võib kasutada näiteks arvtelje lõike, kirjeldades iga muutuja x võimalikke väärtusi täisarvude intervalliga [lx,ux]. Sellistel lähendustel on võimalik defineerida aritmeetilised tehted, moodustades intervallaritmeetika.[6] Näiteks muutujate x ja y, mille intervallid on vastavalt [lx,ux] ja [ly,uy], korral on

  • summa x+y intervall [lx+ly,ux+uy],
  • vahe xy intervall [lxuy,uxly].

Relatsioonilised domeenid

Kolmemõõtmeline kumer hulktahukas kirjeldamaks kolme muutuja võimalike väärtusi. Iga muutuja võib olla null, kuid kõik kolm ei saa korraga olla nullid. Seda omadust ei saa intervallide domeenis kirjeldada

Järgnevas programmis on muutuja z väärtus alati null:

y = x;
z = x - y;

Kasutades intervallide domeeni ja eeldades, et muutuja x väärtus on algul lõigus [0,1], leitakse, et muutuja z väärtus on lõigus [1,+1]. Tulemus pole vale, kuid mitte nii täpne, kui võiks tahta, sest see domeen ei arvesta lahutamisel muutujate omavahelist seost, mistõttu nimetatakse domeeni mitterelatsiooniliseks.

Relatsionaalsed domeenid, mis muutujatevahelisi seoseid arvestavad, on näiteks:

Muud domeenid

Lisaks täisarvuliste väärtustele võib analüüsida ka muud tüüpi andmeid ja muid programmi omadusi, näiteks:

Viited

Mall:Viited

Välislingid

  1. 1,0 1,1 Mall:RaamatuviideKasutatud 06.04.2018.
  2. Mall:RaamatuviideKasutatud 06.04.2018.
  3. Mall:RaamatuviideKasutatud 06.04.2018.
  4. Mall:Netiviide
  5. 5,0 5,1 Mall:Netiviide
  6. Mall:RaamatuviideKasutatud 06.04.2018.
  7. Mall:Raamatuviide
  8. Mall:Raamatuviide
  9. Mall:RaamatuviideKasutatud 06.04.2018.
  10. Mall:RaamatuviideKasutatud 06.04.2018.
  11. Mall:RaamatuviideKasutatud 06.04.2018.