Skip to content

Formal Verification

Formal verification tutorials — propositional logic, model checking, theorem proving, SMT solving, symbolic execution, TLA+, Alloy, Z3, Coq, Isabelle, Dafny, and correct-by-construction design

83 Published

In this tutorial, you will learn about Formal Verification. We cover key concepts, practical examples, and best practices to help you master this topic.

Comprehensive formal verification tutorials covering everything from qubits and Superposition to advanced algorithms and real-world applications.

Additional Classic Tutorials

Abstract Interpretation -- Sound Static Analysis
Alloy Analyzer -- Lightweight Software Modeling
Bounded Model Checking -- CBMC and Software Verification
Coq Proof Assistant -- Dependently Typed Programming
Correct-by-Construction Design -- Refinement and Event-B
Dafny -- Verified Programming with Contracts
Fairness Properties -- Justice, Compassion and Strong Fairness in Verification
Formal Methods Overview -- Proving Software Correct
Formal Specification Languages -- Z Notation, VDM and B-Method
Formal Verification of Smart Contracts -- Solidity, Slither and Certora
Hoare Logic -- Axiomatic Semantics for Program Verification
Industrial Formal Verification -- AWS, Intel and Microsoft Case Studies
Isabelle/HOL -- Interactive Theorem Proving
Model Checking -- State Space Exploration and Counterexamples
Probabilistic Model Checking -- PRISM and Stochastic Systems
Propositional Logic -- Truth Tables, SAT and Resolution
Verification of Reactive Systems -- Safety, Liveness and Real-Time Properties
SAT Solvers Explained -- DPLL, CDCL and Practical Solving
Satisfiability and SMT Solving -- SAT Solvers and Z3
Separation Logic -- Reasoning About Pointers and Heap
SMT Solvers (Z3) Guide -- Theory Solving and Program Verification
Static Analysis Tools -- Infer, Clang SA and SonarQube Guide
Symbolic Execution -- KLEE, Angr and Path Exploration
Temporal Logic -- LTL, CTL and Model Checking Properties
Theorem Proving -- Induction, Tactics and Proof Assistants
TLA+ -- Specifying Distributed Systems
Why3 Verification Platform -- Program Verification with Multiple Provers
Z3 Solver -- Solving Constraints with SMT

Published Topics

Formal Methods Overview — Proving Software Correct

A complete overview of formal methods for software correctness — model checking, theorem proving, static analysis, and real-world verification case studies.

✓ Live

Propositional Logic — Truth Tables, SAT and Resolution

A practical guide to propositional logic for formal verification — truth tables, SAT solving, resolution proofs, and their use in software correctness.

✓ Live

Temporal Logic — LTL, CTL and Model Checking Properties

A complete guide to temporal logic for formal verification — LTL and CTL operators, model checking properties, fairness constraints, and practical examples.

✓ Live

Model Checking — State Space Exploration and Counterexamples

A practical guide to model checking for formal verification — state space exploration, Kripke structures, CTL model checking algorithms, and counterexample analysis.

✓ Live

Theorem Proving — Induction, Tactics and Proof Assistants

A step-by-step guide to theorem proving for formal verification — mathematical induction, proof tactics, and mechanized reasoning with proof assistants.

✓ Live

Satisfiability and SMT Solving — SAT Solvers and Z3

A practical guide to SAT and SMT solving for formal verification — DPLL algorithm, CDCL, theory solvers, and Z3 integration for program analysis.

✓ Live

Bounded Model Checking — CBMC and Software Verification

A complete guide to bounded model checking for software verification — loop unwinding, CBMC usage, SAT-based verification, and handling arrays and pointers.

✓ Live

Symbolic Execution — KLEE, Angr and Path Exploration

A practical guide to symbolic execution for formal verification — symbolic variables, path constraints, KLEE and Angr usage, and finding deep bugs in real programs.

✓ Live

Abstract Interpretation — Sound Static Analysis

A complete guide to abstract interpretation for formal verification — abstract domains, Galois connections, widening, and sound static analysis of programs.

✓ Live

TLA+ — Specifying Distributed Systems

A step-by-step guide to TLA+ for formal specification of distributed systems — state machines, temporal formulas, invariants, and model checking TLA+ specifications.

✓ Live

Alloy Analyzer — Lightweight Software Modeling

A practical guide to Alloy Analyzer for formal modeling — relational logic, signatures, facts, predicates, assertions, and automated instance finding.

✓ Live

Z3 Solver — Solving Constraints with SMT

A practical guide to the Z3 SMT solver for constraint solving — propositional logic, arithmetic, arrays, bit vectors, quantifiers, and program verification with Python bindings.

✓ Live

Coq Proof Assistant — Dependently Typed Programming

A step-by-step guide to the Coq proof assistant for formal verification — dependent types, tactics, inductive proofs, and program extraction for verified software.

✓ Live

Isabelle/HOL — Interactive Theorem Proving

A complete guide to Isabelle/HOL for interactive theorem proving — higher-order logic, structured proofs, locales, code generation, and formalizing mathematics.

✓ Live

Dafny — Verified Programming with Contracts

A practical guide to Dafny for verified programming — preconditions, postconditions, loop invariants, and automated verification of imperative programs with contracts.

✓ Live

Separation Logic — Reasoning About Pointers and Heap

A complete guide to separation logic for formal verification — heap reasoning, separating conjunction, frame rule, and automated verification of pointer-manipulating programs.

✓ Live

Correct-by-Construction Design — Refinement and Event-B

A complete guide to correct-by-construction software design — refinement calculus, Event-B, formal model derivation, and deriving implementation from specification.

✓ Live

Industrial Formal Verification — AWS, Intel and Microsoft Case Studies

A practical survey of industrial formal verification — case studies from AWS, Intel, Microsoft, and NASA, with lessons learned and adoption patterns for production environments.

✓ Live

SAT Solvers Explained — DPLL, CDCL and Practical Solving

A practical guide to SAT solvers for formal verification — the DPLL algorithm, conflict-driven clause learning, and using MiniSat and CryptoMiniSat for real-world problems.

✓ Live

SMT Solvers (Z3) Guide — Theory Solving and Program Verification

A complete guide to SMT solvers for formal verification — combining SAT with theory reasoning, using Z3 for arithmetic, arrays, bit vectors, and verifying real software properties.

✓ Live

Static Analysis Tools — Infer, Clang SA and SonarQube Guide

A practical guide to static analysis tools for formal verification — Infer, Clang Static Analyzer, and SonarQube for finding bugs, security vulnerabilities, and code quality issues in production code.

✓ Live

Hoare Logic — Axiomatic Semantics for Program Verification

A complete guide to Hoare logic for program verification — Hoare triples, weakest preconditions, loop invariants, and proving correctness of imperative programs axiomatically.

✓ Live

Formal Verification of Smart Contracts — Solidity, Slither and Certora

A practical guide to formal verification of Solidity smart contracts — property-based testing with Foundry, automated verification with Certora Prover, and static analysis with Slither for Ethereum security.

✓ Live

Probabilistic Model Checking — PRISM and Stochastic Systems

A practical guide to probabilistic model checking for formal verification — discrete-time Markov chains, probabilistic temporal logic, PRISM tool usage, and verifying reliability of stochastic systems.

✓ Live

Why3 Verification Platform — Program Verification with Multiple Provers

A complete guide to Why3 for program verification — WhyML language, weakest precondition calculus, interfacing with SMT solvers and proof assistants, and verifying real programs.

✓ Live

Verification of Reactive Systems — Safety, Liveness and Real-Time Properties

A practical guide to formal verification of reactive systems — safety and liveness properties, synchronous languages, Lustre, and verifying real-time control systems with model checking.

✓ Live

Fairness Properties — Justice, Compassion and Strong Fairness in Verification

A complete guide to fairness in formal verification — weak fairness, strong fairness, compassion, and how fairness assumptions affect liveness proofs in model checking and temporal logic.

✓ Live

Formal Specification Languages — Z Notation, VDM and B-Method

A practical guide to formal specification languages for software design — Z notation for state-based specifications, VDM for model-oriented development, and the B-Method for refinement-based verification.

✓ Live

First-Order Logic — Complete Guide

Learn first-order logic, a formal system extending propositional logic with quantifiers and predicates for expressing mathematical statements precisely.

✓ Live

Higher-Order Logic — Complete Guide

Learn higher-order logic, an expressive formal system allowing quantification over predicates and functions for reasoning about complex mathematical structures.

✓ Live

Modal Logic — Complete Guide

Learn modal logic, an extension of classical logic with operators for necessity and possibility to reason about knowledge, time, and obligations in systems.

✓ Live

Linear Temporal Logic — Complete Guide

Learn linear temporal logic, a formalism with temporal operators like always, eventually, and until to specify and verify properties of reactive systems.

✓ Live

Computation Tree Logic — Complete Guide

Learn computation tree logic, a branching-time temporal logic that reasons over multiple possible execution paths for verifying complex system behaviors.

✓ Live

Hennessy-Milner Logic — Complete Guide

Learn Hennessy-Milner logic, a modal logic for specifying properties of labeled transition systems with necessity and possibility operators and fixed points.

✓ Live

Mu-Calculus — Complete Guide

Learn the mu-calculus, a highly expressive fixed-point logic that subsumes most temporal and modal logics used in formal verification of reactive systems.

✓ Live

Induction Principle — Complete Guide

Learn the induction principle, a mathematical proof technique for establishing properties over recursively defined structures like natural numbers and lists.

✓ Live

Structural Induction — Complete Guide

Learn structural induction, a proof method that reasons about recursively defined data structures by assuming the property holds for all smaller substructures.

✓ Live

Natural Deduction — Complete Guide

Learn natural deduction, a proof calculus with introduction and elimination rules for each logical connective that mirrors natural human reasoning patterns.

✓ Live

Sequent Calculus — Complete Guide

Learn sequent calculus, a formal proof system that uses sequents of the form Gamma entails Delta with left and right inference rules for theorem proving.

✓ Live

Resolution Refutation — Complete Guide

Learn resolution refutation, a proof by contradiction technique that derives empty clauses through repeated resolution steps for automated reasoning systems.

✓ Live

Unification Algorithm — Complete Guide

Learn the unification algorithm, a procedure for finding substitutions that make logical expressions identical for automated theorem proving and type inference.

✓ Live

Matching Algorithm — Complete Guide

Learn the matching algorithm, a restricted form of unification that finds variable substitutions in one expression to match another ground expression pattern.

✓ Live

Rewriting Logic — Complete Guide

Learn rewriting logic, a computational logic where system behavior is specified through rewrite rules defining state transitions and concurrent computations.

✓ Live

Term Rewriting — Complete Guide

Learn term rewriting systems, where terms are transformed using directed equations to model computation, simplify expressions, and analyze program semantics.

✓ Live

Labeled Transition Systems — Complete Guide

Learn labeled transition systems, a formal model of computation consisting of states and labeled transitions representing system behaviors and interactions.

✓ Live

Kripke Structures — Complete Guide

Learn Kripke structures, state-transition graphs with atomic proposition labels used as the semantic foundation for modal and temporal logic model checking.

✓ Live

Petri Nets — Complete Guide

Learn Petri nets, a modeling language for describing distributed systems with places, tokens, and transitions for concurrency and synchronization analysis.

✓ Live

Buchi Automata — Complete Guide

Learn Buchi automata, finite-state automata that accept infinite words used extensively in model checking for verifying liveness properties of reactive systems.

✓ Live

Omega-Automata — Complete Guide

Learn omega-automata, automata over infinite words generalizing Buchi, Rabin, and Streett conditions for verification of non-terminating reactive systems.

✓ Live

Lambda Calculus — Complete Guide

Learn the lambda calculus, a formal system for function definition and application that serves as the foundation for functional programming languages.

✓ Live

Simply Typed Lambda Calculus — Complete Guide

Learn the simply typed lambda calculus, which adds type annotations and a type checker to ensure well-typed programs never encounter runtime type errors.

✓ Live

System F — Complete Guide

Learn System F, a polymorphic lambda calculus with universal types enabling parametric polymorphism and serving as the core of many modern typed languages.

✓ Live

Calculus of Constructions — Complete Guide

Learn the calculus of constructions, a higher-order typed lambda calculus unifying dependent types, polymorphism, and type operators in a single framework.

✓ Live

Martin-Lof Type Theory — Complete Guide

Learn Martin-Lof type theory, an intuitionistic type theory where types are propositions and programs are proofs for constructive mathematics and verification.

✓ Live

Homotopy Type Theory — Complete Guide

Learn homotopy type theory, an interpretation of type theory where types are spaces and equality proofs are paths for formalizing mathematics and verification.

✓ Live

Univalence Axiom — Complete Guide

Learn the univalence axiom, a principle in homotopy type theory stating that equivalent types are equal, transforming mathematical reasoning and proof.

✓ Live

Cubical Type Theory — Complete Guide

Learn cubical type theory, a computational interpretation of homotopy type theory with constructive univalence using cubes as the basis for path reasoning.

✓ Live

Refinement Types — Complete Guide

Learn refinement types, which enrich simple types with logical predicates to precisely capture program invariants like positive integers or sorted lists.

✓ Live

Liquid Types — Complete Guide

Learn liquid types, refinement types automatically inferred via predicate abstraction and SMT solving to verify program properties without manual annotations.

✓ Live

Gradual Typing — Complete Guide

Learn gradual typing, which integrates static and dynamic typing within a single language by allowing optional type annotations with runtime consistency checks.

✓ Live

Ghost Code — Complete Guide

Learn ghost code, specification-only constructs inserted into programs for verification purposes that are erased during compilation with no runtime effect.

✓ Live

Loop Invariants — Complete Guide

Learn loop invariants, properties that hold before, during, and after loop execution forming the foundation for proving correctness of iterative algorithms.

✓ Live

Variant Functions — Complete Guide

Learn variant functions, integer-valued expressions that decrease with each loop iteration to prove program termination and ensure eventual completion.

✓ Live

Preconditions and Postconditions — Complete Guide

Learn preconditions and postconditions, Hoare-style contract specifications defining what a function requires and guarantees for formal program verification.

✓ Live

Weakest Precondition — Complete Guide

Learn weakest precondition calculus, which computes the minimal condition needed before a statement to guarantee a given postcondition after execution.

✓ Live

Strongest Postcondition — Complete Guide

Learn strongest postcondition calculus, which computes the most precise condition guaranteed after program execution for formal software verification tasks.

✓ Live

Verification Condition Generation — Complete Guide

Learn verification condition generation, which produces logical formulas whose validity implies program correctness relative to specifications for checking.

✓ Live

Automated Verification — Complete Guide

Learn automated verification, which uses tools and algorithms to automatically prove program correctness without manual proof construction or user guidance.

✓ Live

Deductive Verification — Complete Guide

Learn deductive verification, a formal approach using logical inference rules and theorem proving to establish program correctness from given specifications.

✓ Live

Compositional Verification — Complete Guide

Learn compositional verification, a modular approach that verifies system components independently and combines guarantees to prove overall system correctness.

✓ Live

Assume-Guarantee Reasoning — Complete Guide

Learn assume-guarantee reasoning, a compositional verification technique where each component assumes behavior of others and guarantees its own behavior.

✓ Live

Rely-Guarantee Reasoning — Complete Guide

Learn rely-guarantee reasoning, a concurrency verification method where each thread relies on environmental stability and guarantees non-interference.

✓ Live

Invariant Generation — Complete Guide

Learn invariant generation, the automated synthesis of inductive invariants that hold at all program points for establishing correctness properties of systems.

✓ Live

Ranking Functions — Complete Guide

Learn ranking functions, well-founded mappings from program states to natural numbers that decrease with each step to prove program termination of loops.

✓ Live

Termination Proving — Complete Guide

Learn termination proving, using well-founded orders, ranking functions, and dependency pairs to establish that programs halt for all possible inputs.

✓ Live

Liveness Proving — Complete Guide

Learn liveness proving, techniques to verify that desirable events eventually occur in reactive systems using temporal logic and fairness constraint properties.

✓ Live

Safety Proving — Complete Guide

Learn safety proving, techniques to verify that nothing bad ever happens in a system by establishing invariants and checking reachable state space properties.

✓ Live

Fairness Constraints — Complete Guide

Learn fairness constraints, conditions ensuring that continuously enabled transitions execute for verifying liveness in concurrent and distributed systems.

✓ Live

Kleene Star Operator — Complete Guide

Learn the Kleene star operator, which forms the reflexive transitive closure of a set of strings, fundamental to regular expressions and automata theory.

✓ Live

Omega-Regular Languages — Complete Guide

Learn omega-regular languages, an extension of regular languages to infinite words using Buchi acceptance for specifying non-terminating system properties.

✓ Live

CSP Process Algebra — Complete Guide

Learn CSP process algebra, a formal language for describing concurrent systems through processes that communicate via synchronized events and channels.

✓ Live

CCS Calculus — Complete Guide

Learn CCS calculus, a process calculus for modeling concurrent systems with communication through named channels and synchronization actions between processes.

✓ Live

Pi-Calculus — Complete Guide

Learn the pi-calculus, a process calculus where channel names can be passed as data enabling mobile systems with dynamically changing communication structures.

✓ Live

All 83 topics in Formal Verification — Complete Guide are published.