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).
console
xxx@XXX:~$ sudo apt install z3
console
xxx@XXX:~$ cargo install smt-lang
console
xxx@XXX:~$ smt-lang --file problem_file.sl
``` /* 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) ```
console
xxx@XXX:~$ smt-lang --file example.sl
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
}
let <identifier> : <Type> [= <Expression>]
constraint <identifier> = <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> )