Skip to content

Add ESBMC as a verification backend #4773

Description

@rafaelsamenezes

Requested feature: Allow Kani to hand the goto binary it already produces to
ESBMC instead of CBMC, behind the unstable option -Z esbmc.

Use case: User can use another verification backend that can be used to confirm the results. Secondarily, ESBMC has a different symbolic execution engine, memory model and SMT encoding, so harnesses that one tool cannot finish may be tractable for the other.

Link to relevant documentation (Rust reference, Nomicon, RFC):

Test case:

// kani main_true.rs -Z esbmc   =>  VERIFICATION:- SUCCESSFUL
#[kani::proof]
fn main() {
    let a: u8 = kani::any();
    kani::assume(a < 100);
    assert!(a as u16 + 1 > a as u16);
}
// kani main_false.rs -Z esbmc  =>  VERIFICATION:- FAILED
#[kani::proof]
fn main() {
    let a: u8 = kani::any();
    let b: u8 = kani::any();
    assert!(a >= b);
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-RFCLabel RFC PRs and Issues[C] Feature / EnhancementA new feature request or enhancement to an existing feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions