SMT-language is a simple input language (parsing/resolve/typing/translate/import). It's main objective is to ease the use Sat Modulo Theory solver(s) (actually z3).

Install

  1. Intall z3 prover
    1. Ubuntu console xxx@XXX:~$ sudo apt install z3
    2. Or see Z3Prover
  2. Install Rust: Rust
  3. Install SMT-Language: console xxx@XXX:~$ cargo install smt-lang

Run SMT-language

console xxx@XXX:~$ smt-lang --file problem_file.sl

Example

Problem

``` /* Simple and Stupid Example */ let b: Bool let i: 1..5 let r: Real = i / g(true, i)

let f(j: 1..10): Bool = j > i let g(b: Bool, i: 1..5): Int

// comment constraint C1 = f(i + 1) constraint C2 = (g(b, i) > i) or f(i) and not f(i+1) ```

Solve

console xxx@XXX:~$ smt-lang --file example.sl

Solution

let b: Bool = false let i: 1..5 = 1 let r: Real = 1/2 let f(j: 1..10): Bool = { (1) -> false (2) -> true (3) -> true (4) -> true (5) -> true (6) -> true (7) -> true (8) -> true (9) -> true } let g(b: Bool, i: 1..5): Int = { (false, 1) -> 2 (true, 1) -> 2 (false, 2) -> 2 (true, 2) -> 2 (false, 3) -> 2 (true, 3) -> 2 (false, 4) -> 2 (true, 4) -> 2 }

Options

Verbose

Syntax

Type

Variable

let <identifier> : <Type> [= <Expression>]

Constraint

constraint <identifier> = <Expression>

Expression

include ".+"

true | false not <Expression> <Expression> and <Expression> <Expression> or <Expression> <Expression> => <Expression>

<Expression> = <Expression> <Expression> /= <Expression> <Expression> < <Expression> <Expression> <= <Expression> <Expression> > <Expression> <Expression> >= <Expression>

[0-9]+ | [0-9]+.[0-9]+ - <Expression> <Expression> + <Expression> <Expression> - <Expression> <Expression> * <Expression> <Expression> / <Expression>

( <Expression> )

Comming Soon: