29.04.2014 Views

Presburger Arithmetic and Its Use in Verification

Presburger Arithmetic and Its Use in Verification

Presburger Arithmetic and Its Use in Verification

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!