Copyright | (c) Galois Inc 2014-2016 |
---|---|
License | BSD3 |
Maintainer | Joe Hendrix <jhendrix@galois.com> |
Safe Haskell | Safe-Inferred |
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 :: Type) (f :: CrucibleType -> Type) (tp :: CrucibleType) where
- ExtensionApp :: !(ExprExtension ext f tp) -> App ext f tp
- BaseIsEq :: !(BaseTypeRepr tp) -> !(f (BaseToType tp)) -> !(f (BaseToType tp)) -> App ext f BoolType
- BaseIte :: !(BaseTypeRepr tp) -> !(f BoolType) -> !(f (BaseToType tp)) -> !(f (BaseToType tp)) -> App ext f (BaseToType tp)
- EmptyApp :: App ext f UnitType
- PackAny :: !(TypeRepr tp) -> !(f tp) -> App ext f AnyType
- UnpackAny :: !(TypeRepr tp) -> !(f AnyType) -> App ext f (MaybeType tp)
- BoolLit :: !Bool -> App ext f BoolType
- Not :: !(f BoolType) -> App ext f BoolType
- And :: !(f BoolType) -> !(f BoolType) -> App ext f BoolType
- Or :: !(f BoolType) -> !(f BoolType) -> App ext f BoolType
- BoolXor :: !(f BoolType) -> !(f BoolType) -> App ext f BoolType
- NatLit :: !Natural -> App ext f NatType
- NatEq :: !(f NatType) -> !(f NatType) -> App ext f BoolType
- NatIte :: !(f BoolType) -> !(f NatType) -> !(f NatType) -> App ext f NatType
- NatLt :: !(f NatType) -> !(f NatType) -> App ext f BoolType
- NatLe :: !(f NatType) -> !(f NatType) -> App ext f BoolType
- NatAdd :: !(f NatType) -> !(f NatType) -> App ext f NatType
- NatSub :: !(f NatType) -> !(f NatType) -> App ext f NatType
- NatMul :: !(f NatType) -> !(f NatType) -> App ext f NatType
- NatDiv :: !(f NatType) -> !(f NatType) -> App ext f NatType
- NatMod :: !(f NatType) -> !(f NatType) -> App ext f NatType
- IntLit :: !Integer -> App ext f IntegerType
- IntLt :: !(f IntegerType) -> !(f IntegerType) -> App ext f BoolType
- IntLe :: !(f IntegerType) -> !(f IntegerType) -> App ext f BoolType
- IntNeg :: !(f IntegerType) -> App ext f IntegerType
- IntAdd :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType
- IntSub :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType
- IntMul :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType
- IntDiv :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType
- IntMod :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType
- IntAbs :: !(f IntegerType) -> App ext f IntegerType
- RationalLit :: !Rational -> App ext f RealValType
- RealLt :: !(f RealValType) -> !(f RealValType) -> App ext f BoolType
- RealLe :: !(f RealValType) -> !(f RealValType) -> App ext f BoolType
- RealNeg :: !(f RealValType) -> App ext f RealValType
- RealAdd :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType
- RealSub :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType
- RealMul :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType
- RealDiv :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType
- RealMod :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType
- RealIsInteger :: !(f RealValType) -> App ext f BoolType
- FloatUndef :: !(FloatInfoRepr fi) -> App ext f (FloatType fi)
- FloatLit :: !Float -> App ext f (FloatType SingleFloat)
- DoubleLit :: !Double -> App ext f (FloatType DoubleFloat)
- X86_80Lit :: !X86_80Val -> App ext f (FloatType X86_80Float)
- FloatNaN :: !(FloatInfoRepr fi) -> App ext f (FloatType fi)
- FloatPInf :: !(FloatInfoRepr fi) -> App ext f (FloatType fi)
- FloatNInf :: !(FloatInfoRepr fi) -> App ext f (FloatType fi)
- FloatPZero :: !(FloatInfoRepr fi) -> App ext f (FloatType fi)
- FloatNZero :: !(FloatInfoRepr fi) -> App ext f (FloatType fi)
- FloatNeg :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatAbs :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatSqrt :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatAdd :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatSub :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatMul :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatDiv :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatRem :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatMin :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatMax :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatFMA :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatEq :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatFpEq :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatGt :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatGe :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatLt :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatLe :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatNe :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatFpApart :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType
- FloatIte :: !(FloatInfoRepr fi) -> !(f BoolType) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi)
- FloatCast :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi')) -> App ext f (FloatType fi)
- FloatFromBinary :: !(FloatInfoRepr fi) -> !(f (BVType (FloatInfoToBitWidth fi))) -> App ext f (FloatType fi)
- FloatToBinary :: 1 <= FloatInfoToBitWidth fi => !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (BVType (FloatInfoToBitWidth fi))
- FloatFromBV :: 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f (FloatType fi)
- FloatFromSBV :: 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f (FloatType fi)
- FloatFromReal :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f RealValType) -> App ext f (FloatType fi)
- FloatToBV :: 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f (BVType w)
- FloatToSBV :: 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f (BVType w)
- FloatToReal :: !(f (FloatType fi)) -> App ext f RealValType
- FloatIsNaN :: !(f (FloatType fi)) -> App ext f BoolType
- FloatIsInfinite :: !(f (FloatType fi)) -> App ext f BoolType
- FloatIsZero :: !(f (FloatType fi)) -> App ext f BoolType
- FloatIsPositive :: !(f (FloatType fi)) -> App ext f BoolType
- FloatIsNegative :: !(f (FloatType fi)) -> App ext f BoolType
- FloatIsSubnormal :: !(f (FloatType fi)) -> App ext f BoolType
- FloatIsNormal :: !(f (FloatType fi)) -> App ext f BoolType
- JustValue :: !(TypeRepr tp) -> !(f tp) -> App ext f (MaybeType tp)
- NothingValue :: !(TypeRepr tp) -> App ext f (MaybeType tp)
- FromJustValue :: !(TypeRepr tp) -> !(f (MaybeType tp)) -> !(f (StringType Unicode)) -> App ext f tp
- RollRecursive :: IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (UnrollType nm ctx)) -> App ext f (RecursiveType nm ctx)
- UnrollRecursive :: IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (RecursiveType nm ctx)) -> App ext f (UnrollType nm ctx)
- SequenceNil :: !(TypeRepr tp) -> App ext f (SequenceType tp)
- SequenceCons :: !(TypeRepr tp) -> !(f tp) -> !(f (SequenceType tp)) -> App ext f (SequenceType tp)
- SequenceAppend :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> !(f (SequenceType tp)) -> App ext f (SequenceType tp)
- SequenceIsNil :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f BoolType
- SequenceLength :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f NatType
- SequenceHead :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f (MaybeType tp)
- SequenceTail :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f (MaybeType (SequenceType tp))
- SequenceUncons :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f (MaybeType (StructType ((EmptyCtx ::> tp) ::> SequenceType tp)))
- VectorLit :: !(TypeRepr tp) -> !(Vector (f tp)) -> App ext f (VectorType tp)
- VectorReplicate :: !(TypeRepr tp) -> !(f NatType) -> !(f tp) -> App ext f (VectorType tp)
- VectorIsEmpty :: !(f (VectorType tp)) -> App ext f BoolType
- VectorSize :: !(f (VectorType tp)) -> App ext f NatType
- VectorGetEntry :: !(TypeRepr tp) -> !(f (VectorType tp)) -> !(f NatType) -> App ext f tp
- VectorSetEntry :: !(TypeRepr tp) -> !(f (VectorType tp)) -> !(f NatType) -> !(f tp) -> App ext f (VectorType tp)
- VectorCons :: !(TypeRepr tp) -> !(f tp) -> !(f (VectorType tp)) -> App ext f (VectorType tp)
- HandleLit :: !(FnHandle args ret) -> App ext f (FunctionHandleType args ret)
- Closure :: !(CtxRepr args) -> !(TypeRepr ret) -> !(f (FunctionHandleType (args ::> tp) ret)) -> !(TypeRepr tp) -> !(f tp) -> App ext f (FunctionHandleType args ret)
- NatToInteger :: !(f NatType) -> App ext f IntegerType
- IntegerToReal :: !(f IntegerType) -> App ext f RealValType
- RealRound :: !(f RealValType) -> App ext f IntegerType
- RealFloor :: !(f RealValType) -> App ext f IntegerType
- RealCeil :: !(f RealValType) -> App ext f IntegerType
- IntegerToBV :: 1 <= w => NatRepr w -> !(f IntegerType) -> App ext f (BVType w)
- RealToNat :: !(f RealValType) -> App ext f NatType
- Complex :: !(f RealValType) -> !(f RealValType) -> App ext f ComplexRealType
- RealPart :: !(f ComplexRealType) -> App ext f RealValType
- ImagPart :: !(f ComplexRealType) -> App ext f RealValType
- BVUndef :: 1 <= w => NatRepr w -> App ext f (BVType w)
- BVLit :: 1 <= w => NatRepr w -> BV w -> App ext f (BVType w)
- BVConcat :: (1 <= u, 1 <= v, 1 <= (u + v)) => !(NatRepr u) -> !(NatRepr v) -> !(f (BVType u)) -> !(f (BVType v)) -> App ext f (BVType (u + v))
- BVSelect :: (1 <= w, 1 <= len, (idx + len) <= w) => !(NatRepr idx) -> !(NatRepr len) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType len)
- BVTrunc :: (1 <= r, (r + 1) <= w) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType r)
- BVZext :: (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType r)
- BVSext :: (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType r)
- BVNot :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w)
- BVAnd :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVOr :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVXor :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVNeg :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w)
- BVAdd :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVSub :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVMul :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVUdiv :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVSdiv :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVUrem :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVSrem :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVUle :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVUlt :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVSle :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVSlt :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVCarry :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVSCarry :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVSBorrow :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType
- BVShl :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVLshr :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVAshr :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVRol :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVRor :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVCountLeadingZeros :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w)
- BVCountTrailingZeros :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w)
- BVPopcount :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w)
- BVUMin :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVUMax :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVSMin :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BVSMax :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w)
- BoolToBV :: 1 <= w => !(NatRepr w) -> !(f BoolType) -> App ext f (BVType w)
- BvToInteger :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f IntegerType
- SbvToInteger :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f IntegerType
- BvToNat :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f NatType
- BVNonzero :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f BoolType
- EmptyWordMap :: 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp) -> App ext f (WordMapType w tp)
- InsertWordMap :: 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp) -> !(f (BVType w)) -> !(f (BaseToType tp)) -> !(f (WordMapType w tp)) -> App ext f (WordMapType w tp)
- LookupWordMap :: 1 <= w => !(BaseTypeRepr tp) -> !(f (BVType w)) -> !(f (WordMapType w tp)) -> App ext f (BaseToType tp)
- LookupWordMapWithDefault :: 1 <= w => !(BaseTypeRepr tp) -> !(f (BVType w)) -> !(f (WordMapType w tp)) -> !(f (BaseToType tp)) -> App ext f (BaseToType tp)
- InjectVariant :: !(CtxRepr ctx) -> !(Index ctx tp) -> !(f tp) -> App ext f (VariantType ctx)
- ProjectVariant :: !(CtxRepr ctx) -> !(Index ctx tp) -> !(f (VariantType ctx)) -> App ext f (MaybeType tp)
- MkStruct :: !(CtxRepr ctx) -> !(Assignment f ctx) -> App ext f (StructType ctx)
- GetStruct :: !(f (StructType ctx)) -> !(Index ctx tp) -> !(TypeRepr tp) -> App ext f tp
- SetStruct :: !(CtxRepr ctx) -> !(f (StructType ctx)) -> !(Index ctx tp) -> !(f tp) -> App ext f (StructType ctx)
- EmptyStringMap :: !(TypeRepr tp) -> App ext f (StringMapType tp)
- LookupStringMapEntry :: !(TypeRepr tp) -> !(f (StringMapType tp)) -> !(f (StringType Unicode)) -> App ext f (MaybeType tp)
- InsertStringMapEntry :: !(TypeRepr tp) -> !(f (StringMapType tp)) -> !(f (StringType Unicode)) -> !(f (MaybeType tp)) -> App ext f (StringMapType tp)
- StringLit :: !(StringLiteral si) -> App ext f (StringType si)
- StringEmpty :: !(StringInfoRepr si) -> App ext f (StringType si)
- StringConcat :: !(StringInfoRepr si) -> !(f (StringType si)) -> !(f (StringType si)) -> App ext f (StringType si)
- StringLength :: !(f (StringType si)) -> App ext f IntegerType
- StringContains :: !(f (StringType si)) -> !(f (StringType si)) -> App ext f BoolType
- StringIsPrefixOf :: !(f (StringType si)) -> !(f (StringType si)) -> App ext f BoolType
- StringIsSuffixOf :: !(f (StringType si)) -> !(f (StringType si)) -> App ext f BoolType
- StringIndexOf :: !(f (StringType si)) -> !(f (StringType si)) -> !(f IntegerType) -> App ext f IntegerType
- StringSubstring :: !(StringInfoRepr si) -> !(f (StringType si)) -> !(f IntegerType) -> !(f IntegerType) -> App ext f (StringType si)
- ShowValue :: !(BaseTypeRepr bt) -> !(f (BaseToType bt)) -> App ext f (StringType Unicode)
- ShowFloat :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (StringType Unicode)
- SymArrayLookup :: !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> tp) b)) -> !(Assignment (BaseTerm f) (idx ::> tp)) -> App ext f (BaseToType b)
- SymArrayUpdate :: !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> itp) b)) -> !(Assignment (BaseTerm f) (idx ::> itp)) -> !(f (BaseToType b)) -> App ext f (SymbolicArrayType (idx ::> itp) b)
- IsConcrete :: !(BaseTypeRepr b) -> f (BaseToType b) -> App ext f BoolType
- ReferenceEq :: !(TypeRepr tp) -> !(f (ReferenceType tp)) -> !(f (ReferenceType tp)) -> App ext f BoolType
- mapApp :: TraversableFC (ExprExtension ext) => (forall u. f u -> g u) -> App ext f tp -> App ext g tp
- foldApp :: TraversableFC (ExprExtension ext) => (forall x. f x -> r -> r) -> r -> App ext f tp -> r
- traverseApp :: forall ext m f g tp. (TraversableFC (ExprExtension ext), Applicative m) => (forall u. f u -> m (g u)) -> App ext f tp -> m (App ext g tp)
- pattern BoolEq :: () => tp ~ BoolType => f BoolType -> f BoolType -> App ext f tp
- pattern IntEq :: () => tp ~ BoolType => f IntegerType -> f IntegerType -> App ext f tp
- pattern RealEq :: () => tp ~ BoolType => f RealValType -> f RealValType -> App ext f tp
- pattern BVEq :: () => (1 <= w, tp ~ BoolType) => NatRepr w -> f (BVType w) -> f (BVType w) -> App ext f tp
- pattern BoolIte :: () => tp ~ BoolType => f BoolType -> f tp -> f tp -> App ext f tp
- pattern IntIte :: () => tp ~ IntegerType => f BoolType -> f tp -> f tp -> App ext f tp
- pattern RealIte :: () => tp ~ RealValType => f BoolType -> f tp -> f tp -> App ext f tp
- pattern BVIte :: () => (1 <= w, tp ~ BVType w) => f BoolType -> NatRepr w -> f tp -> f tp -> App ext f tp
- data BaseTerm (f :: CrucibleType -> Type) tp = BaseTerm {
- baseTermType :: !(BaseTypeRepr tp)
- baseTermVal :: !(f (BaseToType tp))
- module Lang.Crucible.CFG.Extension
- data RoundingMode
- testVector :: (forall x y. f x -> f y -> Maybe (x :~: y)) -> Vector (f tp) -> Vector (f tp) -> Maybe (Int :~: Int)
- compareVector :: forall f tp. (forall x y. f x -> f y -> OrderingF x y) -> Vector (f tp) -> Vector (f tp) -> OrderingF Int Int
App
data App (ext :: Type) (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 :: !(ExprExtension ext f tp) -> App ext f tp | |
BaseIsEq :: !(BaseTypeRepr tp) -> !(f (BaseToType tp)) -> !(f (BaseToType tp)) -> App ext f BoolType | Return true if two base types are equal. |
BaseIte :: !(BaseTypeRepr tp) -> !(f BoolType) -> !(f (BaseToType tp)) -> !(f (BaseToType tp)) -> App ext f (BaseToType tp) | Select one or other |
EmptyApp :: App ext f UnitType | |
PackAny :: !(TypeRepr tp) -> !(f tp) -> App ext f AnyType | |
UnpackAny :: !(TypeRepr tp) -> !(f AnyType) -> App ext f (MaybeType tp) | |
BoolLit :: !Bool -> App ext f BoolType | |
Not :: !(f BoolType) -> App ext f BoolType | |
And :: !(f BoolType) -> !(f BoolType) -> App ext f BoolType | |
Or :: !(f BoolType) -> !(f BoolType) -> App ext f BoolType | |
BoolXor :: !(f BoolType) -> !(f BoolType) -> App ext f BoolType | |
NatLit :: !Natural -> App ext f NatType | |
NatEq :: !(f NatType) -> !(f NatType) -> App ext f BoolType | |
NatIte :: !(f BoolType) -> !(f NatType) -> !(f NatType) -> App ext f NatType | |
NatLt :: !(f NatType) -> !(f NatType) -> App ext f BoolType | |
NatLe :: !(f NatType) -> !(f NatType) -> App ext f BoolType | |
NatAdd :: !(f NatType) -> !(f NatType) -> App ext f NatType | |
NatSub :: !(f NatType) -> !(f NatType) -> App ext f NatType | |
NatMul :: !(f NatType) -> !(f NatType) -> App ext f NatType | |
NatDiv :: !(f NatType) -> !(f NatType) -> App ext f NatType | |
NatMod :: !(f NatType) -> !(f NatType) -> App ext f NatType | |
IntLit :: !Integer -> App ext f IntegerType | |
IntLt :: !(f IntegerType) -> !(f IntegerType) -> App ext f BoolType | |
IntLe :: !(f IntegerType) -> !(f IntegerType) -> App ext f BoolType | |
IntNeg :: !(f IntegerType) -> App ext f IntegerType | |
IntAdd :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType | |
IntSub :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType | |
IntMul :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType | |
IntDiv :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType | |
IntMod :: !(f IntegerType) -> !(f IntegerType) -> App ext f IntegerType | |
IntAbs :: !(f IntegerType) -> App ext f IntegerType | |
RationalLit :: !Rational -> App ext f RealValType | |
RealLt :: !(f RealValType) -> !(f RealValType) -> App ext f BoolType | |
RealLe :: !(f RealValType) -> !(f RealValType) -> App ext f BoolType | |
RealNeg :: !(f RealValType) -> App ext f RealValType | |
RealAdd :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType | |
RealSub :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType | |
RealMul :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType | |
RealDiv :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType | |
RealMod :: !(f RealValType) -> !(f RealValType) -> App ext f RealValType | |
RealIsInteger :: !(f RealValType) -> App ext f BoolType | |
FloatUndef :: !(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 :: !Float -> App ext f (FloatType SingleFloat) | |
DoubleLit :: !Double -> App ext f (FloatType DoubleFloat) | |
X86_80Lit :: !X86_80Val -> App ext f (FloatType X86_80Float) | |
FloatNaN :: !(FloatInfoRepr fi) -> App ext f (FloatType fi) | |
FloatPInf :: !(FloatInfoRepr fi) -> App ext f (FloatType fi) | |
FloatNInf :: !(FloatInfoRepr fi) -> App ext f (FloatType fi) | |
FloatPZero :: !(FloatInfoRepr fi) -> App ext f (FloatType fi) | |
FloatNZero :: !(FloatInfoRepr fi) -> App ext f (FloatType fi) | |
FloatNeg :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatAbs :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatSqrt :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatAdd :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatSub :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatMul :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatDiv :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatRem :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatMin :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatMax :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatFMA :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatEq :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatFpEq :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatGt :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatGe :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatLt :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatLe :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatNe :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatFpApart :: !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f BoolType | |
FloatIte :: !(FloatInfoRepr fi) -> !(f BoolType) -> !(f (FloatType fi)) -> !(f (FloatType fi)) -> App ext f (FloatType fi) | |
FloatCast :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f (FloatType fi')) -> App ext f (FloatType fi) | |
FloatFromBinary :: !(FloatInfoRepr fi) -> !(f (BVType (FloatInfoToBitWidth fi))) -> App ext f (FloatType fi) | |
FloatToBinary :: 1 <= FloatInfoToBitWidth fi => !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (BVType (FloatInfoToBitWidth fi)) | |
FloatFromBV :: 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f (FloatType fi) | |
FloatFromSBV :: 1 <= w => !(FloatInfoRepr fi) -> !RoundingMode -> !(f (BVType w)) -> App ext f (FloatType fi) | |
FloatFromReal :: !(FloatInfoRepr fi) -> !RoundingMode -> !(f RealValType) -> App ext f (FloatType fi) | |
FloatToBV :: 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f (BVType w) | |
FloatToSBV :: 1 <= w => !(NatRepr w) -> !RoundingMode -> !(f (FloatType fi)) -> App ext f (BVType w) | |
FloatToReal :: !(f (FloatType fi)) -> App ext f RealValType | |
FloatIsNaN :: !(f (FloatType fi)) -> App ext f BoolType | |
FloatIsInfinite :: !(f (FloatType fi)) -> App ext f BoolType | |
FloatIsZero :: !(f (FloatType fi)) -> App ext f BoolType | |
FloatIsPositive :: !(f (FloatType fi)) -> App ext f BoolType | |
FloatIsNegative :: !(f (FloatType fi)) -> App ext f BoolType | |
FloatIsSubnormal :: !(f (FloatType fi)) -> App ext f BoolType | |
FloatIsNormal :: !(f (FloatType fi)) -> App ext f BoolType | |
JustValue :: !(TypeRepr tp) -> !(f tp) -> App ext f (MaybeType tp) | |
NothingValue :: !(TypeRepr tp) -> App ext f (MaybeType tp) | |
FromJustValue :: !(TypeRepr tp) -> !(f (MaybeType tp)) -> !(f (StringType Unicode)) -> App ext f tp | |
RollRecursive :: IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (UnrollType nm ctx)) -> App ext f (RecursiveType nm ctx) | |
UnrollRecursive :: IsRecursiveType nm => !(SymbolRepr nm) -> !(CtxRepr ctx) -> !(f (RecursiveType nm ctx)) -> App ext f (UnrollType nm ctx) | |
SequenceNil :: !(TypeRepr tp) -> App ext f (SequenceType tp) | |
SequenceCons :: !(TypeRepr tp) -> !(f tp) -> !(f (SequenceType tp)) -> App ext f (SequenceType tp) | |
SequenceAppend :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> !(f (SequenceType tp)) -> App ext f (SequenceType tp) | |
SequenceIsNil :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f BoolType | |
SequenceLength :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f NatType | |
SequenceHead :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f (MaybeType tp) | |
SequenceTail :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f (MaybeType (SequenceType tp)) | |
SequenceUncons :: !(TypeRepr tp) -> !(f (SequenceType tp)) -> App ext f (MaybeType (StructType ((EmptyCtx ::> tp) ::> SequenceType tp))) | |
VectorLit :: !(TypeRepr tp) -> !(Vector (f tp)) -> App ext f (VectorType tp) | |
VectorReplicate :: !(TypeRepr tp) -> !(f NatType) -> !(f tp) -> App ext f (VectorType tp) | |
VectorIsEmpty :: !(f (VectorType tp)) -> App ext f BoolType | |
VectorSize :: !(f (VectorType tp)) -> App ext f NatType | |
VectorGetEntry :: !(TypeRepr tp) -> !(f (VectorType tp)) -> !(f NatType) -> App ext f tp | |
VectorSetEntry :: !(TypeRepr tp) -> !(f (VectorType tp)) -> !(f NatType) -> !(f tp) -> App ext f (VectorType tp) | |
VectorCons :: !(TypeRepr tp) -> !(f tp) -> !(f (VectorType tp)) -> App ext f (VectorType tp) | |
HandleLit :: !(FnHandle args ret) -> App ext f (FunctionHandleType args ret) | |
Closure :: !(CtxRepr args) -> !(TypeRepr ret) -> !(f (FunctionHandleType (args ::> tp) ret)) -> !(TypeRepr tp) -> !(f tp) -> App ext f (FunctionHandleType args ret) | |
NatToInteger :: !(f NatType) -> App ext f IntegerType | |
IntegerToReal :: !(f IntegerType) -> App ext f RealValType | |
RealRound :: !(f RealValType) -> App ext f IntegerType | |
RealFloor :: !(f RealValType) -> App ext f IntegerType | |
RealCeil :: !(f RealValType) -> App ext f IntegerType | |
IntegerToBV :: 1 <= w => NatRepr w -> !(f IntegerType) -> App ext f (BVType w) | |
RealToNat :: !(f RealValType) -> App ext f NatType | |
Complex :: !(f RealValType) -> !(f RealValType) -> App ext f ComplexRealType | |
RealPart :: !(f ComplexRealType) -> App ext f RealValType | |
ImagPart :: !(f ComplexRealType) -> App ext f RealValType | |
BVUndef :: 1 <= w => NatRepr w -> App ext f (BVType w) | Generate an "undefined" bitvector value. The semantics of this construct are still under discussion, see crucible#366. |
BVLit :: 1 <= w => NatRepr w -> BV w -> App ext f (BVType w) | |
BVConcat :: (1 <= u, 1 <= v, 1 <= (u + v)) => !(NatRepr u) -> !(NatRepr v) -> !(f (BVType u)) -> !(f (BVType v)) -> App ext f (BVType (u + v)) | |
BVSelect :: (1 <= w, 1 <= len, (idx + len) <= w) => !(NatRepr idx) -> !(NatRepr len) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType len) | |
BVTrunc :: (1 <= r, (r + 1) <= w) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType r) | |
BVZext :: (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType r) | |
BVSext :: (1 <= w, 1 <= r, (w + 1) <= r) => !(NatRepr r) -> !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType r) | |
BVNot :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVAnd :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVOr :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVXor :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVNeg :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVAdd :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVSub :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVMul :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVUdiv :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVSdiv :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType 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 :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVSrem :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVUle :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVUlt :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVSle :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVSlt :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVCarry :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVSCarry :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVSBorrow :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f BoolType | |
BVShl :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVLshr :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVAshr :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVRol :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVRor :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVCountLeadingZeros :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVCountTrailingZeros :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVPopcount :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVUMin :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVUMax :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVSMin :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BVSMax :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> !(f (BVType w)) -> App ext f (BVType w) | |
BoolToBV :: 1 <= w => !(NatRepr w) -> !(f BoolType) -> App ext f (BVType w) | |
BvToInteger :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f IntegerType | |
SbvToInteger :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f IntegerType | |
BvToNat :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f NatType | |
BVNonzero :: 1 <= w => !(NatRepr w) -> !(f (BVType w)) -> App ext f BoolType | |
EmptyWordMap :: 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp) -> App ext f (WordMapType w tp) | |
InsertWordMap :: 1 <= w => !(NatRepr w) -> !(BaseTypeRepr tp) -> !(f (BVType w)) -> !(f (BaseToType tp)) -> !(f (WordMapType w tp)) -> App ext f (WordMapType w tp) | |
LookupWordMap :: 1 <= w => !(BaseTypeRepr tp) -> !(f (BVType w)) -> !(f (WordMapType w tp)) -> App ext f (BaseToType tp) | |
LookupWordMapWithDefault :: 1 <= w => !(BaseTypeRepr tp) -> !(f (BVType w)) -> !(f (WordMapType w tp)) -> !(f (BaseToType tp)) -> App ext f (BaseToType tp) | |
InjectVariant :: !(CtxRepr ctx) -> !(Index ctx tp) -> !(f tp) -> App ext f (VariantType ctx) | |
ProjectVariant :: !(CtxRepr ctx) -> !(Index ctx tp) -> !(f (VariantType ctx)) -> App ext f (MaybeType tp) | |
MkStruct :: !(CtxRepr ctx) -> !(Assignment f ctx) -> App ext f (StructType ctx) | |
GetStruct :: !(f (StructType ctx)) -> !(Index ctx tp) -> !(TypeRepr tp) -> App ext f tp | |
SetStruct :: !(CtxRepr ctx) -> !(f (StructType ctx)) -> !(Index ctx tp) -> !(f tp) -> App ext f (StructType ctx) | |
EmptyStringMap :: !(TypeRepr tp) -> App ext f (StringMapType tp) | |
LookupStringMapEntry :: !(TypeRepr tp) -> !(f (StringMapType tp)) -> !(f (StringType Unicode)) -> App ext f (MaybeType tp) | |
InsertStringMapEntry :: !(TypeRepr tp) -> !(f (StringMapType tp)) -> !(f (StringType Unicode)) -> !(f (MaybeType tp)) -> App ext f (StringMapType tp) | |
StringLit :: !(StringLiteral si) -> App ext f (StringType si) | |
StringEmpty :: !(StringInfoRepr si) -> App ext f (StringType si) | |
StringConcat :: !(StringInfoRepr si) -> !(f (StringType si)) -> !(f (StringType si)) -> App ext f (StringType si) | |
StringLength :: !(f (StringType si)) -> App ext f IntegerType | |
StringContains :: !(f (StringType si)) -> !(f (StringType si)) -> App ext f BoolType | |
StringIsPrefixOf :: !(f (StringType si)) -> !(f (StringType si)) -> App ext f BoolType | |
StringIsSuffixOf :: !(f (StringType si)) -> !(f (StringType si)) -> App ext f BoolType | |
StringIndexOf :: !(f (StringType si)) -> !(f (StringType si)) -> !(f IntegerType) -> App ext f IntegerType | |
StringSubstring :: !(StringInfoRepr si) -> !(f (StringType si)) -> !(f IntegerType) -> !(f IntegerType) -> App ext f (StringType si) | |
ShowValue :: !(BaseTypeRepr bt) -> !(f (BaseToType bt)) -> App ext f (StringType Unicode) | |
ShowFloat :: !(FloatInfoRepr fi) -> !(f (FloatType fi)) -> App ext f (StringType Unicode) | |
SymArrayLookup :: !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> tp) b)) -> !(Assignment (BaseTerm f) (idx ::> tp)) -> App ext f (BaseToType b) | |
SymArrayUpdate :: !(BaseTypeRepr b) -> !(f (SymbolicArrayType (idx ::> itp) b)) -> !(Assignment (BaseTerm f) (idx ::> itp)) -> !(f (BaseToType b)) -> App ext f (SymbolicArrayType (idx ::> itp) b) | |
IsConcrete :: !(BaseTypeRepr b) -> f (BaseToType b) -> App ext f BoolType | |
ReferenceEq :: !(TypeRepr tp) -> !(f (ReferenceType tp)) -> !(f (ReferenceType tp)) -> App ext f BoolType |
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 :: k). f x -> m) -> forall (x :: l). App ext f x -> m # foldrFC :: (forall (x :: k). f x -> b -> b) -> forall (x :: l). b -> App ext f x -> b # foldlFC :: forall f b. (forall (x :: k). b -> f x -> b) -> forall (x :: l). b -> App ext f x -> b # foldrFC' :: (forall (x :: k). f x -> b -> b) -> forall (x :: l). b -> App ext f x -> b # foldlFC' :: forall f b. (forall (x :: k). b -> f x -> b) -> forall (x :: l). b -> App ext f x -> b # toListFC :: (forall (x :: k). f x -> a) -> forall (x :: l). App ext f x -> [a] # | |
TraversableFC (ExprExtension ext) => FunctorFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr | |
OrdFC (ExprExtension ext) => OrdFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
TestEqualityFC (ExprExtension ext) => TestEqualityFC (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr | |
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 :: k). f x -> m (g x)) -> forall (x :: l). App ext f x -> m (App ext g x) # | |
PrettyApp (ExprExtension ext) => PrettyApp (App ext :: (CrucibleType -> Type) -> CrucibleType -> Type) Source # | |
(TestEqualityFC (ExprExtension ext), TestEquality f) => TestEquality (App ext f :: CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr | |
(OrdFC (ExprExtension ext), OrdF f) => OrdF (App ext f :: CrucibleType -> Type) Source # | |
Defined in Lang.Crucible.CFG.Expr Methods compareF :: forall (x :: k) (y :: k). App ext f x -> App ext f y -> OrderingF x y # leqF :: forall (x :: k) (y :: k). App ext f x -> App ext f y -> Bool # ltF :: forall (x :: k) (y :: k). App ext f x -> App ext f y -> Bool # geqF :: forall (x :: k) (y :: k). App ext f x -> App ext f y -> Bool # gtF :: forall (x :: k) (y :: k). 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 :: TraversableFC (ExprExtension ext) => (forall u. 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 :: TraversableFC (ExprExtension ext) => (forall x. f x -> r -> r) -> r -> App ext f tp -> r Source #
Fold over an application.
traverseApp :: forall ext m f g tp. (TraversableFC (ExprExtension ext), Applicative m) => (forall u. 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 :: () => tp ~ BoolType => f BoolType -> f BoolType -> App ext f tp Source #
Equality on booleans
pattern IntEq :: () => tp ~ BoolType => f IntegerType -> f IntegerType -> App ext f tp Source #
Equality on integers
pattern RealEq :: () => tp ~ BoolType => f RealValType -> f RealValType -> App ext f tp Source #
Equality on real numbers.
pattern BVEq :: () => (1 <= w, tp ~ BoolType) => NatRepr w -> f (BVType w) -> f (BVType w) -> App ext f tp Source #
Equality on bitvectors
pattern BoolIte :: () => tp ~ BoolType => f BoolType -> f tp -> f tp -> App ext f tp Source #
Return first or second value depending on condition.
pattern IntIte :: () => tp ~ IntegerType => f BoolType -> f tp -> f tp -> App ext f tp Source #
Return first or second value depending on condition.
pattern RealIte :: () => tp ~ RealValType => f BoolType -> f tp -> f tp -> App ext f tp Source #
Return first or second number depending on condition.
pattern BVIte :: () => (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 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 :: k). f x -> m) -> forall (x :: l). BaseTerm f x -> m # foldrFC :: (forall (x :: k). f x -> b -> b) -> forall (x :: l). b -> BaseTerm f x -> b # foldlFC :: forall f b. (forall (x :: k). b -> f x -> b) -> forall (x :: l). b -> BaseTerm f x -> b # foldrFC' :: (forall (x :: k). f x -> b -> b) -> forall (x :: l). b -> BaseTerm f x -> b # foldlFC' :: forall f b. (forall (x :: k). b -> f x -> b) -> forall (x :: l). b -> BaseTerm f x -> b # toListFC :: (forall (x :: k). f x -> a) -> forall (x :: l). BaseTerm f x -> [a] # | |
FunctorFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr | |
OrdFC BaseTerm Source # | |
TestEqualityFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr | |
TraversableFC BaseTerm Source # | |
Defined in Lang.Crucible.CFG.Expr Methods traverseFC :: forall f g m. Applicative m => (forall (x :: k). f x -> m (g x)) -> forall (x :: l). 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 :: k) (y :: k). BaseTerm f x -> BaseTerm f y -> OrderingF x y # leqF :: forall (x :: k) (y :: k). BaseTerm f x -> BaseTerm f y -> Bool # ltF :: forall (x :: k) (y :: k). BaseTerm f x -> BaseTerm f y -> Bool # geqF :: forall (x :: k) (y :: k). BaseTerm f x -> BaseTerm f y -> Bool # gtF :: forall (x :: k) (y :: k). 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. |