Hoares logik

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 15. juni 2021; checks kræver 2 redigeringer .

Hoare-logik ( eng.  Hoare-logik , også Floyd-Hoare-logik eller Hoare-regler ) er et formelt system med et sæt logiske regler designet til at bevise rigtigheden computerprogrammer . Det blev foreslået i 1969 af den engelske datalog og matematisk logiker Hoare , senere udviklet af Hoare selv og andre forskere. [1] Den oprindelige idé blev foreslået af Floyd , som udgav et lignende system [2 ] anvendtflowcharts . 

Hoare trillinger

Det vigtigste kendetegn ved Hoares logik er Hoare - trippelen .  Trippelen beskriver, hvordan udførelsen af ​​et stykke kode ændrer beregningens tilstand. Hoare triplen har følgende form:

hvor P og Q er påstande og C er  en kommando _  _ _ P kaldes forudsætningen ( antecedent ) og Q  kaldes postbetingelsen ( konsekvent ). Hvis forudsætningen er sand, gør kommandoen postbetingelsen sand. Udsagn er formler for prædikatlogik .

Hoares logik har aksiomer og slutningsregler for alle konstruktionerne af et simpelt imperativt programmeringssprog . Ud over disse konstruktioner beskrevet i Hoares originale arbejde, udviklede Hoare og andre regler for andre konstruktioner: samtidig udførelse , procedurekald , hop og pointer .

Hoares hovedidé er at give hver konstruktion af et imperativt sprog en præ- og postbetingelse , skrevet som en logisk formel. Derfor optræder en tredobbelt i navnet  - forudsætning , sprogkonstruktion, postbetingelse .

Et velfungerende program kan skrives på mange måder, og det vil i mange tilfælde være effektivt. Denne tvetydighed komplicerer programmering. For at gøre dette skal du introducere en stil. Men det er ikke nok. For mange programmer (for eksempel dem, der indirekte er forbundet med menneskeliv), er det også nødvendigt at bevise deres rigtighed. Det viste sig, at beviset for rigtigheden gør programmet dyrere med en størrelsesorden (ca. 10 gange).

Delvis og fuld korrekthed

I Hoares standardlogik kan kun delvis korrekthed bevises, da programafslutning skal bevises særskilt. Reglen om ikke at bruge redundante programdele kan heller ikke udtrykkes i Hoares logik. Den "intuitive" forståelse af Hoare-trippelen kan udtrykkes som følger: hvis P forekommer før C er fuldført, så opstår enten Q , eller C vil aldrig ophøre. Faktisk, hvis C ikke afsluttes, er der ingen efter, så Q kan være et hvilket som helst udsagn. Desuden kan vi vælge Q til at være falsk for at vise, at C aldrig vil afslutte.

Fuld korrekthed kan også bevises ved at bruge en udvidet version af reglen for While- sætningen .

Regler

Det tomme operatoraksiom

Reglen for en tom sætning siger, at skip -sætningen ( empty statement ) ikke ændrer programmets tilstand, så en sætning, der var sand før skip , forbliver sand, efter at den er udført.

Aksiomet for tildelingsoperatoren

Tildelingsoperatorens aksiom siger, at efter en tildeling ændres værdien af ​​et hvilket som helst prædikat i forhold til højre side af opgaven ikke ved udskiftning af højre side med venstre side:

Her betyder udtrykket P , hvor alle forekomster af den frie variabel x er erstattet af udtrykket E .

Betydningen af ​​opgaveaksiomet er, at sandheden er ækvivalent efter opgaven er udført. Hvis det således var sandt før opgaven, vil det ifølge opgaveaksiomet være sandt efter opgaven. Omvendt, hvis det var lig med "falsk" før opgaveerklæringen, skulle det være lig med "falsk" efter.

Eksempler på gyldige tripler:

Tildelingsaksiomet i Hoares formulering gælder ikke, når mere end én identifikator refererer til samme værdi. For eksempel,

er falsk, hvis x og y refererer til den samme variabel, da ingen forudsætning kan sikre, at y er 3 efter x er blevet tildelt 2.

Reglen for sammensætning

Hoares kompositionsregel gælder for sekventiel afvikling af programmerne S og T , hvor S udføres før T , som skrives som S;T .

Overvej f.eks. to forekomster af opgaveaksiomet:

og

I henhold til sammensætningsreglen får vi:

Betinget operatorregel

Inferensregel

Loop statement regel

Her er P en cyklusinvariant .

Cyklusudsagnsregel med fuld korrekthed

I denne regel, ud over at bevare sløjfeinvarianten, bevises sløjfeterminering med et udtryk kaldet sløjfevariablen (her t ), hvis værdi er strengt reduceret i henhold til den velbegrundede relation " < " med hver iteration. I dette tilfælde skal betingelse B indebære, at t ikke er minimumselementet i dets domæne, ellers vil præmissen for denne regel være falsk. Fordi " < "-relationen er fuldt ud velbegrundet, er hvert sløjfetrin defineret af faldende medlemmer af et endeligt lineært ordnet sæt .

Notationen af ​​denne regel bruger firkantede parenteser, ikke krøllede parenteser, for at angive reglens fuldstændige korrekthed. (Dette er en måde at betegne fuldstændig korrekthed på.)

Eksempler

Eksempel 1
— baseret på opgavens aksiom.
Da , baseret på inferensreglen, får vi:
Eksempel 2
— baseret på opgavens aksiom.
Hvis x og N er heltal, så , og baseret på inferensreglen, får vi:

Se også

Links

  1. BIL Hoare . " Et aksiomatisk grundlag for computerprogrammering Arkiveret 17. juli 2011 på Wayback Machine ". Communications of the ACM , 12(10):576-580,583 oktober 1969. doi : 10.1145/363235.363259
  2. RW Floyd . « Tildeling af ord til programmer. Arkiveret fra originalen den 9. december 2008.  (downlink siden 13-05-2013 [3444 dage] - historie ) »  (downloadet link) Proceedings of the American Mathematical Society Symposia on Applied Mathematics. Vol. 19, s. 19-31. 1967.

Litteratur