Hoareova logika

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 15. června 2021; kontroly vyžadují 2 úpravy .

Hoareova logika ( angl.  Hoare logic , též Floyd-Hoare logic , nebo Hoare rules ) je formální systém se sadou logických pravidel určených k prokázání správnosti počítačové programy . To bylo navrženo v roce 1969 anglickým počítačovým vědcem a matematickým logikem Hoareem , později vyvinutým samotným Hoareem a dalšími výzkumníky. [1] Původní nápad navrhl Floyd , který publikoval podobný systém [2 ] aplikovaný na vývojové diagramy . 

Hoare triplets

Hlavní charakteristikou Hoareovy logiky je Hoareova trojice .  Trojka popisuje, jak provedení části kódu změní stav výpočtu. Hoareův trojitý má následující podobu:

kde P a Q jsou tvrzení a C je  příkaz . _  _ _ P se nazývá předběžná podmínka ( antecedent ) a Q  se nazývá postpodmínka ( následná ). Pokud je předběžná podmínka pravdivá, příkaz učiní postpodmínku pravdivou. Příkazy jsou formule predikátové logiky .

Hoareova logika má axiomy a pravidla odvození pro všechny konstrukce jednoduchého imperativního programovacího jazyka . Kromě těchto konstrukcí popsaných v původní práci Hoareho vyvinul Hoare a další pravidla pro další konstrukce: souběžné provádění , volání procedury , skok a ukazatel .

Hoareho hlavní myšlenkou je dát každé konstrukci imperativního jazyka pre- a post- podmínku , zapsanou jako logický vzorec. V názvu se proto objevuje trojka  - precondition , konstrukce jazyka, postcondition .

Dobře fungující program lze napsat mnoha způsoby a v mnoha případech bude efektivní. Tato nejednoznačnost komplikuje programování. Chcete-li to provést, zaveďte styl. Ale to nestačí. U mnoha programů (například těch, které jsou spjaty nepřímo s lidským životem) je navíc nutné prokázat jejich správnost. Ukázalo se, že důkaz správnosti program řádově (asi 10x) prodražuje.

Částečná a úplná správnost

V Hoareho standardní logice lze prokázat pouze částečnou správnost, protože ukončení programu musí být prokázáno samostatně. Také pravidlo nepoužívat nadbytečné části programu nelze vyjádřit v Hoareově logice. "Intuitivní" chápání Hoareovy trojice lze vyjádřit následovně: pokud P nastane před dokončením C , pak buď nastane Q , nebo C nikdy neskončí. Pokud C neskončí, není žádné po, takže Q může být jakýkoli příkaz. Navíc můžeme zvolit Q jako nepravdivé, abychom ukázali, že C nikdy neskončí.

Úplnou správnost lze také prokázat pomocí rozšířené verze pravidla pro příkaz While .

Pravidla

Prázdný operátorový axiom

Pravidlo pro prázdný příkaz říká, že příkaz přeskočit ( prázdný příkaz ) nemění stav programu, takže příkaz, který byl pravdivý před přeskočením , zůstává pravdivý i po jeho provedení.

Axiom operátoru přiřazení

Axiom operátoru přiřazení říká, že po přiřazení se hodnota libovolného predikátu vzhledem k pravé straně přiřazení nemění s nahrazením pravé strany levou stranou:

Zde se rozumí výraz P , ve kterém jsou všechny výskyty volné proměnné x nahrazeny výrazem E .

Význam axiomu přiřazení je ten, že pravda je po provedení přiřazení ekvivalentní . Pokud to tedy platilo před zadáním, podle axiomu přiřazení to bude platit i po zadání. Naopak, pokud se před příkazem přiřazení rovnalo hodnotě „nepravda“, mělo by se rovnat hodnotě „nepravda“ i poté.

Příklady platných trojic:

Axiom přiřazení v Hoareově formulaci neplatí, pokud více než jeden identifikátor odkazuje na stejnou hodnotu. Například,

je nepravdivé, pokud x a y odkazují na stejnou proměnnou, protože žádná podmínka nemůže zajistit, aby y bylo 3 poté , co bylo x přiřazeno 2.

Pravidlo kompozice

Hoareovo kompoziční pravidlo platí pro sekvenční provádění programů S a T , kde S se provádí před T , což je zapsáno jako S;T .

Zvažte například dva případy axiomu přiřazení:

a

Podle pravidla složení získáme:

Pravidlo podmíněného operátoru

Odvozovací pravidlo

Pravidlo příkazu smyčky

Zde P je invariant cyklu .

Pravidlo příkazu cyklu s plnou správností

V tomto pravidle se kromě zachování invariantu smyčky dokazuje ukončení smyčky termínem nazývaným proměnná smyčky (zde t ), jejíž hodnota je přísně redukována podle opodstatněného vztahu " < " s každou iterací. V tomto případě musí podmínka B implikovat, že t není minimální prvek její domény, jinak bude premisa tohoto pravidla nepravdivá. Protože vztah " < " je plně podložený, každý krok smyčky je definován klesajícími členy konečné lineárně uspořádané množiny .

Zápis tohoto pravidla používá k označení úplné správnosti pravidla hranaté závorky, nikoli složené závorky. (Toto je jeden ze způsobů, jak označit úplnou správnost.)

Příklady

Příklad 1
— na základě axiomu přiřazení.
Protože na základě pravidla odvození dostaneme:
Příklad 2
— na základě axiomu přiřazení.
Pokud jsou x a N celá čísla, pak a na základě pravidla pro odvození dostaneme:

Viz také

Odkazy

  1. CAR Hoare . „ Axiomatický základ pro počítačové programování Archivováno 17. července 2011 na Wayback Machine “. Communications of the ACM , 12(10):576-580,583 října 1969. doi : 10.1145/363235.363259
  2. RW Floyd . « Přiřazování slov k programům. Archivováno z originálu 9. prosince 2008.  (odkaz dolů od 13-05-2013 [3444 dní] - historie ) »  (odkaz ke stažení) Sborník sympozií Americké matematické společnosti o aplikované matematice. sv. 19, str. 19-31. 1967.

Literatura