{-# OPTIONS_GHC -Wall -Werror #-}
module Documentation.SBV.Examples.Misc.ProgramPaths where
import Data.SBV
d1 :: SInteger -> SInteger -> SInteger
d1 :: SInteger -> SInteger -> SInteger
d1 SInteger
x SInteger
y = SBool -> SInteger -> SInteger -> SInteger
forall a. Mergeable a => SBool -> a -> a -> a
ite (SInteger
y SInteger -> SInteger -> SBool
forall a. OrdSymbolic a => a -> a -> SBool
.< SInteger
x SInteger -> SInteger -> SInteger
forall a. Num a => a -> a -> a
- SInteger
2) SInteger
7 SInteger
2
d2 :: SInteger -> SInteger
d2 :: SInteger -> SInteger
d2 SInteger
y = SBool -> SInteger -> SInteger -> SInteger
forall a. Mergeable a => SBool -> a -> a -> a
ite (SInteger
y SInteger -> SInteger -> SBool
forall a. OrdSymbolic a => a -> a -> SBool
.> SInteger
3) SInteger
10 SInteger
50
d3 :: SInteger -> SInteger -> SInteger
d3 :: SInteger -> SInteger -> SInteger
d3 SInteger
x SInteger
y = SBool -> SInteger -> SInteger -> SInteger
forall a. Mergeable a => SBool -> a -> a -> a
ite (SInteger
y SInteger -> SInteger -> SBool
forall a. OrdSymbolic a => a -> a -> SBool
.< -SInteger
x SInteger -> SInteger -> SInteger
forall a. Num a => a -> a -> a
+ SInteger
3) SInteger
100 SInteger
200
d4 :: SInteger -> SInteger -> SInteger
d4 :: SInteger -> SInteger -> SInteger
d4 SInteger
x SInteger
y = SInteger -> SInteger -> SInteger
d1 SInteger
x SInteger
y SInteger -> SInteger -> SInteger
forall a. Num a => a -> a -> a
+ SInteger -> SInteger
d2 SInteger
y SInteger -> SInteger -> SInteger
forall a. Num a => a -> a -> a
+ SInteger -> SInteger -> SInteger
d3 SInteger
x SInteger
y
paths :: IO AllSatResult
paths :: IO AllSatResult
paths = SymbolicT IO () -> IO AllSatResult
forall a. Satisfiable a => a -> IO AllSatResult
allSat (SymbolicT IO () -> IO AllSatResult)
-> SymbolicT IO () -> IO AllSatResult
forall a b. (a -> b) -> a -> b
$ do
x <- String -> Symbolic SInteger
sInteger String
"x"
y <- sInteger "y"
allSatPartition "r" $ d4 x y