Presburger Arithmetic and Its Use in Verification
Presburger Arithmetic and Its Use in Verification
Presburger Arithmetic and Its Use in Verification
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
B.5.<br />
COOPER.FS (EXCERPT)<br />
let evalSOr vr formula =<br />
if vr =[]then formula<br />
elif seqEval TT (genRangeArray vr) formula then TT else FF<br />
let eval formula =<br />
let rec evalUtil vr0 formula =<br />
match formula with<br />
| Not f −> f |> evalUtil vr0 |> Not<br />
| And fs −> fs |> List.map (evalUtil vr0) |>And<br />
| Or fs −> fs |> List.map (evalUtil vr0) |>Or<br />
| SAnd(f, vr) −> evalSAnd (vr@vr0) (evalUtil (vr@vr0) f)<br />
| SOr(f, vr) −> evalSOr (vr@vr0) (evalUtil (vr@vr0) f)<br />
| _ −> formula<br />
evalUtil [] formula<br />
// Parallel<br />
let pevalSAnd vr formula =<br />
if vr =[]then formula<br />
elif partitionBalanceEval FF (genRangeArray vr) formula then FF else TT<br />
let pevalSOr vr formula =<br />
if vr =[]then formula<br />
elif partitionBalanceEval TT (genRangeArray vr) formula then TT else FF<br />
let peval formula =<br />
let rec pevalUtil vr0 formula =<br />
match formula with<br />
| Not f −> f |> pevalUtil vr0 |> Not<br />
| And fs −> fs |> List.map (pevalUtil vr0) |>And<br />
| Or fs −> fs |> List.map (pevalUtil vr0) |>Or<br />
| SAnd(f, vr) −> pevalSAnd (vr@vr0) (pevalUtil (vr@vr0) f)<br />
| SOr(f, vr) −> pevalSOr (vr@vr0) (pevalUtil (vr@vr0) f)<br />
| _ −> formula<br />
pevalUtil [] formula<br />
85