Erotuslogiikka , erottelulogiikka ( englanniksi separation logic ) - muodollinen järjestelmä, alirakennelogiikka, jota voidaan soveltaa muuttuvia tietorakenteita ja osoittimia sisältävien ohjelmien varmentamiseen , Hoaren logiikan laajennus . Suunnittelija John Reynolds , Peter O'Hearn , Samin Ishtiaq ja Hongseok Yang [ 1 ] [ 2 ] [ 3] [4] perustuu Rod Burstallin [ 5 ] työhön . Osiointilogiikan väitekieli on nippuimplikaatioiden logiikan erikoistapaus [ 6 ] .
Eräs osiointilogiikan kehitys rinnakkaislaskennassa jaetun muistin kanssa on rinnakkaisosiointilogiikka , jonka ovat kehittäneet O'Hearn ja Stephen D. Brookes .
Erottelulogiikkaan perustuvat tekniikat mahdollistavat suurten ohjelmistoprojektien verifiointijärjestelmien kehittämisen [7] .
Hoaren logiikalla on useita rajoituksia, sillä se toimii vain muuttuvilla muuttujilla eikä tue proseduureja tai ensiluokkaista koodia . Suurin rajoitus on kuitenkin osoittimen tuen puute, joka on olennaisin Imperative Program Specification . Osoittimia ja kasaa käytettäessä muuttuvat muuttujat voidaan hylätä antamalla osoittimen arvo paikallisille muuttujille vain kerran [8] .
Vuosina 2000-2002 John Reynolds ja Peter O'Hearn keksivät laajennuksen Hoaren logiikkaan, jakologiikkaan. Alkuperäinen idea oli yksinkertaistaa päättelyä matalan tason pakollisista ohjelmista, joilla on yhteinen muuttuva tietorakenne [9] . Itse termi liittyy tämän logiikan pääajatukseen - tallennustilan ( englanninkielinen tallennus ) jakamisen kuvaus ei-päällekkäisiin komponentteihin. Termiä käytetään sekä predikaattilaskussa , jota jakooperaattori on laajentanut, että Hoaren logiikan laajennuksen tulokseen [1] .
Erottelulogiikan keskeinen piirre on paikallisen päättelyn (paikallinen päättely) mahdollisuus, joka johtuu lausunnoista spatiaalisten konnektiivien ( eng. spatial connectives ) läsnäolosta kasan osien välillä [10] .
Logiikka antaa sinun työskennellä muodon lauseiden kanssa , jossa:
Jotta eri objektien saman osoitteen käyttöä koskevien kieltojen hankalista kuvauksista päästään eroon, on otettu käyttöön uusi looginen operaatio - disjunktiivinen konjunktio , jota merkitään (tai [13] ) ja joka vakuuttaa, että jokainen ehdoista ja täyttyy kasan osa (osoitteellinen varasto ) [9] [14] . Eli totta kasalle , jos tästä kasasta on kaksi osaa ja jolle [15] on totta :
Yläpuolella ja ymmärretään osittaisina funktioina , jotka antavat arvoja, jotka vastaavat kasan osoitetta.
Vahvistaaksesi, että kasa on tyhjä, otetaan käyttöön predikaatti (tässä tapauksessa tietysti ) ja osoitetaan osoitin - . Esimerkiksi seuraavassa, joka on yksi aksioomeista, Hoare -kolmio
Edellytyksenä on käyttämätön muistisolu, joka osoitusoperaation seurauksena osoittaa F :een , joka on ilmoitettu jälkiehdossa [12] .
Avain paikalliseen päättelyyn on O'Hearnin [ 1 ] esittämä kehyssääntö :
,jossa vapaata muuttujaa ( eng. free v ariable ) ei muuteta ( muokattu ) komennon vaikutuksesta . Tämän säännön avulla voit lisätä mielivaltaisia predikaatteja keon muuttujista ja osista, joita komento ei muuta . Samaan aikaan O'Hearn kutsui komennon varaaman kasan määrää termiksi englanti. jalanjälki ("jälki"). Kehyssäännön tarkoitus on laajentaa argumenttia paikallisemmasta komennon kuvauksesta yleisempään kuvaukseen sulkevasta komennosta, komentoon, jolla on suurin jälki [1] .
Todettuaan, että erottelulogiikka on esimerkki nivelimplikaatioiden logiikasta, Yang ja Ishtiak esittelivät erottavan implikation ( englanniksi separating impplication [1] , englanniksi magic wand ). Nimitys sanoo, että jos kasaa laajennettiin ei-leikkautuvalla kasalla, jolle on tosi , niin tuloksena olevalle kasalle se on totta [7] .
Loogisten konnektiivien semantiikka (erotteleva konjunktio ja erottava implikaatio) edellyttää monoidikasarakennetta [ 7] .
Concurrent Separation Logic ( CSL ) on logiikan versio, jota voidaan soveltaa rinnakkaisten algoritmien varmentamiseen jaetun muistin kanssa. Alunperin ehdotti Peter O'Hearn. Se käyttää seuraavaa sääntöä [16]
,jonka avulla voit tehdä johtopäätöksiä itsenäisten suoritussäikeiden läsnä ollessa, jotka käyttävät erillistä kauppaa. O'Hearnin todistesäännöt mukauttivat Tony Hoaren varhaista lähestymistapaa samanaikaisuuteen [17] korvaamalla laajuusrajoitusten käytön osioinnin pakottamiseksi päättelyllä osiointilogiikassa. Sen lisäksi, että O'Hearn laajensi Hoaren lähestymistapaa kasoosoittimiin, se osoitti, että rinnakkaisosiointilogiikka voi dynaamisesti seurata kasa-alueiden omistajuuden siirtoa prosessien välillä. Siten hänen artikkelinsa esimerkkejä ovat osoittimen välityspuskuri ja muistinhallinta .
Paikallinen päättely voidaan ymmärtää myös omistusoikeuden siirtymisenä . Omistuksen siirtoa on helpoin harkita esimerkkinä Hoaren monitorointisäännöillä (näet, että erottelulogiikka sopii myös hajautetuille järjestelmille). Kriittisen osan syöttämiseksi käytetään erotuskonjunktiota , jossa on resurssin invariantti r . Kriittisestä osiosta poistuttaessa seuraa looginen johtopäätös päinvastaiseen suuntaan [18] :
,Analogisesti voimme myös tarkastella prosessia, jossa prosessi käsittelee toisen prosessin lähettämää viestiä prosessille delegoiduilla resursseilla, jotka määritetään sormenjälkien avulla [18] .
Stephen D. Brookes esitteli ensimmäisen kerran mallin rinnakkaisosiointilogiikasta O'Hearnin artikkelin mukana [ 19] . Logiikan oikeellisuus ( englanniksi soundness ) oli vaikea ongelma. Erityisesti John Reynoldsin vastaesimerkki osoitti logiikan aikaisemman, julkaisemattoman version epäonnistumisen. Reynoldsin esimerkin esille tuoma seikka on kuvattu lyhyesti O'Hearnin artikkelissa ja täydellisemmin Brooksin artikkelissa.
O'Hearn ja Brooks ovat saaneet vuoden 2016 Gödel-palkinnon rinnakkaisosioinnin logiikan keksimisestä [20] .
Erottamisen logiikka on löytänyt sovelluksen automaattisissa ja interaktiivisissa todentajissa, jotka on kirjoitettu imperatiiviseen ja olio- tyyliin. Tätä varten kehitettiin sopivia lisäyksiä olemassa oleviin varmennustyökaluihin, kuten esimerkiksi:
Muut jaettua logiikkaa käyttävät järjestelmät: Smallfoot, Space Invader, THOR, SLAyer, HIP, jStar, Xisa, VeriFast, Infer, SeLoger, SLP. Vuodesta 2014 lähtien ei kuitenkaan ole olemassa käytännön lauseiden todistajia, jotka toteuttaisivat osioinnin täyden logiikan, eli sisältäen osiointiimplikaatiota [7] .
Järjestelmän käytön luonteen mukaan se voidaan jakaa seuraavasti [24] :