Either package:sbv
Symbolic coproduct, symbolic version of Haskell's
Either type.
Case analysis for symbolic
Eithers. If the value
isLeft,
apply the first function; if it
isRight, apply the second
function.
>>> either (*2) (*3) (sLeft (3 :: SInteger))
6 :: SInteger
>>> either (*2) (*3) (sRight (3 :: SInteger))
9 :: SInteger
>>> let f = uninterpret "f" :: SInteger -> SInteger
>>> let g = uninterpret "g" :: SInteger -> SInteger
>>> prove $ \x -> either f g (sLeft x) .== f x
Q.E.D.
>>> prove $ \x -> either f g (sRight x) .== g x
Q.E.D.
Symbolic version of the type
Either.
Declare a symbolic maybe.
Declare a symbolic maybe, unnamed.
Declare a list of symbolic maybes.
Construct an
SEither a b from an
Either (SBV a) (SBV
b)
>>> liftEither (Left 3 :: Either SInteger SBool)
Left 3 :: Either Integer Bool
>>> liftEither (Right sTrue :: Either SInteger SBool)
Right True :: Either Integer Bool