{"id":170118,"date":"2008-12-10T18:03:35","date_gmt":"2008-12-10T18:03:35","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/project\/boogie-an-intermediate-verification-language\/"},"modified":"2019-08-19T17:53:30","modified_gmt":"2019-08-20T00:53:30","slug":"boogie-an-intermediate-verification-language","status":"publish","type":"msr-project","link":"https:\/\/www.microsoft.com\/en-us\/research\/project\/boogie-an-intermediate-verification-language\/","title":{"rendered":"Boogie: An Intermediate Verification Language"},"content":{"rendered":"<p class=\"asset-content\">Boogie is an intermediate verification language, intended as a layer on which to build program verifiers for other languages. Several program verifiers have been built in this way, including the VCC and HAVOC verifiers for C and the verifiers for Dafny, Chalice, and Spec#. A previous version of the language was called BoogiePL. The current language (version 2) is currently known as just Boogie, which is also the name of the verification tool that takes Boogie programs as input.<!-- .asset-content --><\/p>\n<div id=\"en-usprojectsboogiedefault\" class=\"page-content\"><span id=\"1fd0c065-1d7f-4616-ab52-ca781e7c9084\" class=\"ImageBlock fn\"><img decoding=\"async\" id=\"Image1fd0c065-1d7f-4616-ab52-ca781e7c9084\" class=\"alignright\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/boogie-boogie.png\" alt=\"\" \/><span id=\"ImageCaption1fd0c065-1d7f-4616-ab52-ca781e7c9084\" class=\"ImageCaptionCoreCss ImageCaption\"><\/span><\/span>Boogie is also the name of a <b>tool<\/b>. The tool accepts the Boogie language as input, optionally infers some invariants in the given Boogie program, and then generates verification conditions that are passed to an SMT solver. The default SMT solver is <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/Z3Prover\/z3\/wiki\">Z3<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<span id=\"1fd0c065-1d7f-4616-ab52-ca781e7c9084\" class=\"ImageBlock fn\"><span id=\"ImageCaption1fd0c065-1d7f-4616-ab52-ca781e7c9084\" class=\"ImageCaptionCoreCss ImageCaption\">\u00a0<\/span><\/span><\/div>\n<div class=\"page-content\">The Boogie research project is being developed primarily in the <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/group\/research-in-software-engineering-rise\/\">RiSE<\/a> group at <a href=\"https:\/\/www.microsoft.com\/en-us\/research\">Microsoft Research <\/a>in Redmond. However, people at several other institutions make the open-source Boogie tool what it is.<\/div>\n<div id=\"en-usprojectsboogiedefault\" class=\"page-content\">\n<ul>\n<li>Try <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"http:\/\/rise4fun.com\/Boogie\/McCarthy-91\" target=\"_blank\" rel=\"noopener noreferrer\">Boogie in your browser<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>!<\/li>\n<li><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"http:\/\/boogie.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Download<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>\u00a0Boogie.<\/li>\n<li>Contribute to Boogie&#8217;s <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"http:\/\/boogie.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">source code<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/li>\n<\/ul>\n<h2>Papers<\/h2>\n<p>If you want to <b>learn more<\/b> about the Boogie language and tool, good places to start are the\u00a0Boogie 2 language reference manual and the Boogie tool architectural overview.<\/p>\n<h2>Historical notes<\/h2>\n<p>In their geneses, <b>Boogie<\/b> and <b>Spec# <\/b>were developed hand in hand. For this reason, the name Boogie has been used to describe Spec#-related things. In particular, the Spec# static program verifier, which translates compiled Spec# programs (.NET bytecode) into Boogie, has been called Boogie, but the Spec# verifier is nowadays a separate tool (built on Boogie) called SscBoogie. Finally, Spec# uses an ownership-based discipline for handling object invariants. This discipline is known as the Boogie <b>methodology<\/b>, but it is tied only to Spec# and its bytecode translator, not to the Boogie verification language.<\/p>\n<\/div>\n<div id=\"en-usprojectsboogiedefault\" class=\"page-content\">\n<h1>Related Projects<\/h1>\n<p>Boogie has proven to be a great platform on top of which to implement other verification systems. Here is a partial list of such projects. If you know of others that should appear here, please let us know!<\/p>\n<ul>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/havoc\/\">Havoc<\/a>: a tool for checking systems software written in C.<\/li>\n<li>Poirot: a property checker for concurrent programs.<\/li>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/download\/symdiff\/\">Symdiff<\/a>: a windiff that shows semantic differences!<\/li>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/vcc-a-verifier-for-concurrent-c\/\">VCC<\/a>: a tool that analyzes concurrent C programs.<\/li>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/safe-to-the-last-instruction-automated-verification-of-a-type-safe-operating-system\/\">Verve<\/a>: an operating system whose type safety has been verified.<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Boogie is an intermediate verification language, intended as a layer on which to build program verifiers for other languages. Several program verifiers have been built in this way, including the VCC and HAVOC verifiers for C and the verifiers for Dafny, Chalice, and Spec#. A previous version of the language was called BoogiePL. The current [&hellip;]<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"research-area":[13561,13560],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-170118","msr-project","type-msr-project","status-publish","hentry","msr-research-area-algorithms","msr-research-area-programming-languages-software-engineering","msr-locale-en_us","msr-archive-status-active"],"msr_project_start":"2008-12-10","related-publications":[159550,157365,342743,155813,153732],"related-downloads":[],"related-videos":[],"related-groups":[],"related-events":[],"related-opportunities":[],"related-posts":[],"related-articles":[],"tab-content":[],"slides":[],"related-researchers":[{"type":"user_nicename","display_name":"Akash Lal","user_id":30905,"people_section":"Group 1","alias":"akashl"},{"type":"user_nicename","display_name":"Shuvendu Lahiri","user_id":33640,"people_section":"Group 1","alias":"shuvendu"}],"msr_research_lab":[199565],"msr_impact_theme":[],"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/170118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-project"}],"version-history":[{"count":4,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/170118\/revisions"}],"predecessor-version":[{"id":604440,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/170118\/revisions\/604440"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=170118"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=170118"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=170118"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=170118"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=170118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}