Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Separation logic

From Wikipedia, the free encyclopedia
Concept in computer science
This article'suse ofexternal links may not follow Wikipedia's policies or guidelines. Pleaseimprove this article by removingexcessive orinappropriate external links, and converting useful links where appropriate intofootnote references.(October 2024) (Learn how and when to remove this message)

Incomputer science,separation logic[1] is an extension ofHoare logic, a way of reasoning about programs.It was developed byJohn C. Reynolds,Peter O'Hearn, Samin Ishtiaq and Hongseok Yang,[1][2][3][4] drawing upon early work byRod Burstall.[5] The assertion language of separation logic is a special case of thelogic of bunched implications (BI).[6] ACACM review article by O'Hearn charts developments in the subject to early 2019.[7]

Overview

[edit]

Separation logic facilitates reasoning about:

  • programs that manipulate pointer data structures—includinginformation hiding in the presence of pointers;
  • "transfer of ownership" (avoidance of semantic frameaxioms); and
  • virtual separation (modular reasoning) between concurrent modules.

Separation logic supports the developing field of research described byPeter O'Hearn and others aslocal reasoning, whereby specifications and proofs of a program component mention only the portion of memory used by the component, and not the entire global state of the system. Applications include automatedprogram verification (where analgorithm checks the validity of another algorithm) and automatedparallelization of software.

Assertions: operators and semantics

[edit]

Separation logic assertions describe "states" consisting of astore and aheap, roughly corresponding to the state oflocal (orstack-allocated) variables anddynamically-allocated objects in common programming languages such asC andJava. A stores{\displaystyle s} is afunction mapping variables to values. A heaph{\displaystyle h} is apartial function mapping memory addresses to values. Two heapsh{\displaystyle h} andh{\displaystyle h'} aredisjoint (denotedhh{\displaystyle h\,\bot \,h'}) if their domains do not overlap (i.e., for every memory address{\displaystyle \ell }, at least one ofh(){\displaystyle h(\ell )} andh(){\displaystyle h'(\ell )} is undefined).

The logic allows to prove judgements of the forms,hP{\displaystyle s,h\models P}, wheres{\displaystyle s} is a store,h{\displaystyle h} is a heap, andP{\displaystyle P} is anassertion over the given store and heap. Separation logic assertions (denoted asP{\displaystyle P},Q{\displaystyle Q},R{\displaystyle R}) contain the standard Boolean connectives and, in addition,emp{\displaystyle \mathbf {e} \mathbf {m} \mathbf {p} },ee{\displaystyle e\mapsto e'},PQ{\displaystyle P\ast Q}, andPQ{\displaystyle P{-\!\!\ast }\,Q}, wheree{\displaystyle e} ande{\displaystyle e'} are expressions.

The operators{\displaystyle \ast } and{\displaystyle -\!\!\ast } share some properties with the classicalconjunction andimplication operators. They can be combined using an inference rule similar tomodus ponens

s,hP(PQ)s,hQ{\displaystyle {\frac {s,h\models P\ast (P-\!\!\ast \,Q)}{s,h\models Q}}}

and they form anadjunction, i.e.,s,hhPQR{\displaystyle s,h\cup h'\models P\ast Q\Rightarrow R} if and only ifs,hPQR{\displaystyle s,h\models P\Rightarrow Q-\!\!\ast \,R} forhh{\displaystyle h\,\bot \,h'}; more precisely, the adjoint operators are_Q{\displaystyle \_\ast Q} andQ_{\displaystyle Q-\!\!\ast \,\_}.

Reasoning about programs: triples and proof rules

[edit]

In separation logic, Hoare triples have a slightly different meaning than inHoare logic. The triple{P} C {Q}{\displaystyle \{P\}\ C\ \{Q\}} asserts that if the programC{\displaystyle C} executes from an initial state satisfying the preconditionP{\displaystyle P} then the program willnot go wrong (e.g., have undefined behaviour), and if it terminates, then the final state will satisfy the postconditionQ{\displaystyle Q}. In essence, during its execution,C{\displaystyle C} may access only memory locations whose existence is asserted in the precondition or that have been allocated byC{\displaystyle C} itself.

In addition to the standard rules fromHoare logic, separation logic supports the following very important rule:

{P} C {Q}{PR} C {QR} mod(C)fv(R)={\displaystyle {\frac {\{P\}\ C\ \{Q\}}{\{P\ast R\}\ C\ \{Q\ast R\}}}~{\mathsf {mod}}(C)\cap {\mathsf {fv}}(R)=\emptyset }

This is known as theframe rule (named after theframe problem) and enables local reasoning. It says that a program that executes safely in a small state (satisfyingP{\displaystyle P}), can also execute in any bigger state (satisfyingPR{\displaystyle P\ast R}) and that its execution will not affect the additional part of the state (and soR{\displaystyle R} will remain true in the postcondition). The side condition enforces this by specifying that none of the variables modified byC{\displaystyle C} occur free inR{\displaystyle R}, i.e. none of them are in the 'free variable' setfv{\displaystyle {\mathsf {fv}}} ofR{\displaystyle R}.

Separation algebras

[edit]

More generally, separation logic can be seen as a way of reasoning aboutseparation algebras. A separation algebra may be defined in several ways, but is often presented as acancellative,partialcommutative monoid.[8] More concretely, it is a setA, partial binary operation:A×AA{\displaystyle \oplus :A\times A\rightharpoonup A} and constantu satisfying the following identities, where in the first three laws, if any side of the equation is defined, all sides are defined:

It can be shown that the presentation of stacks and heaps above gives rise to a separation algebra: takeA to be the set of all heaps, the binary operation{\displaystyle \oplus } to be the union of two heaps (only defined when the heaps are disjoint), andu to be the empty heap. In some definitions, cancellativity is omitted, but this does not necessarily pose a problem.[9]

Many assertions can be given semantics purely in terms of a separation algebra; in particular, for an assertionP we can assign to it a certain subset ofA, denoted[[P]]{\displaystyle [\![P]\!]}, as follows:

The rules for{\displaystyle \land },{\displaystyle \vee },¬{\displaystyle \neg } and{\displaystyle \exists } are omitted but are easily derived from the above, while the semantics ofee{\displaystyle e\mapsto e'} are given by the separation algebra in question.

Sharing

[edit]

Separation logic leads to simple proofs of pointer manipulation for data structures that exhibit regular sharing patterns which can be described simply using separating conjunctions; examples include singly and doubly linked lists and varieties of trees. Graphs and DAGs and other data structures with more general sharing are more difficult for both formal and informal proof. Separation logic has, nonetheless, been applied successfully to reasoning aboutprograms with general sharing.

In their POPL'01 paper,[3] O'Hearn and Ishtiaq explained how the magic wand connective{\displaystyle {-\!\!*}} could be used to reason in the presence of sharing, at least in principle.For example, in the triple

{(x)((x42)P)} [x]=42 {P}{\displaystyle \{(x\mapsto -)\ast ((x\mapsto 42){-\!\!*}P)\}\ [x]=42\ \{P\}}

we obtain the weakest precondition for a statement that mutates the heap at locationx{\displaystyle x}, and this works for any postcondition, not only one that is laid out neatly using the separating conjunction. This idea was taken much further by Yang, who used{\displaystyle {-\!\!*}} to provide localized reasoning about mutations in the classicSchorr-Waite graph marking algorithm.[10] Finally, one of the most recent works in this direction is that of Hobor and Villard,[11] who employ not only{\displaystyle {-\!\!*}} but also a connective{\displaystyle \cup \,\!\!\!\!\!*}which has variously been called overlapping conjunction or sepish,[12] and which can be used to describe overlapping data structures:PQ{\displaystyle P\cup \!\!\!\!\!*Q} holds of a heaph{\displaystyle h} whenP{\displaystyle P} andQ{\displaystyle Q} hold for subheapshP{\displaystyle h_{P}} andhQ{\displaystyle h_{Q}} whose union ish{\displaystyle h}, but which possibly have a nonempty portionhPhQ{\displaystyle h_{P}\cap h_{Q}} in common. Abstractly,PQ{\displaystyle P\cup \!\!\!\!\!*Q} can be seen to be a version of the fusion connective ofrelevance logic.

Concurrent separation logic

[edit]

A Concurrent Separation Logic (CSL),a version of separation logic for concurrent programs, was originally proposed byPeter O'Hearn,[13]using a proof rule

{P1}C1{Q1}{P2}C2{Q2}{P1P2}C1C2{Q1Q2}{\displaystyle {\frac {\{P_{1}\}C_{1}\{Q_{1}\}\quad \{P_{2}\}C_{2}\{Q_{2}\}}{\{P_{1}*P_{2}\}C_{1}\parallel C_{2}\{Q_{1}*Q_{2}\}}}}

which allows independent reasoning about threads that access separate storage. O'Hearn's proof rules adapted an early approach ofTony Hoare to reasoning about concurrency,[14]replacing the use of scoping constraints to ensure separation by reasoning in separation logic. In addition to extending Hoare's approach to apply in the presence of heap-allocated pointers, O'Hearn showed how reasoning in concurrent separation logic could track dynamic ownership transfer of heap portions between processes; examples in the paper include a pointer-transferring buffer, and amemory manager.

Commenting on the early classical work oninterference freedom bySusan Owicki andDavid Gries, O'Hearn says that explicit checking for non-interference isn't necessary because his system rules out interference in an implicit way, by the nature of the way proofs are constructed.

A model for concurrent separation logic was first provided by Stephen Brookes in a companion paper to O'Hearn's.[15] The soundness of the logic had been a difficult problem, and in fact a counterexample of John Reynolds had shown the unsoundness of an earlier, unpublished version of the logic; the issue raised by Reynolds's example is described briefly in O'Hearn's paper, and more thoroughly in Brookes's.

At first it appeared that CSL was well suited to what Dijkstra had called loosely connected processes,[16] but perhaps not to fine-grained concurrent algorithms with significant interference. However, gradually it was realized that the basic approach of CSL was considerably more powerful than first envisaged, if one employed non-standard models of the logical connectives and even the Hoare triples.

By suitable choice of separation algebra, it was surprisingly found that the proof rules of abstract versions of concurrent separation logic could be used to reason about interfering concurrent processes, for example by encoding the rely-guarantee technique which had been originally proposed to reason about interference;[17] in this work the elements of the model were considered not resources, but rather "views" of the program state, and a non-standard interpretation of Hoare triples accompanies the non-standard reading of pre and postconditions.Finally, CSL-style principles have been used to compose reasoning about program histories instead of program states, in order to provide modular techniques for reasoning about fine-grained concurrent algorithms.[18]

Versions of CSL have been included in many interactive and semi-automatic (or "in-between") verification tools as described in the next section. A particularly significant verification effort is that of the μC/OS-II kernel mentioned there. But, although steps have been made,[19] as of yet CSL-style reasoning has been included in comparatively fewtools in the automatic program analysis category (and none mentioned in the next section).

O'Hearn and Brookes are co-recipients of the 2016Gödel Prize for their invention of Concurrent Separation Logic.[20]

Fractional permissions

[edit]

Plain concurrent separation logic is able to describe ownership transfer, wherein one thread may completely gives control over individual heap locations to another thread, but this isn't enough to reason about many concurrent programs—in particular, each heap cell may be shared by many threads so long as each thread only reads from the cell and does not write to it, or alternatively it may be written to so long as only one thread can do the writing.[21]

This may be achieved by annotating each{\displaystyle \mapsto } assertion with a fractional permissionπ(0,1]{\displaystyle \pi \in (0,1]} aseπe{\displaystyle e\,{\overset {\pi }{\mapsto }}\,e'}. Whenπ = 1, the thread has full ownership of the heap cell and therefore may write to it:

{x1_}[x]:=a{x1a}{\displaystyle \{x\,{\overset {1}{\mapsto }}\,\_\}\,[x]:=a\,\{x\,{\overset {1}{\mapsto }}\,a\}}

Whenπ < 1, the thread only has shared access, and therefore may only read:

{xπv}a:=[x]{xπva=v}{\displaystyle \{x\,{\overset {\pi }{\mapsto }}\,v\}\,a:=[x]\,\{x\,{\overset {\pi }{\mapsto }}\,v\ast a=v\}}

Importantly, permissions may be infinitely split, allowing an arbitrary number of threads to read from the same location (with the fractional permission keeping track of when the number of threads has reduced to one again):

xπ1+π2vxπ1vxπ2v{\displaystyle x\,{\overset {\pi _{1}+\pi _{2}}{\mapsto }}\,v\iff x\,{\overset {\pi _{1}}{\mapsto }}\,v\ast x\,{\overset {\pi _{2}}{\mapsto }}\,v}

Note that the actual magnitudes of the permissions less than one are immaterial and only required for tracking purposes; a program should not concern itself over whether any given permission is 0.1 or 0.9, as it is able to read from the heap cell all the same.

To allow for two heaps to both consider the same memory location, some modification is required to the definition of heaps and their disjointness. In particular, every heap location is assigned a fractional permission (and thuss,heπe{\displaystyle s,h\vdash e\,{\overset {\pi }{\mapsto }}\,e'} semantically means that in heaph, locatione has valuee' with permissionπ), and two heaps are disjoint if, for every location that is in both heaps, their values are equal and the sum of their fractional permissions does not exceed one. The operation of merging two heaps will correspondingly add together permissions for those duplicated locations.

Verification and program analysis tools

[edit]

Tools for reasoning about programs fall on a spectrum from fully automatic program analysis tools, which do not require any user input, to interactive tools where the humanis intimately involved in the proof process. Many such tools have been developed; the following list includes a few representatives in each category.

  • Automatic Program Analyses. These tools typically look for restricted classes of bugs (e.g., memory safety errors) or attempt to prove their absence, but fall short of proving full correctness.
    • A current example isFacebook Infer, a static analysis tool for Java, C, andObjective-C based on separation logic and bi-abduction.[22] As of 2015 hundreds of bugs per month were being found by Infer and fixed by developers before being shipped to Facebook's mobile apps.[23]
    • Other examples includeSpaceInvader (one of the first SL analyzers),Predator (which has won several verification competitions),MemCAD (which mixes shape and numerical properties) andSLAyer (from Microsoft Research, focussed on data structures found in device drivers).
  • Interactive Proof. Proofs have been done using embeddings of Separation Logic into interactive theorem provers such asRocq (previously known asCoq) andHOL (proof assistant). In comparison to the program analysis work, these tools require more in the way of human effort but prove deeper properties, up to functional correctness.
    • A proof of the FSCQ file system[24] where the specification includes behaviour under crashes as well as normal operation. This work won the best paper award at the 2015 Symposium on Operating System Principles.
    • Verification of a large fragment of theRust type system and some of its standard libraries in theRustBelt project using theIris framework for separation logic in Rocq.
    • Verification of an OpenSSL implementation of a cryptographic authentication algorithm,[25] utilizingverifiable C
    • Verification of key modules of a commercial OS kernel, the μC/OS-II kernel, the first commercialpre-emptive kernel to have been verified.[26]
    • Other examples include theYnot[27] library for the Rocq; theHolfoot embedding of Smallfoot in HOL;Fine-grained Concurrent Separation Logic, andBedrock (a Rocq library for low-level programming).
  • In Between. Many tools require more user intervention than program analyses, in that they expect the user to input assertions such as pre/post specs for functions or loop invariants, but after this input is given they attempt to be fully or almost fully automatic; this mode of verification goes back to classic works in the 1970s such as J King's verifier, and the Stanford Pascal Verifier. This style of verifier has recently been calledauto active verification, a term which intends to evoke the way of interacting with a verifier via an assert-check loop, analogous to the interaction between a programmer and a type-checker.
    • The very first Separation Logic verifier,Smallfoot, was in this in-between category. It required the user to input pre/post specs, loop invariants, and resource invariants for locks. It introduced a method of symbolic execution, as well as an automatic way to infer frame axioms. Smallfoot included Concurrent Separation Logic.
    • SmallfootRG is a verifier for a marriage of separation logic and the classic rely/guarantee method for concurrent programs.
    • Heap Hop implements a separation logic for message passing, following the ideas inSingularity (operating system).
    • VeriFast is an advanced current tool in the in-between category. It has demonstrated proofs ranging from object-oriented patterns to highly concurrent algorithms and to systems programs.
    • Viper is a state-of-the-art automated verification infrastructure for permission-based reasoning. It mainly consists of a programming language and two verification backends, one based on symbolic execution and another one on verification condition generation (VCG).[28] Based on the Viper infrastructure, several frontends for various programming languages have emerged:Gobra for Go,Nagini for Python,Prusti for Rust, andVerCors for C, Java, OpenCL, and OpenMP. These frontends translate the frontend programming language into Viper to then use a Viper verification backend for proving the input program's correctness.
    • TheMezzo Programming Language andAsynchronous Liquid Separation Types include ideas related to CSL in the type system for a programming language. The idea to include separation in a type system has earlier examples inAlias Types andSyntactic Control of Interference.

The distinction between interactive and in-between verifiers is not a sharp one. For example,Bedrock strives for a high degree of automation, in what it terms mostly-automatic verification, whereVerifast sometimes requires annotations that resemble the tactics (little programs) used in interactive verifiers.

Decidability and complexity

[edit]

The satisfiability problem for a quantifier-free, multi-sorted fragment of separation logic parameterized over the sorts of locations and data can be shown to bePSPACE-complete.[29] An algorithm for solving this fragment inDPLL(T)-basedSMT solvers has been integrated intocvc5.[30] Extending this result, satisfiability for an analog of theBernays–Schönfinkel class for separation logic with uninterpreted memory locations can also be shown to be PSPACE-complete, whereas the problem is undecidable with interpreted memory locations (e.g., integers) or further quantifier alternations[31]

References

[edit]
  1. ^abReynolds, John C. (2002)."Separation Logic: A Logic for Shared Mutable Data Structures"(PDF).LICS.
  2. ^Reynolds, John C. (1999). "Intuitionistic Reasoning about Shared Mutable Data Structure". InDavies, Jim;Roscoe, Bill;Woodcock, Jim (eds.).Millennial Perspectives in Computer Science, Proceedings of the 1999 Oxford–Microsoft Symposium in Honour of Sir Tony Hoare.Palgrave.
  3. ^abIshtiaq, Samin;O'Hearn, Peter (2001). "BI as an assertion language for mutable data structures".Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages.ACM. pp. 14–26.doi:10.1145/360204.375719.ISBN 1581133367.S2CID 2652274.
  4. ^O'Hearn, Peter; Reynolds, John C.; Yang, Hongseok (2001). "Local Reasoning about Programs that Alter Data Structures".CSL.CiteSeerX 10.1.1.29.1331.
  5. ^Burstall, R. M. (1972). "Some techniques for proving programs which alter data structures".Machine Intelligence.7.
  6. ^O'Hearn, P. W.; Pym, D. J. (June 1999). "The Logic of Bunched Implications".Bulletin of Symbolic Logic.5 (2):215–244.CiteSeerX 10.1.1.27.4742.doi:10.2307/421090.JSTOR 421090.S2CID 2948552.
  7. ^O'Hearn, Peter (February 2019)."Separation Logic".Commun. ACM.62 (2):86–95.doi:10.1145/3211968.ISSN 0001-0782.
  8. ^Calcagno, Cristiano; O'Hearn, Peter W.; Yang, Hongseok (July 2007)."Local Action and Abstract Separation Logic"(PDF).22nd Annual IEEE Symposium on Logic in Computer Science (LICS 2007):366–378.doi:10.1109/LICS.2007.30.
  9. ^Vafeiadis, Viktor; Narayan, Chinmay (29 October 2013)."Relaxed separation logic: a program logic for C11 concurrency".Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications:867–884.doi:10.1145/2509136.2509532.
  10. ^Yang, Hongseok (2001)."An Example of Local Reasoning in BI Pointer Logic: the Schorr−Waite Graph Marking Algorithm".Proceedings of the 1st Workshop on Semantics' Program Analysis' and Computing Environments for Memory Management.
  11. ^Hobor, Aquinas; Villard, Jules (2013)."The ramifications of sharing in data structures"(PDF).ACM SIGPLAN Notices.48:523–536.doi:10.1145/2480359.2429131.
  12. ^Gardner, Philippa; Maffeis, Sergio; Smith, Hareth (2012)."Towards a program logic for JavaScript"(PDF).Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '12. pp. 31–44.doi:10.1145/2103656.2103663.hdl:10044/1/33265.ISBN 9781450310833.S2CID 9571576.
  13. ^O'Hearn, Peter (2007)."Resources, Concurrency and Local Reasoning"(PDF).Theoretical Computer Science.375 (1–3):271–307.doi:10.1016/j.tcs.2006.12.035.
  14. ^Hoare, C.A.R. (1972). "Towards a theory of parallel programming".Operating System Techniques. Academic Press.
  15. ^Brookes, Stephen (2007)."A Semantics for Concurrent Separation Logic"(PDF).Theoretical Computer Science.375 (1–3):227–270.doi:10.1016/j.tcs.2006.12.034.
  16. ^Dijkstra, Edsger W.Cooperating sequential processes (EWD-123)(PDF). E.W. Dijkstra Archive. Center for American History,University of Texas at Austin. (transcription) (September 1965)
  17. ^Dinsdale-Young, Thomas; Birkedal, Lars; Gardner, Philippa; Parkinson, Matthew; Yang, Hongseok (2013)."Views"(PDF).ACM SIGPLAN Notices.48:287–300.doi:10.1145/2480359.2429104.
  18. ^Sergey, Ilya; Nanevski, Aleksandar; Banerjee, Anindya (2015)."Specifying and Verifying Concurrent Algorithms with Histories and Subjectivity"(PDF).24th European Symposium on Programming.arXiv:1410.0306.Bibcode:2014arXiv1410.0306S.
  19. ^Gotsman, Alexey; Berdine, Josh; Cook, Byron; Sagiv, Mooly (2007). "Thread-Modular Shape Analysis".Verification, Model Checking, and Abstract Interpretation(PDF). Lecture Notes in Computer Science. Vol. 5403. pp. 266–277.doi:10.1007/978-3-540-93900-9_3.ISBN 978-3-540-93899-6.{{cite book}}:|journal= ignored (help)
  20. ^Chita, Efi."2016 Gödel Prize".Eatcs. European Association for Theoretical Computer Science. Retrieved2022-08-29.
  21. ^Bornat, Richard; Calcagno, Cristiano; O'Hearn, Peter; Parkinson, Matthew (2005-01-12)."Permission accounting in separation logic"(PDF).POPL '05: Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. ACM:259–270.doi:10.1145/1040305.1040327.ISBN 978-1-58113-830-6.
  22. ^Separation logic and bi-abduction, page,Infer project site.
  23. ^Open-sourcing Facebook Infer: Identify bugs before you ship. C Calcagno, D DIstefano and P O'Hearn. 11 June 2015
  24. ^Using Crash Hoare Logic for Certifying the FSCQ File System, H Chen et al, SOSP'15
  25. ^Verified correctness and security of OpenSSL HMAC. Lennart Beringer, Adam Petcher, Katherine Q. Ye, and Andrew W. Appel. In24th USENIX Security Symposium, August 2015
  26. ^A Practical Verification Framework for Preemptive OS Kernels. Fengwei Xu, Ming Fu, Xinyu Feng, Xiaoran Zhang, Hui Zhang and Zhaohui Li:. InCAV 2016: 59-79
  27. ^The Ynot Project homepage,Harvard University, USA.
  28. ^Viper: A Verification Infrastructure for Permission-Based Reasoning, P. Müller, M. Schwerhoff, and A. J. Summers, VMCAI'16
  29. ^Reynolds, Andrew; Iosif, Radu; Serban, Cristina; King, Tim (2016)."A Decision Procedure for Separation Logic in SMT". In Artho, Cyrille; Legay, Axel; Peled, Doron (eds.).Automated Technology for Verification and Analysis. Lecture Notes in Computer Science. Cham: Springer International Publishing. pp. 244–261.arXiv:1603.06844.doi:10.1007/978-3-319-46520-3_16.ISBN 978-3-319-46520-3.
  30. ^Barbosa, Haniel; Barrett, Clark; Brain, Martin; Kremer, Gereon; Lachnitt, Hanna; Mann, Makai; Mohamed, Abdalrhman; Mohamed, Mudathir; Niemetz, Aina; Nötzli, Andres; Ozdemir, Alex; Preiner, Mathias; Reynolds, Andrew; Sheng, Ying; Tinelli, Cesare (2022). "cvc5: A Versatile and Industrial-Strength SMT Solver". In Fisman, Dana; Rosu, Grigore (eds.).Tools and Algorithms for the Construction and Analysis of Systems. Lecture Notes in Computer Science. Cham: Springer International Publishing. pp. 415–442.doi:10.1007/978-3-030-99524-9_24.ISBN 978-3-030-99524-9.
  31. ^Reynolds, Andrew; Iosif, Radu; Serban, Cristina (2017)."Reasoning in the Bernays-Schönfinkel-Ramsey Fragment of Separation Logic". In Bouajjani, Ahmed; Monniaux, David (eds.).Verification, Model Checking, and Abstract Interpretation. Lecture Notes in Computer Science. Cham: Springer International Publishing. pp. 462–482.doi:10.1007/978-3-319-52234-0_25.ISBN 978-3-319-52234-0.
Key
concepts
A simple control-flow graph
Semantics
Types
Models
Analyses
Static
Dynamic
Formal
methods
Concepts
Logics
Data structures
Tools
Constraint solvers
Lightweight
Proof assistants
Retrieved from "https://en.wikipedia.org/w/index.php?title=Separation_logic&oldid=1333817512"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp