Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Model Checking

Model Checking is a technique originally proposed for checking the correctness of system designs. A model is a characterization of a computing system and a property describes intended behavior of the system (e.g., deadlock freedom, data race freedom, etc.). The languages for characterization models and properties vary. The traditional approach to model checking, often referred to as automata model checking, translates the model in a graph, where nodes correspond to abstract states and edges correspond to state transitions. Safety properties, like those mentioned above, translates to graph reachability (i.e., finding property violations consists of finding "bad" states, reachable from the initial state, that violates the given property). The main challenge of model checking is scalability as the number of states is typically very high. For this reason, this problem is often referred to as "the state explosion problem".

In the last decade, the community started to gain interest in program model checking, where the subject of analysis is a program as opposed to program models. In this setup, states in the model correspond to real program states. The motivation is that dealing with programs directly may reduce the gap to transition model checking to practice.

The focus of this tutorial is on program model checking!

Disclaimer

We will use Docker containers to facilitate the setup of tools. For your convenience, the only requirement for running this demo is Docker itself. All dependencies necessary to run the tools are encoded within each Docker container that we created.

Software Requirements:

Make sure Docker is running with:

$ docker ps

If you get a message such as "Cannot connect to the Docker daemon...", you can start Docker daemon with:

$ sudo service docker start

Note that, in all docker containers below, you can edit files with emacs, vi or nano.

Java Pathfinder (JPF)

JPF is an explicit-state model checker for Java programs. It is specially focused in the verification of concurrent programs.

Running:

Spawn JPF container:

$ docker run -it --rm lhsm/jpf-examples

If you want to play with those samples:

$ docker run -it --rm lhsm/jpf-examples bash

Modify samples (.java) and configuration (.jpf) files:

$ cd src/examples/
$ {emacs,nano,vim} "file you want to modify"{.java, .jpf}
$ cd ../../ && ant build
$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf

To display every possible JPF configuration option:

$ java -jar build/RunJPF.jar src/examples/"file you modified".jpf -show

Symbolic Pathfinder (SPF)

SPF is a symbolic execution engine implemented on top of the JPF model checker.

Running:

Spawn SPF container:

$ docker run -it --rm davinomjr/spf-examples

If you want to play with those samples:

$ docker run -it --rm davinomjr/spf-examples bash

You can modify and run the samples doing the same as you would with JPF (instructions above).

Java Bounded Model Checker (JBMC)

JBMC is a Bounded Model Checker for Java program that uses the same back-end of the Bounded Model Checker for C programs, CBMC.

Running

Spawn JBMC container:

$ docker run -it --rm davinomjr/jbmc-examples

You can run different tests in regression/cbmc-java folder. For example:

$ cd regression/cbmc-java
$ cd Inheritance1/
$ jbmc Inheritance1.class

If you want to modify a sample and run jbmc again, you can do so by:

$ cd regression/cbmc-java
$ {emacs,nano,vim} "class you want to modify".java
$ javac "class you just modified".java
$ jbmc "class you just modified".class

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages