| Copyright | (c) Galois Inc 2014-2016 |
|---|---|
| License | BSD3 |
| Maintainer | Joe Hendrix <jhendrix@galois.com> |
| Safe Haskell | None |
| Language | Haskell2010 |
Lang.Crucible.CFG.Expr
Contents
Description
Define the syntax of Crucible expressions. Expressions represent side-effect free computations that result in terms. The same expression language is used both for registerized CFGs (Lang.Crucible.CFG.Reg) and for the core SSA-form CFGs (Lang.Crucible.CFG.Core).
Evaluation of expressions is defined in module Lang.Crucible.Simulator.Evaluation.
Synopsis
- data App ext (f :: CrucibleType -> Type) (tp :: CrucibleType) where
- ExtensionApp :: forall ext (f :: CrucibleType -> Type) (tp :: CrucibleType). !(ExprExtension ext f tp) -> App ext f tp
- BaseIsEq :: forall (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr tp1) -> !(f (BaseToType tp1)) -> !(f (BaseToType tp1)) -> App ext f ('BaseToType BaseBoolType)
- BaseIte :: forall (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr tp1) -> !(f BoolType) -> !(f (BaseToType tp1)) -> !(f (BaseToType tp1)) -> App ext f ('BaseToType tp1)
- EmptyApp :: forall ext (f :: CrucibleType -> Type). App ext f 'UnitType
- PackAny :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> App ext f 'AnyType
- UnpackAny :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f AnyType) -> App ext f ('MaybeType tp1)
- BoolLit :: forall ext (f :: CrucibleType -> Type). !Bool -> App ext f ('BaseToType BaseBoolType)
- Not :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> App ext f ('BaseToType BaseBoolType)
- And :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f BoolType) -> App ext f ('BaseToType BaseBoolType)
- Or :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f BoolType) -> App ext f ('BaseToType BaseBoolType)
- BoolXor :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f BoolType) -> App ext f ('BaseToType BaseBoolType)
- NatLit :: forall ext (f :: CrucibleType -> Type). !Natural -> App ext f 'NatType
- NatEq :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f ('BaseToType BaseBoolType)
- NatIte :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f NatType) -> !(f NatType) -> App ext f 'NatType
- NatLt :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f ('BaseToType BaseBoolType)
- NatLe :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f ('BaseToType BaseBoolType)
- NatAdd :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType
- NatSub :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType
- NatMul :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType
- NatDiv :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType
- NatMod :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType
- IntLit :: forall ext (f :: CrucibleType -> Type). !Integer -> App ext f ('BaseToType BaseIntegerType)
- IntLt :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseBoolType)
- IntLe :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseBoolType)
- IntNeg :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- IntAdd :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- IntSub :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- IntMul :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- IntDiv :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- IntMod :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- IntAbs :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- RationalLit :: forall ext (f :: CrucibleType -> Type). !Rational -> App ext f ('BaseToType BaseRealType)
- RealLt :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseBoolType)
- RealLe :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseBoolType)
- RealNeg :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseRealType)
- RealAdd :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType)
- RealSub :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType)
- RealMul :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType)
- RealDiv :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType)
- RealMod :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType)
- RealIsInteger :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseBoolType)
- FloatUndef :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi)
- FloatLit :: forall ext (f :: CrucibleType -> Type). !Float -> App ext f ('FloatType SingleFloat)
- DoubleLit :: forall ext (f :: CrucibleType -> Type). !Double -> App ext f ('FloatType DoubleFloat)
- X86_80Lit :: forall ext (f :: CrucibleType -> Type). !X86_80Val -> App ext f ('FloatType X86_80Float)
- FloatNaN :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi)
- FloatPInf :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi)
- FloatNInf :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi)
- FloatPZero :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi)
- FloatNZero :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi)
- FloatNeg :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatAbs :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatSqrt :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatAdd :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatSub :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatMul :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatDiv :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatRem :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatMin :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatMax :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatFMA :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatEq :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatFpEq :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatGt :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatGe :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatLt :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatLe :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatNe :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatFpApart :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIte :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f BoolType) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi)
- FloatCast :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) (fi' :: FloatInfo) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi')) -> App ext f ('FloatType fi)
- FloatFromBinary :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (BVType (FloatInfoToBitWidth fi))) -> App ext f ('FloatType fi)
- FloatToBinary :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= FloatInfoToBitWidth fi => !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseBVType (FloatInfoToBitWidth fi)))
- FloatFromBV :: forall (w :: Natural) (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f ('FloatType fi)
- FloatFromSBV :: forall (w :: Natural) (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f ('FloatType fi)
- FloatFromReal :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f RealValType) -> App ext f ('FloatType fi)
- FloatToBV :: forall (w :: Natural) (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseBVType w))
- FloatToSBV :: forall (w :: Natural) (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseBVType w))
- FloatToReal :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseRealType)
- FloatIsNaN :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIsInfinite :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIsZero :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIsPositive :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIsNegative :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIsSubnormal :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- FloatIsNormal :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType)
- JustValue :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> App ext f ('MaybeType tp1)
- NothingValue :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !(TypeRepr tp1) -> App ext f ('MaybeType tp1)
- FromJustValue :: forall (tp :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp) -> !(f (MaybeType tp)) -> !(f (StringType Unicode)) -> App ext f tp
- RollRecursive :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (UnrollType nm ctx)) -> App ext f ('RecursiveType nm ctx)
- UnrollRecursive :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (RecursiveType nm ctx)) -> App ext f (UnrollType nm ctx)
- SequenceNil :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !(TypeRepr tp1) -> App ext f ('SequenceType tp1)
- SequenceCons :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> !(f (SequenceType tp1)) -> App ext f ('SequenceType tp1)
- SequenceAppend :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> !(f (SequenceType tp1)) -> App ext f ('SequenceType tp1)
- SequenceIsNil :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('BaseToType BaseBoolType)
- SequenceLength :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f 'NatType
- SequenceHead :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('MaybeType tp1)
- SequenceTail :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('MaybeType (SequenceType tp1))
- SequenceUncons :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('MaybeType (StructType (((EmptyCtx :: Ctx CrucibleType) ::> tp1) ::> SequenceType tp1)))
- VectorLit :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(Vector (f tp1)) -> App ext f ('VectorType tp1)
- VectorReplicate :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f NatType) -> !(f tp1) -> App ext f ('VectorType tp1)
- VectorIsEmpty :: forall (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(f (VectorType tp1)) -> App ext f ('BaseToType BaseBoolType)
- VectorSize :: forall (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(f (VectorType tp1)) -> App ext f 'NatType
- VectorGetEntry :: forall (tp :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp) -> !(f (VectorType tp)) -> !(f NatType) -> App ext f tp
- VectorSetEntry :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (VectorType tp1)) -> !(f NatType) -> !(f tp1) -> App ext f ('VectorType tp1)
- VectorCons :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> !(f (VectorType tp1)) -> App ext f ('VectorType tp1)
- HandleLit :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) ext (f :: CrucibleType -> Type). !(FnHandle args ret) -> App ext f ('FunctionHandleType args ret)
- Closure :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(CtxRepr args) -> !(TypeRepr ret) -> !(f (FunctionHandleType (args ::> tp1) ret)) -> !(TypeRepr tp1) -> !(f tp1) -> App ext f ('FunctionHandleType args ret)
- NatToInteger :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> App ext f ('BaseToType BaseIntegerType)
- IntegerToReal :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> App ext f ('BaseToType BaseRealType)
- RealRound :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseIntegerType)
- RealFloor :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseIntegerType)
- RealCeil :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseIntegerType)
- IntegerToBV :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => NatRepr w -> !(f IntegerType) -> App ext f ('BaseToType (BaseBVType w))
- RealToNat :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f 'NatType
- Complex :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseComplexType)
- RealPart :: forall (f :: CrucibleType -> Type) ext. !(f ComplexRealType) -> App ext f ('BaseToType BaseRealType)
- ImagPart :: forall (f :: CrucibleType -> Type) ext. !(f ComplexRealType) -> App ext f ('BaseToType BaseRealType)
- BVUndef :: forall (w :: Natural) ext (f :: CrucibleType -> Type). 1 <= w => NatRepr w -> App ext f ('BaseToType (BaseBVType w))
- BVLit :: forall (w :: Natural) ext (f :: CrucibleType -> Type). 1 <= w => NatRepr w -> BV w -> App ext f ('BaseToType (BaseBVType w))
- BVConcat :: forall (u :: Natural) (v :: Natural) (f :: CrucibleType -> Type) ext. (1 <= u, 1 <= v, 1 <= (u + v)) => !(NatRepr u) -> !(NatRepr v) -> !(f (BVType u)) -> !(f (BVType v)) -> App ext f ('BaseToType (BaseBVType (u + v)))
- BVSelect :: forall (w :: Natural) (len :: Natural) (idx :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= len, (idx + len) <= w) => !(NatRepr idx) -> !(NatRepr len) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType len))
- BVTrunc :: forall (r :: Natural) (w :: Natural) (f :: CrucibleType -> Type) ext. (1 <= r, (r + 1) <= w) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType r))
- BVZext :: forall (w :: Natural) (r :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType r))
- BVSext :: forall (w :: Natural) (r :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType r))
- BVNot :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVAnd :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVOr :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVXor :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVNeg :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVAdd :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVSub :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVMul :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVUdiv :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVSdiv :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVUrem :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVSrem :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVUle :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVUlt :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVSle :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVSlt :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVCarry :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVSCarry :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVSBorrow :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- BVShl :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVLshr :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVAshr :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVRol :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVRor :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVCountLeadingZeros :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVCountTrailingZeros :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVPopcount :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVUMin :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVUMax :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVSMin :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BVSMax :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w))
- BoolToBV :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f BoolType) -> App ext f ('BaseToType (BaseBVType w))
- BvToInteger :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType BaseIntegerType)
- SbvToInteger :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType BaseIntegerType)
- BvToNat :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f 'NatType
- BVNonzero :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType)
- EmptyWordMap :: forall (w :: Natural) (tp1 :: BaseType) ext (f :: CrucibleType -> Type). 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp1) -> App ext f ('WordMapType w tp1)
- InsertWordMap :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp1) -> !(f (BVType w)) -> !(f (BaseToType tp1)) -> !(f (WordMapType w tp1)) -> App ext f ('WordMapType w tp1)
- LookupWordMap :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !(BaseTypeRepr tp1) -> !(f (BVType w)) -> !(f (WordMapType w tp1)) -> App ext f ('BaseToType tp1)
- LookupWordMapWithDefault :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !(BaseTypeRepr tp1) -> !(f (BVType w)) -> !(f (WordMapType w tp1)) -> !(f (BaseToType tp1)) -> App ext f ('BaseToType tp1)
- InjectVariant :: forall (ctx :: Ctx CrucibleType) (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(CtxRepr ctx) -> !(Index ctx tp1) -> !(f tp1) -> App ext f ('VariantType ctx)
- ProjectVariant :: forall (ctx :: Ctx CrucibleType) (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(CtxRepr ctx) -> !(Index ctx tp1) -> !(f (VariantType ctx)) -> App ext f ('MaybeType tp1)
- MkStruct :: forall (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. !(CtxRepr ctx) -> !(Assignment f ctx) -> App ext f ('StructType ctx)
- GetStruct :: forall (f :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) ext. !(f (StructType ctx)) -> !(Index ctx tp) -> !(TypeRepr tp) -> App ext f tp
- SetStruct :: forall (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(CtxRepr ctx) -> !(f (StructType ctx)) -> !(Index ctx tp1) -> !(f tp1) -> App ext f ('StructType ctx)
- EmptyStringMap :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !(TypeRepr tp1) -> App ext f ('StringMapType tp1)
- LookupStringMapEntry :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (StringMapType tp1)) -> !(f (StringType Unicode)) -> App ext f ('MaybeType tp1)
- InsertStringMapEntry :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (StringMapType tp1)) -> !(f (StringType Unicode)) -> !(f (MaybeType tp1)) -> App ext f ('StringMapType tp1)
- StringLit :: forall (si :: StringInfo) ext (f :: CrucibleType -> Type). !(StringLiteral si) -> App ext f ('BaseToType (BaseStringType si))
- StringEmpty :: forall (si :: StringInfo) ext (f :: CrucibleType -> Type). !(StringInfoRepr si) -> App ext f ('BaseToType (BaseStringType si))
- StringConcat :: forall (si :: StringInfo) (f :: CrucibleType -> Type) ext. !(StringInfoRepr si) -> !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType (BaseStringType si))
- StringLength :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> App ext f ('BaseToType BaseIntegerType)
- StringContains :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType BaseBoolType)
- StringIsPrefixOf :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType BaseBoolType)
- StringIsSuffixOf :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType BaseBoolType)
- StringIndexOf :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType)
- StringSubstring :: forall (si :: StringInfo) (f :: CrucibleType -> Type) ext. !(StringInfoRepr si) -> !(f (StringType si)) -> !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType (BaseStringType si))
- ShowValue :: forall (bt :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr bt) -> !(f (BaseToType bt)) -> App ext f ('BaseToType (BaseStringType Unicode))
- ShowFloat :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseStringType Unicode))
- SymArrayLookup :: forall (b :: BaseType) (f :: CrucibleType -> Type) (idx :: Ctx BaseType) (tp1 :: BaseType) ext. !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> tp1) b)) -> !(Assignment (BaseTerm f) (idx ::> tp1)) -> App ext f ('BaseToType b)
- SymArrayUpdate :: forall (b :: BaseType) (f :: CrucibleType -> Type) (idx :: Ctx BaseType) (itp :: BaseType) ext. !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> itp) b)) -> !(Assignment (BaseTerm f) (idx ::> itp)) -> !(f (BaseToType b)) -> App ext f ('BaseToType (BaseArrayType (idx ::> itp) b))
- IsConcrete :: forall (b :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr b) -> f (BaseToType b) -> App ext f ('BaseToType BaseBoolType)
- ReferenceEq :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (ReferenceType tp1)) -> !(f (ReferenceType tp1)) -> App ext f ('BaseToType BaseBoolType)
- mapApp :: forall ext f g (tp :: CrucibleType). TraversableFC (ExprExtension ext) => (forall (u :: CrucibleType). f u -> g u) -> App ext f tp -> App ext g tp
- foldApp :: forall ext f r (tp :: CrucibleType). TraversableFC (ExprExtension ext) => (forall (x :: CrucibleType). f x -> r -> r) -> r -> App ext f tp -> r
- traverseApp :: forall ext m f g (tp :: CrucibleType). (TraversableFC (ExprExtension ext), Applicative m) => (forall (u :: CrucibleType). f u -> m (g u)) -> App ext f tp -> m (App ext g tp)
- pattern BoolEq :: forall tp f ext. () => tp ~ BoolType => f BoolType -> f BoolType -> App ext f tp
- pattern IntEq :: forall tp f ext. () => tp ~ BoolType => f IntegerType -> f IntegerType -> App ext f tp
- pattern RealEq :: forall tp f ext. () => tp ~ BoolType => f RealValType -> f RealValType -> App ext f tp
- pattern BVEq :: forall tp f ext (w :: Natural). () => (1 <= w, tp ~ BoolType) => NatRepr w -> f (BVType w) -> f (BVType w) -> App ext f tp
- pattern BoolIte :: forall tp f ext. () => tp ~ BoolType => f BoolType -> f tp -> f tp -> App ext f tp
- pattern IntIte :: forall tp f ext. () => tp ~ IntegerType => f BoolType -> f tp -> f tp -> App ext f tp
- pattern RealIte :: forall tp f ext. () => tp ~ RealValType => f BoolType -> f tp -> f tp -> App ext f tp
- pattern BVIte :: forall tp f ext (w :: Natural). () => (1 <= w, tp ~ BVType w) => f BoolType -> NatRepr w -> f tp -> f tp -> App ext f tp
- data BaseTerm (f :: CrucibleType -> Type) (tp :: BaseType) = BaseTerm {
- baseTermType :: !(BaseTypeRepr tp)
- baseTermVal :: !(f (BaseToType tp))
- module Lang.Crucible.CFG.Extension
- data RoundingMode
- testVector :: forall {k} f (tp :: k). (forall (x :: k) (y :: k). f x -> f y -> Maybe (x :~: y)) -> Vector (f tp) -> Vector (f tp) -> Maybe (Int :~: Int)
- compareVector :: forall {k} f (tp :: k). (forall (x :: k) (y :: k). f x -> f y -> OrderingF x y) -> Vector (f tp) -> Vector (f tp) -> OrderingF Int Int
App
data App ext (f :: CrucibleType -> Type) (tp :: CrucibleType) where Source #
The main Crucible expression datastructure, defined as a
multisorted algebra. Type encodes the top-level
application of a Crucible expression. The parameter App ext f tpext is used
to indicate which syntax extension is being used via the
ExprExtension type family. The type parameter tp is a
type index that indicates the Crucible type of the values denoted
by the given expression form. Parameter f is used everywhere a
recursive sub-expression would go. Uses of the App type will
tie the knot through this parameter.
Constructors
| ExtensionApp :: forall ext (f :: CrucibleType -> Type) (tp :: CrucibleType). !(ExprExtension ext f tp) -> App ext f tp | |
| BaseIsEq :: forall (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr tp1) -> !(f (BaseToType tp1)) -> !(f (BaseToType tp1)) -> App ext f ('BaseToType BaseBoolType) | Return true if two base types are equal. |
| BaseIte :: forall (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr tp1) -> !(f BoolType) -> !(f (BaseToType tp1)) -> !(f (BaseToType tp1)) -> App ext f ('BaseToType tp1) | Select one or other |
| EmptyApp :: forall ext (f :: CrucibleType -> Type). App ext f 'UnitType | |
| PackAny :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> App ext f 'AnyType | |
| UnpackAny :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f AnyType) -> App ext f ('MaybeType tp1) | |
| BoolLit :: forall ext (f :: CrucibleType -> Type). !Bool -> App ext f ('BaseToType BaseBoolType) | |
| Not :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> App ext f ('BaseToType BaseBoolType) | |
| And :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f BoolType) -> App ext f ('BaseToType BaseBoolType) | |
| Or :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f BoolType) -> App ext f ('BaseToType BaseBoolType) | |
| BoolXor :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f BoolType) -> App ext f ('BaseToType BaseBoolType) | |
| NatLit :: forall ext (f :: CrucibleType -> Type). !Natural -> App ext f 'NatType | |
| NatEq :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f ('BaseToType BaseBoolType) | |
| NatIte :: forall (f :: CrucibleType -> Type) ext. !(f BoolType) -> !(f NatType) -> !(f NatType) -> App ext f 'NatType | |
| NatLt :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f ('BaseToType BaseBoolType) | |
| NatLe :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f ('BaseToType BaseBoolType) | |
| NatAdd :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType | |
| NatSub :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType | |
| NatMul :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType | |
| NatDiv :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType | |
| NatMod :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> !(f NatType) -> App ext f 'NatType | |
| IntLit :: forall ext (f :: CrucibleType -> Type). !Integer -> App ext f ('BaseToType BaseIntegerType) | |
| IntLt :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseBoolType) | |
| IntLe :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseBoolType) | |
| IntNeg :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntAdd :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntSub :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntMul :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntDiv :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntMod :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntAbs :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| RationalLit :: forall ext (f :: CrucibleType -> Type). !Rational -> App ext f ('BaseToType BaseRealType) | |
| RealLt :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseBoolType) | |
| RealLe :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseBoolType) | |
| RealNeg :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseRealType) | |
| RealAdd :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType) | |
| RealSub :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType) | |
| RealMul :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType) | |
| RealDiv :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType) | |
| RealMod :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseRealType) | |
| RealIsInteger :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseBoolType) | |
| FloatUndef :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi) | Generate an "undefined" float value. The semantics of this construct are still under discussion, see crucible#366. |
| FloatLit :: forall ext (f :: CrucibleType -> Type). !Float -> App ext f ('FloatType SingleFloat) | |
| DoubleLit :: forall ext (f :: CrucibleType -> Type). !Double -> App ext f ('FloatType DoubleFloat) | |
| X86_80Lit :: forall ext (f :: CrucibleType -> Type). !X86_80Val -> App ext f ('FloatType X86_80Float) | |
| FloatNaN :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi) | |
| FloatPInf :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi) | |
| FloatNInf :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi) | |
| FloatPZero :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi) | |
| FloatNZero :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !(FloatInfoRepr fi) -> App ext f ('FloatType fi) | |
| FloatNeg :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatAbs :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatSqrt :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatAdd :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatSub :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatMul :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatDiv :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatRem :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatMin :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatMax :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatFMA :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatEq :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatFpEq :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatGt :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatGe :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatLt :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatLe :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatNe :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatFpApart :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIte :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f BoolType) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f ('FloatType fi) | |
| FloatCast :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) (fi' :: FloatInfo) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi')) -> App ext f ('FloatType fi) | |
| FloatFromBinary :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (BVType (FloatInfoToBitWidth fi))) -> App ext f ('FloatType fi) | |
| FloatToBinary :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= FloatInfoToBitWidth fi => !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseBVType (FloatInfoToBitWidth fi))) | |
| FloatFromBV :: forall (w :: Natural) (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f ('FloatType fi) | |
| FloatFromSBV :: forall (w :: Natural) (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f ('FloatType fi) | |
| FloatFromReal :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !RoundingMode -> !(f RealValType) -> App ext f ('FloatType fi) | |
| FloatToBV :: forall (w :: Natural) (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseBVType w)) | |
| FloatToSBV :: forall (w :: Natural) (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseBVType w)) | |
| FloatToReal :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseRealType) | |
| FloatIsNaN :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIsInfinite :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIsZero :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIsPositive :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIsNegative :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIsSubnormal :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| FloatIsNormal :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !(f (FloatType fi)) -> App ext f ('BaseToType BaseBoolType) | |
| JustValue :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> App ext f ('MaybeType tp1) | |
| NothingValue :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !(TypeRepr tp1) -> App ext f ('MaybeType tp1) | |
| FromJustValue :: forall (tp :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp) -> !(f (MaybeType tp)) -> !(f (StringType Unicode)) -> App ext f tp | |
| RollRecursive :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (UnrollType nm ctx)) -> App ext f ('RecursiveType nm ctx) | |
| UnrollRecursive :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (RecursiveType nm ctx)) -> App ext f (UnrollType nm ctx) | |
| SequenceNil :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !(TypeRepr tp1) -> App ext f ('SequenceType tp1) | |
| SequenceCons :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> !(f (SequenceType tp1)) -> App ext f ('SequenceType tp1) | |
| SequenceAppend :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> !(f (SequenceType tp1)) -> App ext f ('SequenceType tp1) | |
| SequenceIsNil :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('BaseToType BaseBoolType) | |
| SequenceLength :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f 'NatType | |
| SequenceHead :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('MaybeType tp1) | |
| SequenceTail :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('MaybeType (SequenceType tp1)) | |
| SequenceUncons :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (SequenceType tp1)) -> App ext f ('MaybeType (StructType (((EmptyCtx :: Ctx CrucibleType) ::> tp1) ::> SequenceType tp1))) | |
| VectorLit :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(Vector (f tp1)) -> App ext f ('VectorType tp1) | |
| VectorReplicate :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f NatType) -> !(f tp1) -> App ext f ('VectorType tp1) | |
| VectorIsEmpty :: forall (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(f (VectorType tp1)) -> App ext f ('BaseToType BaseBoolType) | |
| VectorSize :: forall (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(f (VectorType tp1)) -> App ext f 'NatType | |
| VectorGetEntry :: forall (tp :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp) -> !(f (VectorType tp)) -> !(f NatType) -> App ext f tp | |
| VectorSetEntry :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (VectorType tp1)) -> !(f NatType) -> !(f tp1) -> App ext f ('VectorType tp1) | |
| VectorCons :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f tp1) -> !(f (VectorType tp1)) -> App ext f ('VectorType tp1) | |
| HandleLit :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) ext (f :: CrucibleType -> Type). !(FnHandle args ret) -> App ext f ('FunctionHandleType args ret) | |
| Closure :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(CtxRepr args) -> !(TypeRepr ret) -> !(f (FunctionHandleType (args ::> tp1) ret)) -> !(TypeRepr tp1) -> !(f tp1) -> App ext f ('FunctionHandleType args ret) | |
| NatToInteger :: forall (f :: CrucibleType -> Type) ext. !(f NatType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntegerToReal :: forall (f :: CrucibleType -> Type) ext. !(f IntegerType) -> App ext f ('BaseToType BaseRealType) | |
| RealRound :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseIntegerType) | |
| RealFloor :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseIntegerType) | |
| RealCeil :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f ('BaseToType BaseIntegerType) | |
| IntegerToBV :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => NatRepr w -> !(f IntegerType) -> App ext f ('BaseToType (BaseBVType w)) | |
| RealToNat :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> App ext f 'NatType | |
| Complex :: forall (f :: CrucibleType -> Type) ext. !(f RealValType) -> !(f RealValType) -> App ext f ('BaseToType BaseComplexType) | |
| RealPart :: forall (f :: CrucibleType -> Type) ext. !(f ComplexRealType) -> App ext f ('BaseToType BaseRealType) | |
| ImagPart :: forall (f :: CrucibleType -> Type) ext. !(f ComplexRealType) -> App ext f ('BaseToType BaseRealType) | |
| BVUndef :: forall (w :: Natural) ext (f :: CrucibleType -> Type). 1 <= w => NatRepr w -> App ext f ('BaseToType (BaseBVType w)) | Generate an "undefined" bitvector value. The semantics of this construct are still under discussion, see crucible#366. |
| BVLit :: forall (w :: Natural) ext (f :: CrucibleType -> Type). 1 <= w => NatRepr w -> BV w -> App ext f ('BaseToType (BaseBVType w)) | |
| BVConcat :: forall (u :: Natural) (v :: Natural) (f :: CrucibleType -> Type) ext. (1 <= u, 1 <= v, 1 <= (u + v)) => !(NatRepr u) -> !(NatRepr v) -> !(f (BVType u)) -> !(f (BVType v)) -> App ext f ('BaseToType (BaseBVType (u + v))) | |
| BVSelect :: forall (w :: Natural) (len :: Natural) (idx :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= len, (idx + len) <= w) => !(NatRepr idx) -> !(NatRepr len) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType len)) | |
| BVTrunc :: forall (r :: Natural) (w :: Natural) (f :: CrucibleType -> Type) ext. (1 <= r, (r + 1) <= w) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType r)) | |
| BVZext :: forall (w :: Natural) (r :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType r)) | |
| BVSext :: forall (w :: Natural) (r :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType r)) | |
| BVNot :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVAnd :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVOr :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVXor :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVNeg :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVAdd :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVSub :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVMul :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVUdiv :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVSdiv :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | This performs signed division. The result is truncated to zero. TODO: Document semantics when divisor is zero and case of minSigned w / -1 = minSigned w. |
| BVUrem :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVSrem :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVUle :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVUlt :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVSle :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVSlt :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVCarry :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVSCarry :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVSBorrow :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| BVShl :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVLshr :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVAshr :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVRol :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVRor :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVCountLeadingZeros :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVCountTrailingZeros :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVPopcount :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVUMin :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVUMax :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVSMin :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BVSMax :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f ('BaseToType (BaseBVType w)) | |
| BoolToBV :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f BoolType) -> App ext f ('BaseToType (BaseBVType w)) | |
| BvToInteger :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType BaseIntegerType) | |
| SbvToInteger :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType BaseIntegerType) | |
| BvToNat :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f 'NatType | |
| BVNonzero :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f ('BaseToType BaseBoolType) | |
| EmptyWordMap :: forall (w :: Natural) (tp1 :: BaseType) ext (f :: CrucibleType -> Type). 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp1) -> App ext f ('WordMapType w tp1) | |
| InsertWordMap :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp1) -> !(f (BVType w)) -> !(f (BaseToType tp1)) -> !(f (WordMapType w tp1)) -> App ext f ('WordMapType w tp1) | |
| LookupWordMap :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !(BaseTypeRepr tp1) -> !(f (BVType w)) -> !(f (WordMapType w tp1)) -> App ext f ('BaseToType tp1) | |
| LookupWordMapWithDefault :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !(BaseTypeRepr tp1) -> !(f (BVType w)) -> !(f (WordMapType w tp1)) -> !(f (BaseToType tp1)) -> App ext f ('BaseToType tp1) | |
| InjectVariant :: forall (ctx :: Ctx CrucibleType) (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(CtxRepr ctx) -> !(Index ctx tp1) -> !(f tp1) -> App ext f ('VariantType ctx) | |
| ProjectVariant :: forall (ctx :: Ctx CrucibleType) (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(CtxRepr ctx) -> !(Index ctx tp1) -> !(f (VariantType ctx)) -> App ext f ('MaybeType tp1) | |
| MkStruct :: forall (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. !(CtxRepr ctx) -> !(Assignment f ctx) -> App ext f ('StructType ctx) | |
| GetStruct :: forall (f :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) ext. !(f (StructType ctx)) -> !(Index ctx tp) -> !(TypeRepr tp) -> App ext f tp | |
| SetStruct :: forall (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !(CtxRepr ctx) -> !(f (StructType ctx)) -> !(Index ctx tp1) -> !(f tp1) -> App ext f ('StructType ctx) | |
| EmptyStringMap :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !(TypeRepr tp1) -> App ext f ('StringMapType tp1) | |
| LookupStringMapEntry :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (StringMapType tp1)) -> !(f (StringType Unicode)) -> App ext f ('MaybeType tp1) | |
| InsertStringMapEntry :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (StringMapType tp1)) -> !(f (StringType Unicode)) -> !(f (MaybeType tp1)) -> App ext f ('StringMapType tp1) | |
| StringLit :: forall (si :: StringInfo) ext (f :: CrucibleType -> Type). !(StringLiteral si) -> App ext f ('BaseToType (BaseStringType si)) | |
| StringEmpty :: forall (si :: StringInfo) ext (f :: CrucibleType -> Type). !(StringInfoRepr si) -> App ext f ('BaseToType (BaseStringType si)) | |
| StringConcat :: forall (si :: StringInfo) (f :: CrucibleType -> Type) ext. !(StringInfoRepr si) -> !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType (BaseStringType si)) | |
| StringLength :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> App ext f ('BaseToType BaseIntegerType) | |
| StringContains :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType BaseBoolType) | |
| StringIsPrefixOf :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType BaseBoolType) | |
| StringIsSuffixOf :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> App ext f ('BaseToType BaseBoolType) | |
| StringIndexOf :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !(f (StringType si)) -> !(f (StringType si)) -> !(f IntegerType) -> App ext f ('BaseToType BaseIntegerType) | |
| StringSubstring :: forall (si :: StringInfo) (f :: CrucibleType -> Type) ext. !(StringInfoRepr si) -> !(f (StringType si)) -> !(f IntegerType) -> !(f IntegerType) -> App ext f ('BaseToType (BaseStringType si)) | |
| ShowValue :: forall (bt :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr bt) -> !(f (BaseToType bt)) -> App ext f ('BaseToType (BaseStringType Unicode)) | |
| ShowFloat :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f ('BaseToType (BaseStringType Unicode)) | |
| SymArrayLookup :: forall (b :: BaseType) (f :: CrucibleType -> Type) (idx :: Ctx BaseType) (tp1 :: BaseType) ext. !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> tp1) b)) -> !(Assignment (BaseTerm f) (idx ::> tp1)) -> App ext f ('BaseToType b) | |
| SymArrayUpdate :: forall (b :: BaseType) (f :: CrucibleType -> Type) (idx :: Ctx BaseType) (itp :: BaseType) ext. !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> itp) b)) -> !(Assignment (BaseTerm f) (idx ::> itp)) -> !(f (BaseToType b)) -> App ext f ('BaseToType (BaseArrayType (idx ::> itp) b)) | |
| IsConcrete :: forall (b :: BaseType) (f :: CrucibleType -> Type) ext. !(BaseTypeRepr b) -> f (BaseToType b) -> App ext f ('BaseToType BaseBoolType) | |
| ReferenceEq :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !(TypeRepr tp1) -> !(f (ReferenceType tp1)) -> !(f (ReferenceType tp1)) -> App ext f ('BaseToType BaseBoolType) |
Instances
| TraversableFC (ExprExtension ext) => FoldableFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods foldMapFC :: forall f m. Monoid m => (forall (x :: CrucibleType). f x -> m) -> forall (x :: CrucibleType). App ext f x -> m # foldrFC :: (forall (x :: CrucibleType). f x -> b -> b) -> forall (x :: CrucibleType). b -> App ext f x -> b # foldlFC :: forall f b. (forall (x :: CrucibleType). b -> f x -> b) -> forall (x :: CrucibleType). b -> App ext f x -> b # foldrFC' :: (forall (x :: CrucibleType). f x -> b -> b) -> forall (x :: CrucibleType). b -> App ext f x -> b # foldlFC' :: forall f b. (forall (x :: CrucibleType). b -> f x -> b) -> forall (x :: CrucibleType). b -> App ext f x -> b # toListFC :: (forall (x :: CrucibleType). f x -> a) -> forall (x :: CrucibleType). App ext f x -> [a] # | |
| TraversableFC (ExprExtension ext) => FunctorFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods fmapFC :: (forall (x :: CrucibleType). f x -> g x) -> forall (x :: CrucibleType). App ext f x -> App ext g x # | |
| OrdFC (ExprExtension ext) => OrdFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods compareFC :: (forall (x :: CrucibleType) (y :: CrucibleType). f x -> f y -> OrderingF x y) -> forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> OrderingF x y # | |
| TestEqualityFC (ExprExtension ext) => TestEqualityFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods testEqualityFC :: (forall (x :: CrucibleType) (y :: CrucibleType). f x -> f y -> Maybe (x :~: y)) -> forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> Maybe (x :~: y) # | |
| TraversableFC (ExprExtension ext) => TraversableFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods traverseFC :: forall f g m. Applicative m => (forall (x :: CrucibleType). f x -> m (g x)) -> forall (x :: CrucibleType). App ext f x -> m (App ext g x) # | |
| PrettyApp (ExprExtension ext) => PrettyApp (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods ppApp :: (forall (x :: CrucibleType). f x -> Doc ann) -> forall (x :: CrucibleType). App ext f x -> Doc ann Source # | |
| (TestEqualityFC (ExprExtension ext), TestEquality f) => TestEquality (App ext f :: CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods testEquality :: forall (a :: CrucibleType) (b :: CrucibleType). App ext f a -> App ext f b -> Maybe (a :~: b) # | |
| (OrdFC (ExprExtension ext), OrdF f) => OrdF (App ext f :: CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods compareF :: forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> OrderingF x y # leqF :: forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> Bool # ltF :: forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> Bool # geqF :: forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> Bool # gtF :: forall (x :: CrucibleType) (y :: CrucibleType). App ext f x -> App ext f y -> Bool # | |
| TypeApp (ExprExtension ext) => TypeApp (App ext) Source # | Compute a run-time representation of the type of an application. |
Defined in Lang.Crucible.CFG.Expr Methods appType :: forall (f :: CrucibleType -> Type) (x :: CrucibleType). App ext f x -> TypeRepr x Source # | |
mapApp :: forall ext f g (tp :: CrucibleType). TraversableFC (ExprExtension ext) => (forall (u :: CrucibleType). f u -> g u) -> App ext f tp -> App ext g tp Source #
Map a Crucible-type-preserving function over the immediate subterms of an application.
foldApp :: forall ext f r (tp :: CrucibleType). TraversableFC (ExprExtension ext) => (forall (x :: CrucibleType). f x -> r -> r) -> r -> App ext f tp -> r Source #
Fold over an application.
traverseApp :: forall ext m f g (tp :: CrucibleType). (TraversableFC (ExprExtension ext), Applicative m) => (forall (u :: CrucibleType). f u -> m (g u)) -> App ext f tp -> m (App ext g tp) Source #
Traversal that performs the given action on each immediate
subterm of an application. Used for the TraversableFC instance.
pattern BoolEq :: forall tp f ext. () => tp ~ BoolType => f BoolType -> f BoolType -> App ext f tp Source #
Equality on booleans
pattern IntEq :: forall tp f ext. () => tp ~ BoolType => f IntegerType -> f IntegerType -> App ext f tp Source #
Equality on integers
pattern RealEq :: forall tp f ext. () => tp ~ BoolType => f RealValType -> f RealValType -> App ext f tp Source #
Equality on real numbers.
pattern BVEq :: forall tp f ext (w :: Natural). () => (1 <= w, tp ~ BoolType) => NatRepr w -> f (BVType w) -> f (BVType w) -> App ext f tp Source #
Equality on bitvectors
pattern BoolIte :: forall tp f ext. () => tp ~ BoolType => f BoolType -> f tp -> f tp -> App ext f tp Source #
Return first or second value depending on condition.
pattern IntIte :: forall tp f ext. () => tp ~ IntegerType => f BoolType -> f tp -> f tp -> App ext f tp Source #
Return first or second value depending on condition.
pattern RealIte :: forall tp f ext. () => tp ~ RealValType => f BoolType -> f tp -> f tp -> App ext f tp Source #
Return first or second number depending on condition.
pattern BVIte :: forall tp f ext (w :: Natural). () => (1 <= w, tp ~ BVType w) => f BoolType -> NatRepr w -> f tp -> f tp -> App ext f tp Source #
Return first or second value depending on condition.
Base terms
data BaseTerm (f :: CrucibleType -> Type) (tp :: BaseType) Source #
Base terms represent the subset of expressions of base types, packaged together with a run-time representation of their type.
Constructors
| BaseTerm | |
Fields
| |
Instances
| FoldableFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr Methods foldMapFC :: forall f m. Monoid m => (forall (x :: CrucibleType). f x -> m) -> forall (x :: BaseType). BaseTerm f x -> m # foldrFC :: (forall (x :: CrucibleType). f x -> b -> b) -> forall (x :: BaseType). b -> BaseTerm f x -> b # foldlFC :: forall f b. (forall (x :: CrucibleType). b -> f x -> b) -> forall (x :: BaseType). b -> BaseTerm f x -> b # foldrFC' :: (forall (x :: CrucibleType). f x -> b -> b) -> forall (x :: BaseType). b -> BaseTerm f x -> b # foldlFC' :: forall f b. (forall (x :: CrucibleType). b -> f x -> b) -> forall (x :: BaseType). b -> BaseTerm f x -> b # toListFC :: (forall (x :: CrucibleType). f x -> a) -> forall (x :: BaseType). BaseTerm f x -> [a] # | |
| FunctorFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr | |
| OrdFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr Methods compareFC :: (forall (x :: CrucibleType) (y :: CrucibleType). f x -> f y -> OrderingF x y) -> forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> OrderingF x y # | |
| TestEqualityFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr Methods testEqualityFC :: (forall (x :: CrucibleType) (y :: CrucibleType). f x -> f y -> Maybe (x :~: y)) -> forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> Maybe (x :~: y) # | |
| TraversableFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr Methods traverseFC :: forall f g m. Applicative m => (forall (x :: CrucibleType). f x -> m (g x)) -> forall (x :: BaseType). BaseTerm f x -> m (BaseTerm g x) # | |
| TestEquality f => TestEquality (BaseTerm f :: BaseType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr | |
| OrdF f => OrdF (BaseTerm f :: BaseType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods compareF :: forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> OrderingF x y # leqF :: forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> Bool # ltF :: forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> Bool # geqF :: forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> Bool # gtF :: forall (x :: BaseType) (y :: BaseType). BaseTerm f x -> BaseTerm f y -> Bool # | |
module Lang.Crucible.CFG.Extension
data RoundingMode #
Rounding modes for IEEE-754 floating point operations.
Constructors
| RNE | Round to nearest even. |
| RNA | Round to nearest away. |
| RTP | Round toward plus Infinity. |
| RTN | Round toward minus Infinity. |
| RTZ | Round toward zero. |