Maybe package:sbv

Symbolic option type, symbolic version of Haskell's Maybe type.
Case analysis for symbolic Maybes. If the value isNothing, return the default value; if it isJust, apply the function.
>>> sat $ \x -> x .== maybe 0 (`sMod` 2) (sJust (3 :: SInteger))
Satisfiable. Model:
s0 = 1 :: Integer

>>> sat $ \x -> x .== maybe 0 (`sMod` 2) (sNothing :: SMaybe Integer)
Satisfiable. Model:
s0 = 0 :: Integer

>>> let f = uninterpret "f" :: SInteger -> SBool

>>> prove $ \x d -> maybe d f (sJust x) .== f x
Q.E.D.

>>> prove $ \d -> maybe d f sNothing .== d
Q.E.D.
Symbolic version of the type Maybe.
Declare a symbolic maybe.
Declare a symbolic maybe, unnamed.
Declare a list of symbolic maybes.
Return the value of an optional value. The default is returned if Nothing. Compare to fromJust.
>>> fromMaybe 2 (sNothing :: SMaybe Integer)
2 :: SInteger

>>> sat $ \x -> fromMaybe 2 (sJust 5 :: SMaybe Integer) .== x
Satisfiable. Model:
s0 = 5 :: Integer

>>> prove $ \x -> fromMaybe x (sNothing :: SMaybe Integer) .== x
Q.E.D.

>>> prove $ \x -> fromMaybe (x+1) (sJust x :: SMaybe Integer) .== x
Q.E.D.
Construct an SMaybe a from a Maybe (SBV a).
>>> liftMaybe (Just (3 :: SInteger))
Just 3 :: Maybe Integer

>>> liftMaybe (Nothing :: Maybe SInteger)
Nothing :: Maybe Integer