sbv-8.7: SBVBenchSuite/BenchSuite/Uninterpreted/Multiply.hs
-----------------------------------------------------------------------------
-- |
-- Module : BenchSuite.Uninterpreted.Multiply
-- Copyright : (c) Jeffrey Young
-- Levent Erkok
-- License : BSD3
-- Maintainer: erkokl@gmail.com
-- Stability : experimental
--
-- Bench suite for Documentation.SBV.Examples.Uninterpreted.Multiply
-----------------------------------------------------------------------------
{-# OPTIONS_GHC -Wall -Werror #-}
{-# LANGUAGE ScopedTypeVariables #-}
module BenchSuite.Uninterpreted.Multiply(benchmarks) where
import Documentation.SBV.Examples.Uninterpreted.Multiply
import Data.SBV
import BenchSuite.Bench.Bench
benchmarks :: Runner
benchmarks = rGroup
[ run "synthMul22" synthMul22 `using` runner satWith
, run "Correctness" correct `using` runner proveWith
]
where
mul22_hi :: SBool -> SBool -> SBool -> SBool -> SBool
mul22_hi a1 a0 b1 b0 = ite ([a1, a0, b1, b0] .== [sFalse, sTrue , sTrue , sFalse]) sTrue
$ ite ([a1, a0, b1, b0] .== [sFalse, sTrue , sTrue , sTrue ]) sTrue
$ ite ([a1, a0, b1, b0] .== [sTrue , sFalse, sFalse, sTrue ]) sTrue
$ ite ([a1, a0, b1, b0] .== [sTrue , sFalse, sTrue , sTrue ]) sTrue
$ ite ([a1, a0, b1, b0] .== [sTrue , sTrue , sFalse, sTrue ]) sTrue
$ ite ([a1, a0, b1, b0] .== [sTrue , sTrue , sTrue , sFalse]) sTrue
sFalse
correct = \a1 a0 b1 b0 -> mul22_hi a1 a0 b1 b0 .== (a1 .&& b0) .<+> (a0 .&& b1)