Separationslogik , separationslogik ( engelsk separationslogik ) - formellt system, substrukturell logik, tillämplig på verifiering av program som innehåller föränderliga datastrukturer och pekare , en förlängning av Hoares logik . Designad av John Reynolds , Peter O'Hearn , Samin Ishtiaq och Hongseok Yang [ 1 ] [ 2 ] [ 3 ] [4] baserat på arbetet av Rod Burstall [ 5 ] . Påståendespråket för partitioneringslogik är ett specialfall av logiken med samlade implikationer [ 6 ] .
En utveckling av partitioneringslogik för parallell beräkning med delat minne är parallell partitioneringslogik , utvecklad av O'Hearn och Stephen D. Brookes .
Teknik baserad på separationslogiken gör det möjligt att utveckla system för verifiering av stora programvaruprojekt [7] .
Hoares logik har ett antal begränsningar, den fungerar bara på föränderliga variabler och inte stöder procedurer eller förstklassig kod . Den största begränsningen är dock bristen på pekarstöd , vilket är mest relevant för Imperative Program Specification . I fallet med att använda pekare och heap , kan föränderliga variabler överges genom att tilldela ett pekarvärde till lokala variabler endast en gång [8] .
2000-2002 kom John Reynolds och Peter O'Hearn på en förlängning av Hoares logik, divisionslogiken. Den ursprungliga idén var att förenkla resonemang om imperativa program på låg nivå med en gemensam föränderlig datastruktur [9] . Termen i sig är förknippad med huvudidén i denna logik - beskrivningen av uppdelningen av lagring ( engelsk lagring ) i icke-överlappande komponenter. Termen används både i förhållande till predikatkalkylen , utökad med divisionsoperatorn , och till resultatet av en förlängning av Hoares logik [1] .
Ett nyckeldrag i separationslogiken är möjligheten till lokalt resonemang (lokalt resonemang) på grund av förekomsten i uttalandena av spatial connectives ( eng. spatial connectives ) mellan delar av högen [10] .
Logik låter dig arbeta med påståenden i formen , där:
För att övervinna de besvärliga beskrivningarna av förbud mot användning av samma adress av olika objekt, har en ny logisk operation införts - en disjunkt konjunktion , betecknad med (eller [13] ) och hävdar att vart och ett av villkoren och är uppfyllda i dess del av högen (adresserat lager ) [9] [14] . Det vill säga sant för en hög om det finns två delar av denna hög och för vilken [15] är sant :
Ovan, och förstås som delfunktioner som ger värden som motsvarar en adress på högen.
För att hävda att högen är tom, introduceras ett predikat (i detta fall uppenbarligen, ), och för att beteckna en pekare - . Till exempel i det följande, som är ett av axiomen, Hoare-trippeln
förutsättningen är den oanvända minnescellen, som, som ett resultat av tilldelningsoperationen, pekar på F , som anges i postvillkoret [12] .
Nyckeln till lokalt resonemang är ramregeln som introducerades av O'Hearn [ 1 ] :
,där ingen fri variabel ( eng. free v ariable ) ändras ( eng. modifierad ) under påverkan av kommandot . Med den här regeln kan du lägga till godtyckliga predikat om variabler och delar av högen som inte ändras av kommandot . Samtidigt kallade O'Hearn mängden heap som ockuperades av kommandot, termen för engelska. fotavtryck ("avtryck"). Syftet med ramregeln är att utöka argumentet från en mer lokal beskrivning av kommandot till en mer global beskrivning av det omslutande kommandot, kommandot med störst avtryck [1] .
Efter att ha fastställt att separationslogiken är ett exempel på logiken för kärveimplikationer, introducerade Yang och Ishtiak den separerande implikationen ( engelsk separating implikation [1] , engelsk trollstav ). Beteckningen säger att om en hög förlängdes med en icke-korsande hög för vilken är sant , då för den resulterande högen kommer det att vara sant [7] .
Semantiken för logiska bindningar (separerande konjunktion och separerande implikation) innebär en monoid högstruktur [7] .
Concurrent Separation Logic ( CSL ) är en version av logik som är användbar för verifiering av parallella algoritmer med delat minne. Ursprungligen föreslagen av Peter O'Hearn. Den använder följande regel [16]
,vilket gör att du kan dra slutsatser i närvaro av oberoende trådar för utförande som kommer åt en separat butik. O'Hearns bevisregler anpassade Tony Hoares tidiga inställning till samtidighet [17] genom att ersätta användningen av räckviddsbegränsningar för att upprätthålla partitionering med resonemang i partitioneringslogik. Förutom att utöka Hoares tillvägagångssätt för heap-pekare, visade O'Hearn att parallell partitioneringslogik dynamiskt kan spåra överföringen av äganderätten till heap-områden mellan processer. Exemplen i hans artikel inkluderar således en pekarpassbuffert och en minneshanterare .
Lokala resonemang kan också förstås i termer av ägaröverlåtelse . Det är lättast att överväga överlåtelse av äganderätt med hjälp av Hoare-monitorreglerna som exempel (du kan se att separationslogiken också är lämplig för distribuerade system). För att komma in i ett kritiskt avsnitt används en separerande konjunktion med , där är resursinvarianten r . När du lämnar det kritiska avsnittet följer den logiska slutsatsen i motsatt riktning [18] :
,I analogi kan vi också betrakta processen att bearbeta ett meddelande som skickas av en annan process med resurser delegerade till denna process, bestämt av fingeravtryck [18] .
En modell för en parallell uppdelningslogik introducerades först av Stephen D. Brookes i en bifogad artikel till O'Hearns papper [19] . Logikens korrekthet ( engelsk soundness ) var ett svårt problem. I synnerhet John Reynolds motexempel visade att en tidigare opublicerad version av logiken misslyckades. Punkten som togs upp av Reynolds exempel beskrivs kortfattat i O'Hearns artikel och mer fullständigt i Brooks's.
O'Hearn och Brooks är medmottagare av Gödelpriset 2016 för uppfinningen av logiken för parallell uppdelning [20] .
Separationens logik har funnit tillämpning i automatiska och interaktiva verifierare av programvara skriven i en imperativ och objektorienterad stil. För detta har lämpliga tillägg till befintliga verifieringsverktyg utvecklats, till exempel, såsom:
Andra system som använder delad logik: Smallfoot, Space Invader, THOR, SLAyer, HIP, jStar, Xisa, VeriFast, Infer, SeLoger, SLP. Men från och med 2014 finns det inga praktiska teorembevisare som implementerar den fullständiga logiken för partitionering, d.v.s. inklusive en partitioneringsimplikation [7] .
Beroende på typen av användning av systemet kan det delas upp enligt följande [24] :