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 ] anvendt på flowcharts .
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).
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 .
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.
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.
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:
Her er P en cyklusinvariant .
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å.)
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: |
I bibliografiske kataloger |
---|