Copyright | (c) Sirui Lu 2021-2024 |
---|---|
License | BSD-3-Clause (see the LICENSE file) |
Maintainer | siruilu@cs.washington.edu |
Stability | Experimental |
Portability | GHC only |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Grisette.Internal.SymPrim.Prim.Internal.Term
Description
Synopsis
- class SupportedPrimConstraint t where
- type PrimConstraint t :: Constraint
- class (Lift t, Typeable t, Hashable t, Eq t, Show t, NFData t, SupportedPrimConstraint t, SBVRep t) => SupportedPrim t where
- termCache :: Cache (Term t)
- pformatCon :: t -> String
- pformatSym :: TypedSymbol 'AnyKind t -> String
- defaultValue :: t
- defaultValueDynamic :: proxy t -> ModelValue
- pevalITETerm :: Term Bool -> Term t -> Term t -> Term t
- pevalEqTerm :: Term t -> Term t -> Term Bool
- pevalDistinctTerm :: NonEmpty (Term t) -> Term Bool
- conSBVTerm :: t -> SBVType t
- symSBVName :: TypedSymbol 'AnyKind t -> Int -> String
- symSBVTerm :: SBVFreshMonad m => String -> m (SBVType t)
- withPrim :: ((PrimConstraint t, SMTDefinable (SBVType t), Mergeable (SBVType t), Typeable (SBVType t)) => a) -> a
- sbvIte :: SBV Bool -> SBVType t -> SBVType t -> SBVType t
- sbvEq :: SBVType t -> SBVType t -> SBV Bool
- sbvDistinct :: NonEmpty (SBVType t) -> SBV Bool
- parseSMTModelResult :: Int -> ([([CV], CV)], CV) -> t
- castTypedSymbol :: IsSymbolKind knd' => TypedSymbol knd t -> Maybe (TypedSymbol knd' t)
- isFuncType :: Bool
- funcDummyConstraint :: SBVType t -> SBV Bool
- class SupportedPrim con => SymRep con where
- type SymType con
- class ConRep sym where
- type ConType sym
- class (ConRep sym, SymRep con, sym ~ SymType con, con ~ ConType sym) => LinkedRep con sym | con -> sym, sym -> con where
- underlyingTerm :: sym -> Term con
- wrapTerm :: Term con -> sym
- class (SupportedPrim arg, SupportedPrim t, Lift tag, NFData tag, Show tag, Typeable tag, Eq tag, Hashable tag) => UnaryOp tag arg t | tag arg -> t where
- pevalUnary :: (Typeable tag, Typeable t) => tag -> Term arg -> Term t
- pformatUnary :: tag -> Term arg -> String
- class (SupportedPrim arg1, SupportedPrim arg2, SupportedPrim t, Lift tag, NFData tag, Show tag, Typeable tag, Eq tag, Hashable tag) => BinaryOp tag arg1 arg2 t | tag arg1 arg2 -> t where
- pevalBinary :: (Typeable tag, Typeable t) => tag -> Term arg1 -> Term arg2 -> Term t
- pformatBinary :: tag -> Term arg1 -> Term arg2 -> String
- class (SupportedPrim arg1, SupportedPrim arg2, SupportedPrim arg3, SupportedPrim t, Lift tag, NFData tag, Show tag, Typeable tag, Eq tag, Hashable tag) => TernaryOp tag arg1 arg2 arg3 t | tag arg1 arg2 arg3 -> t where
- class (SupportedPrim f, SupportedPrim a, SupportedPrim b) => PEvalApplyTerm f a b | f -> a b where
- pevalApplyTerm :: Term f -> Term a -> Term b
- sbvApplyTerm :: SBVType f -> SBVType a -> SBVType b
- class (SupportedNonFuncPrim t, Bits t) => PEvalBitwiseTerm t where
- pevalAndBitsTerm :: Term t -> Term t -> Term t
- pevalOrBitsTerm :: Term t -> Term t -> Term t
- pevalXorBitsTerm :: Term t -> Term t -> Term t
- pevalComplementBitsTerm :: Term t -> Term t
- withSbvBitwiseTermConstraint :: (Bits (SBVType t) => r) -> r
- sbvAndBitsTerm :: SBVType t -> SBVType t -> SBVType t
- sbvOrBitsTerm :: SBVType t -> SBVType t -> SBVType t
- sbvXorBitsTerm :: SBVType t -> SBVType t -> SBVType t
- sbvComplementBitsTerm :: SBVType t -> SBVType t
- class (SupportedNonFuncPrim t, SymShift t) => PEvalShiftTerm t where
- pevalShiftLeftTerm :: Term t -> Term t -> Term t
- pevalShiftRightTerm :: Term t -> Term t -> Term t
- withSbvShiftTermConstraint :: (SIntegral (NonFuncSBVBaseType t) => r) -> r
- sbvShiftLeftTerm :: SBVType t -> SBVType t -> SBVType t
- sbvShiftRightTerm :: SBVType t -> SBVType t -> SBVType t
- class (SupportedNonFuncPrim t, SymRotate t) => PEvalRotateTerm t where
- pevalRotateLeftTerm :: Term t -> Term t -> Term t
- pevalRotateRightTerm :: Term t -> Term t -> Term t
- withSbvRotateTermConstraint :: (SIntegral (NonFuncSBVBaseType t) => r) -> r
- sbvRotateLeftTerm :: SBVType t -> SBVType t -> SBVType t
- sbvRotateRightTerm :: SBVType t -> SBVType t -> SBVType t
- class (SupportedNonFuncPrim t, Num t) => PEvalNumTerm t where
- pevalAddNumTerm :: Term t -> Term t -> Term t
- pevalNegNumTerm :: Term t -> Term t
- pevalMulNumTerm :: Term t -> Term t -> Term t
- pevalAbsNumTerm :: Term t -> Term t
- pevalSignumNumTerm :: Term t -> Term t
- withSbvNumTermConstraint :: (Num (SBVType t) => r) -> r
- sbvAddNumTerm :: SBVType t -> SBVType t -> SBVType t
- sbvNegNumTerm :: SBVType t -> SBVType t
- sbvMulNumTerm :: SBVType t -> SBVType t -> SBVType t
- sbvAbsNumTerm :: SBVType t -> SBVType t
- sbvSignumNumTerm :: SBVType t -> SBVType t
- pevalSubNumTerm :: PEvalNumTerm a => Term a -> Term a -> Term a
- class (SupportedNonFuncPrim t, Ord t) => PEvalOrdTerm t where
- pevalLtOrdTerm :: Term t -> Term t -> Term Bool
- pevalLeOrdTerm :: Term t -> Term t -> Term Bool
- withSbvOrdTermConstraint :: (OrdSymbolic (SBVType t) => r) -> r
- sbvLtOrdTerm :: SBVType t -> SBVType t -> SBV Bool
- sbvLeOrdTerm :: SBVType t -> SBVType t -> SBV Bool
- pevalGtOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool
- pevalGeOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool
- pevalNEqTerm :: SupportedPrim a => Term a -> Term a -> Term Bool
- class (SupportedNonFuncPrim t, Integral t) => PEvalDivModIntegralTerm t where
- pevalDivIntegralTerm :: Term t -> Term t -> Term t
- pevalModIntegralTerm :: Term t -> Term t -> Term t
- pevalQuotIntegralTerm :: Term t -> Term t -> Term t
- pevalRemIntegralTerm :: Term t -> Term t -> Term t
- withSbvDivModIntegralTermConstraint :: (SDivisible (SBVType t) => r) -> r
- sbvDivIntegralTerm :: SBVType t -> SBVType t -> SBVType t
- sbvModIntegralTerm :: SBVType t -> SBVType t -> SBVType t
- sbvQuotIntegralTerm :: SBVType t -> SBVType t -> SBVType t
- sbvRemIntegralTerm :: SBVType t -> SBVType t -> SBVType t
- class (SupportedNonFuncPrim a, SupportedNonFuncPrim b, BitCast a b) => PEvalBitCastTerm a b where
- pevalBitCastTerm :: Term a -> Term b
- sbvBitCast :: SBVType a -> SBVType b
- class (SupportedNonFuncPrim a, SupportedNonFuncPrim b, BitCastOr a b) => PEvalBitCastOrTerm a b where
- pevalBitCastOrTerm :: Term b -> Term a -> Term b
- sbvBitCastOr :: SBVType b -> SBVType a -> SBVType b
- class (forall n. (KnownNat n, 1 <= n) => SupportedNonFuncPrim (bv n), SizedBV bv, Typeable bv) => PEvalBVTerm bv where
- pevalBVConcatTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => Term (bv l) -> Term (bv r) -> Term (bv (l + r))
- pevalBVExtendTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => Bool -> proxy r -> Term (bv l) -> Term (bv r)
- pevalBVSelectTerm :: (KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => p ix -> q w -> Term (bv n) -> Term (bv w)
- sbvBVConcatTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => p1 l -> p2 r -> SBVType (bv l) -> SBVType (bv r) -> SBVType (bv (l + r))
- sbvBVExtendTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => p1 l -> p2 r -> Bool -> SBVType (bv l) -> SBVType (bv r)
- sbvBVSelectTerm :: (KnownNat ix, KnownNat w, KnownNat n, 1 <= n, 1 <= w, (ix + w) <= n) => p1 ix -> p2 w -> p3 n -> SBVType (bv n) -> SBVType (bv w)
- class (SupportedNonFuncPrim t, Fractional t) => PEvalFractionalTerm t where
- pevalFdivTerm :: Term t -> Term t -> Term t
- pevalRecipTerm :: Term t -> Term t
- withSbvFractionalTermConstraint :: (Fractional (SBVType t) => r) -> r
- sbvFdivTerm :: SBVType t -> SBVType t -> SBVType t
- sbvRecipTerm :: SBVType t -> SBVType t
- class SupportedNonFuncPrim t => PEvalFloatingTerm t where
- pevalFloatingUnaryTerm :: FloatingUnaryOp -> Term t -> Term t
- pevalPowerTerm :: Term t -> Term t -> Term t
- withSbvFloatingTermConstraint :: (Floating (SBVType t) => r) -> r
- sbvPowerTerm :: SBVType t -> SBVType t -> SBVType t
- sbvFloatingUnaryTerm :: FloatingUnaryOp -> SBVType t -> SBVType t
- class (SupportedNonFuncPrim a, SupportedNonFuncPrim b, Integral a, Num b) => PEvalFromIntegralTerm a b where
- pevalFromIntegralTerm :: Term a -> Term b
- sbvFromIntegralTerm :: SBVType a -> SBVType b
- class SupportedNonFuncPrim a => PEvalIEEEFPConvertibleTerm a where
- pevalFromFPOrTerm :: ValidFP eb sb => Term a -> Term FPRoundingMode -> Term (FP eb sb) -> Term a
- pevalToFPTerm :: ValidFP eb sb => Term FPRoundingMode -> Term a -> Term (FP eb sb)
- sbvFromFPOrTerm :: ValidFP eb sb => SBVType a -> SBVType FPRoundingMode -> SBVType (FP eb sb) -> SBVType a
- sbvToFPTerm :: ValidFP eb sb => SBVType FPRoundingMode -> SBVType a -> SBVType (FP eb sb)
- data SymbolKind
- data TypedSymbol (knd :: SymbolKind) t where
- TypedSymbol :: (SupportedPrim t, SymbolKindConstraint knd t, IsSymbolKind knd) => {..} -> TypedSymbol knd t
- type TypedConstantSymbol = TypedSymbol 'ConstantKind
- type TypedAnySymbol = TypedSymbol 'AnyKind
- data SomeTypedSymbol knd where
- SomeTypedSymbol :: forall knd t. TypeRep t -> TypedSymbol knd t -> SomeTypedSymbol knd
- type SomeTypedConstantSymbol = SomeTypedSymbol 'ConstantKind
- type SomeTypedAnySymbol = SomeTypedSymbol 'AnyKind
- class IsSymbolKind (ty :: SymbolKind) where
- type SymbolKindConstraint ty :: Type -> Constraint
- decideSymbolKind :: Either (ty :~~: 'ConstantKind) (ty :~~: 'AnyKind)
- showUntyped :: TypedSymbol knd t -> String
- withSymbolSupported :: TypedSymbol knd t -> (SupportedPrim t => a) -> a
- someTypedSymbol :: forall knd t. TypedSymbol knd t -> SomeTypedSymbol knd
- eqHeteroSymbol :: forall ta a tb b. TypedSymbol ta a -> TypedSymbol tb b -> Bool
- castSomeTypedSymbol :: IsSymbolKind knd' => SomeTypedSymbol knd -> Maybe (SomeTypedSymbol knd')
- withSymbolKind :: TypedSymbol knd t -> (IsSymbolKind knd => a) -> a
- data FPTrait
- data FPUnaryOp
- data FPBinaryOp
- data FPRoundingUnaryOp
- data FPRoundingBinaryOp
- data FloatingUnaryOp
- data Term t where
- ConTerm :: SupportedPrim t => !Id -> !t -> Term t
- SymTerm :: SupportedPrim t => !Id -> !(TypedSymbol 'AnyKind t) -> Term t
- ForallTerm :: SupportedNonFuncPrim t => !Id -> !(TypedSymbol 'ConstantKind t) -> !(Term Bool) -> Term Bool
- ExistsTerm :: SupportedNonFuncPrim t => !Id -> !(TypedSymbol 'ConstantKind t) -> !(Term Bool) -> Term Bool
- UnaryTerm :: UnaryOp tag arg t => !Id -> !tag -> !(Term arg) -> Term t
- BinaryTerm :: BinaryOp tag arg1 arg2 t => !Id -> !tag -> !(Term arg1) -> !(Term arg2) -> Term t
- TernaryTerm :: TernaryOp tag arg1 arg2 arg3 t => !Id -> !tag -> !(Term arg1) -> !(Term arg2) -> !(Term arg3) -> Term t
- NotTerm :: !Id -> !(Term Bool) -> Term Bool
- OrTerm :: !Id -> !(Term Bool) -> !(Term Bool) -> Term Bool
- AndTerm :: !Id -> !(Term Bool) -> !(Term Bool) -> Term Bool
- EqTerm :: SupportedNonFuncPrim t => !Id -> !(Term t) -> !(Term t) -> Term Bool
- DistinctTerm :: SupportedNonFuncPrim t => !Id -> !(NonEmpty (Term t)) -> Term Bool
- ITETerm :: SupportedPrim t => !Id -> !(Term Bool) -> !(Term t) -> !(Term t) -> Term t
- AddNumTerm :: PEvalNumTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- NegNumTerm :: PEvalNumTerm t => !Id -> !(Term t) -> Term t
- MulNumTerm :: PEvalNumTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- AbsNumTerm :: PEvalNumTerm t => !Id -> !(Term t) -> Term t
- SignumNumTerm :: PEvalNumTerm t => !Id -> !(Term t) -> Term t
- LtOrdTerm :: PEvalOrdTerm t => !Id -> !(Term t) -> !(Term t) -> Term Bool
- LeOrdTerm :: PEvalOrdTerm t => !Id -> !(Term t) -> !(Term t) -> Term Bool
- AndBitsTerm :: PEvalBitwiseTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- OrBitsTerm :: PEvalBitwiseTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- XorBitsTerm :: PEvalBitwiseTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- ComplementBitsTerm :: PEvalBitwiseTerm t => !Id -> !(Term t) -> Term t
- ShiftLeftTerm :: PEvalShiftTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- ShiftRightTerm :: PEvalShiftTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- RotateLeftTerm :: PEvalRotateTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- RotateRightTerm :: PEvalRotateTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- BitCastTerm :: PEvalBitCastTerm a b => !Id -> !(Term a) -> Term b
- BitCastOrTerm :: PEvalBitCastOrTerm a b => !Id -> !(Term b) -> !(Term a) -> Term b
- BVConcatTerm :: (PEvalBVTerm bv, KnownNat l, KnownNat r, KnownNat (l + r), 1 <= l, 1 <= r, 1 <= (l + r)) => !Id -> !(Term (bv l)) -> !(Term (bv r)) -> Term (bv (l + r))
- BVSelectTerm :: (PEvalBVTerm bv, KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => !Id -> !(TypeRep ix) -> !(TypeRep w) -> !(Term (bv n)) -> Term (bv w)
- BVExtendTerm :: (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => !Id -> !Bool -> !(TypeRep r) -> !(Term (bv l)) -> Term (bv r)
- ApplyTerm :: (SupportedPrim a, SupportedPrim b, SupportedPrim f, PEvalApplyTerm f a b) => !Id -> !(Term f) -> !(Term a) -> Term b
- DivIntegralTerm :: PEvalDivModIntegralTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- ModIntegralTerm :: PEvalDivModIntegralTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- QuotIntegralTerm :: PEvalDivModIntegralTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- RemIntegralTerm :: PEvalDivModIntegralTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- FPTraitTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => !Id -> !FPTrait -> !(Term (FP eb sb)) -> Term Bool
- FdivTerm :: PEvalFractionalTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- RecipTerm :: PEvalFractionalTerm t => !Id -> !(Term t) -> Term t
- FloatingUnaryTerm :: PEvalFloatingTerm t => !Id -> !FloatingUnaryOp -> !(Term t) -> Term t
- PowerTerm :: PEvalFloatingTerm t => !Id -> !(Term t) -> !(Term t) -> Term t
- FPUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => !Id -> !FPUnaryOp -> !(Term (FP eb sb)) -> Term (FP eb sb)
- FPBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => !Id -> !FPBinaryOp -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> Term (FP eb sb)
- FPRoundingUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !Id -> !FPRoundingUnaryOp -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> Term (FP eb sb)
- FPRoundingBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !Id -> !FPRoundingBinaryOp -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> Term (FP eb sb)
- FPFMATerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !Id -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> Term (FP eb sb)
- FromIntegralTerm :: PEvalFromIntegralTerm a b => !Id -> !(Term a) -> Term b
- FromFPOrTerm :: (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !Id -> !(Term a) -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> Term a
- ToFPTerm :: (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !Id -> !(Term FPRoundingMode) -> !(Term a) -> Proxy eb -> Proxy sb -> Term (FP eb sb)
- identity :: Term t -> Id
- identityWithTypeRep :: forall t. Term t -> (SomeTypeRep, Id)
- introSupportedPrimConstraint :: forall t a. Term t -> (SupportedPrim t => a) -> a
- pformatTerm :: forall t. SupportedPrim t => Term t -> String
- data UTerm t where
- UConTerm :: SupportedPrim t => !t -> UTerm t
- USymTerm :: SupportedPrim t => !(TypedSymbol 'AnyKind t) -> UTerm t
- UForallTerm :: SupportedNonFuncPrim t => !(TypedSymbol 'ConstantKind t) -> !(Term Bool) -> UTerm Bool
- UExistsTerm :: SupportedNonFuncPrim t => !(TypedSymbol 'ConstantKind t) -> !(Term Bool) -> UTerm Bool
- UUnaryTerm :: UnaryOp tag arg t => !tag -> !(Term arg) -> UTerm t
- UBinaryTerm :: BinaryOp tag arg1 arg2 t => !tag -> !(Term arg1) -> !(Term arg2) -> UTerm t
- UTernaryTerm :: TernaryOp tag arg1 arg2 arg3 t => !tag -> !(Term arg1) -> !(Term arg2) -> !(Term arg3) -> UTerm t
- UNotTerm :: !(Term Bool) -> UTerm Bool
- UOrTerm :: !(Term Bool) -> !(Term Bool) -> UTerm Bool
- UAndTerm :: !(Term Bool) -> !(Term Bool) -> UTerm Bool
- UEqTerm :: SupportedNonFuncPrim t => !(Term t) -> !(Term t) -> UTerm Bool
- UDistinctTerm :: SupportedNonFuncPrim t => !(NonEmpty (Term t)) -> UTerm Bool
- UITETerm :: SupportedPrim t => !(Term Bool) -> !(Term t) -> !(Term t) -> UTerm t
- UAddNumTerm :: PEvalNumTerm t => !(Term t) -> !(Term t) -> UTerm t
- UNegNumTerm :: PEvalNumTerm t => !(Term t) -> UTerm t
- UMulNumTerm :: PEvalNumTerm t => !(Term t) -> !(Term t) -> UTerm t
- UAbsNumTerm :: PEvalNumTerm t => !(Term t) -> UTerm t
- USignumNumTerm :: PEvalNumTerm t => !(Term t) -> UTerm t
- ULtOrdTerm :: PEvalOrdTerm t => !(Term t) -> !(Term t) -> UTerm Bool
- ULeOrdTerm :: PEvalOrdTerm t => !(Term t) -> !(Term t) -> UTerm Bool
- UAndBitsTerm :: PEvalBitwiseTerm t => !(Term t) -> !(Term t) -> UTerm t
- UOrBitsTerm :: PEvalBitwiseTerm t => !(Term t) -> !(Term t) -> UTerm t
- UXorBitsTerm :: PEvalBitwiseTerm t => !(Term t) -> !(Term t) -> UTerm t
- UComplementBitsTerm :: PEvalBitwiseTerm t => !(Term t) -> UTerm t
- UShiftLeftTerm :: PEvalShiftTerm t => !(Term t) -> !(Term t) -> UTerm t
- UShiftRightTerm :: PEvalShiftTerm t => !(Term t) -> !(Term t) -> UTerm t
- URotateLeftTerm :: PEvalRotateTerm t => !(Term t) -> !(Term t) -> UTerm t
- URotateRightTerm :: PEvalRotateTerm t => !(Term t) -> !(Term t) -> UTerm t
- UBitCastTerm :: PEvalBitCastTerm a b => !(Term a) -> UTerm b
- UBitCastOrTerm :: PEvalBitCastOrTerm a b => !(Term b) -> !(Term a) -> UTerm b
- UBVConcatTerm :: (PEvalBVTerm bv, KnownNat l, KnownNat r, KnownNat (l + r), 1 <= l, 1 <= r, 1 <= (l + r)) => !(Term (bv l)) -> !(Term (bv r)) -> UTerm (bv (l + r))
- UBVSelectTerm :: (PEvalBVTerm bv, KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => !(TypeRep ix) -> !(TypeRep w) -> !(Term (bv n)) -> UTerm (bv w)
- UBVExtendTerm :: (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => !Bool -> !(TypeRep r) -> !(Term (bv l)) -> UTerm (bv r)
- UApplyTerm :: (SupportedPrim a, SupportedPrim b, SupportedPrim f, PEvalApplyTerm f a b) => Term f -> Term a -> UTerm b
- UDivIntegralTerm :: PEvalDivModIntegralTerm t => !(Term t) -> !(Term t) -> UTerm t
- UModIntegralTerm :: PEvalDivModIntegralTerm t => !(Term t) -> !(Term t) -> UTerm t
- UQuotIntegralTerm :: PEvalDivModIntegralTerm t => !(Term t) -> !(Term t) -> UTerm t
- URemIntegralTerm :: PEvalDivModIntegralTerm t => !(Term t) -> !(Term t) -> UTerm t
- UFPTraitTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => !FPTrait -> !(Term (FP eb sb)) -> UTerm Bool
- UFdivTerm :: PEvalFractionalTerm t => !(Term t) -> !(Term t) -> UTerm t
- URecipTerm :: PEvalFractionalTerm t => !(Term t) -> UTerm t
- UFloatingUnaryTerm :: PEvalFloatingTerm t => !FloatingUnaryOp -> !(Term t) -> UTerm t
- UPowerTerm :: PEvalFloatingTerm t => !(Term t) -> !(Term t) -> UTerm t
- UFPUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => !FPUnaryOp -> !(Term (FP eb sb)) -> UTerm (FP eb sb)
- UFPBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => !FPBinaryOp -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> UTerm (FP eb sb)
- UFPRoundingUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !FPRoundingUnaryOp -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> UTerm (FP eb sb)
- UFPRoundingBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !FPRoundingBinaryOp -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> UTerm (FP eb sb)
- UFPFMATerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> !(Term (FP eb sb)) -> UTerm (FP eb sb)
- UFromIntegralTerm :: PEvalFromIntegralTerm a b => !(Term a) -> UTerm b
- UFromFPOrTerm :: (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim FPRoundingMode, SupportedPrim (FP eb sb)) => Term a -> !(Term FPRoundingMode) -> !(Term (FP eb sb)) -> UTerm a
- UToFPTerm :: (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim FPRoundingMode, SupportedPrim (FP eb sb)) => !(Term FPRoundingMode) -> !(Term a) -> Proxy eb -> Proxy sb -> UTerm (FP eb sb)
- prettyPrintTerm :: Term t -> Doc ann
- forallTerm :: (SupportedNonFuncPrim t, Typeable t) => TypedSymbol 'ConstantKind t -> Term Bool -> Term Bool
- existsTerm :: (SupportedNonFuncPrim t, Typeable t) => TypedSymbol 'ConstantKind t -> Term Bool -> Term Bool
- constructUnary :: forall tag arg t. (SupportedPrim t, UnaryOp tag arg t, Typeable tag, Typeable t, Show tag) => tag -> Term arg -> Term t
- constructBinary :: forall tag arg1 arg2 t. (SupportedPrim t, BinaryOp tag arg1 arg2 t, Typeable tag, Typeable t, Show tag) => tag -> Term arg1 -> Term arg2 -> Term t
- constructTernary :: forall tag arg1 arg2 arg3 t. (SupportedPrim t, TernaryOp tag arg1 arg2 arg3 t, Typeable tag, Typeable t, Show tag) => tag -> Term arg1 -> Term arg2 -> Term arg3 -> Term t
- conTerm :: (SupportedPrim t, Typeable t, Hashable t, Eq t, Show t) => t -> Term t
- symTerm :: forall t. (SupportedPrim t, Typeable t) => Symbol -> Term t
- ssymTerm :: (SupportedPrim t, Typeable t) => Identifier -> Term t
- isymTerm :: (SupportedPrim t, Typeable t) => Identifier -> Int -> Term t
- notTerm :: Term Bool -> Term Bool
- orTerm :: Term Bool -> Term Bool -> Term Bool
- andTerm :: Term Bool -> Term Bool -> Term Bool
- eqTerm :: SupportedNonFuncPrim a => Term a -> Term a -> Term Bool
- distinctTerm :: SupportedNonFuncPrim a => NonEmpty (Term a) -> Term Bool
- iteTerm :: SupportedPrim a => Term Bool -> Term a -> Term a -> Term a
- addNumTerm :: PEvalNumTerm a => Term a -> Term a -> Term a
- negNumTerm :: PEvalNumTerm a => Term a -> Term a
- mulNumTerm :: PEvalNumTerm a => Term a -> Term a -> Term a
- absNumTerm :: PEvalNumTerm a => Term a -> Term a
- signumNumTerm :: PEvalNumTerm a => Term a -> Term a
- ltOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool
- leOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool
- andBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a -> Term a
- orBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a -> Term a
- xorBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a -> Term a
- complementBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a
- shiftLeftTerm :: PEvalShiftTerm a => Term a -> Term a -> Term a
- shiftRightTerm :: PEvalShiftTerm a => Term a -> Term a -> Term a
- rotateLeftTerm :: PEvalRotateTerm a => Term a -> Term a -> Term a
- rotateRightTerm :: PEvalRotateTerm a => Term a -> Term a -> Term a
- bitCastTerm :: PEvalBitCastTerm a b => Term a -> Term b
- bitCastOrTerm :: PEvalBitCastOrTerm a b => Term b -> Term a -> Term b
- bvconcatTerm :: (PEvalBVTerm bv, KnownNat l, KnownNat r, KnownNat (l + r), 1 <= l, 1 <= r, 1 <= (l + r)) => Term (bv l) -> Term (bv r) -> Term (bv (l + r))
- bvselectTerm :: forall bv n ix w p q. (PEvalBVTerm bv, KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => p ix -> q w -> Term (bv n) -> Term (bv w)
- bvextendTerm :: forall bv l r proxy. (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => Bool -> proxy r -> Term (bv l) -> Term (bv r)
- bvsignExtendTerm :: forall bv l r proxy. (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => proxy r -> Term (bv l) -> Term (bv r)
- bvzeroExtendTerm :: forall bv l r proxy. (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => proxy r -> Term (bv l) -> Term (bv r)
- applyTerm :: (SupportedPrim a, SupportedPrim b, SupportedPrim f, PEvalApplyTerm f a b) => Term f -> Term a -> Term b
- divIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a
- modIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a
- quotIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a
- remIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a
- fpTraitTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => FPTrait -> Term (FP eb sb) -> Term Bool
- fdivTerm :: PEvalFractionalTerm a => Term a -> Term a -> Term a
- recipTerm :: PEvalFractionalTerm a => Term a -> Term a
- floatingUnaryTerm :: PEvalFloatingTerm a => FloatingUnaryOp -> Term a -> Term a
- powerTerm :: PEvalFloatingTerm a => Term a -> Term a -> Term a
- fpUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => FPUnaryOp -> Term (FP eb sb) -> Term (FP eb sb)
- fpBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => FPBinaryOp -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb)
- fpRoundingUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => FPRoundingUnaryOp -> Term FPRoundingMode -> Term (FP eb sb) -> Term (FP eb sb)
- fpRoundingBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => FPRoundingBinaryOp -> Term FPRoundingMode -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb)
- fpFMATerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => Term FPRoundingMode -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb)
- fromIntegralTerm :: PEvalFromIntegralTerm a b => Term a -> Term b
- fromFPOrTerm :: (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim FPRoundingMode, SupportedPrim (FP eb sb)) => Term a -> Term FPRoundingMode -> Term (FP eb sb) -> Term a
- toFPTerm :: forall a eb sb. (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim FPRoundingMode, SupportedPrim (FP eb sb)) => Term FPRoundingMode -> Term a -> Term (FP eb sb)
- trueTerm :: Term Bool
- falseTerm :: Term Bool
- pattern BoolConTerm :: Bool -> Term a
- pattern TrueTerm :: Term a
- pattern FalseTerm :: Term a
- pattern BoolTerm :: Term Bool -> Term a
- pevalNotTerm :: Term Bool -> Term Bool
- pevalOrTerm :: Term Bool -> Term Bool -> Term Bool
- pevalAndTerm :: Term Bool -> Term Bool -> Term Bool
- pevalImplyTerm :: Term Bool -> Term Bool -> Term Bool
- pevalXorTerm :: Term Bool -> Term Bool -> Term Bool
- pevalITEBasic :: SupportedPrim a => Term Bool -> Term a -> Term a -> Maybe (Term a)
- pevalITEBasicTerm :: SupportedPrim a => Term Bool -> Term a -> Term a -> Term a
- pevalDefaultEqTerm :: SupportedNonFuncPrim a => Term a -> Term a -> Term Bool
- type NonFuncPrimConstraint a = (SymVal (NonFuncSBVBaseType a), EqSymbolic (SBVType a), Mergeable (SBVType a), SMTDefinable (SBVType a), Mergeable (SBVType a), SBVType a ~ SBV (NonFuncSBVBaseType a), PrimConstraint a)
- class (SupportedPrim a, Ord a) => NonFuncSBVRep a where
- type NonFuncSBVBaseType a
- class NonFuncSBVRep a => SupportedNonFuncPrim a where
- conNonFuncSBVTerm :: a -> SBV (NonFuncSBVBaseType a)
- symNonFuncSBVTerm :: SBVFreshMonad m => String -> m (SBV (NonFuncSBVBaseType a))
- withNonFuncPrim :: (NonFuncPrimConstraint a => r) -> r
- class SBVRep t where
- type SBVType t
- class Monad m => SBVFreshMonad m where
- translateTypeError :: HasCallStack => Maybe String -> TypeRep a -> b
- parseSMTModelResultError :: HasCallStack => TypeRep a -> ([([CV], CV)], CV) -> a
- partitionCVArg :: forall a. SupportedNonFuncPrim a => [([CV], CV)] -> [(a, [([CV], CV)])]
- parseScalarSMTModelResult :: forall v r. (SatModel r, Typeable v) => (r -> v) -> ([([CV], CV)], CV) -> v
Supported primitive types
class SupportedPrimConstraint t Source #
Type class for resolving the constraint for a supported primitive type.
Instances
class (Lift t, Typeable t, Hashable t, Eq t, Show t, NFData t, SupportedPrimConstraint t, SBVRep t) => SupportedPrim t where Source #
Indicates that a type is supported, can be represented as a symbolic term, and can be lowered to an SBV term.
Minimal complete definition
defaultValue, pevalITETerm, pevalEqTerm, pevalDistinctTerm, conSBVTerm, symSBVName, symSBVTerm, parseSMTModelResult, castTypedSymbol, isFuncType, funcDummyConstraint
Methods
termCache :: Cache (Term t) Source #
pformatCon :: t -> String Source #
default pformatCon :: Show t => t -> String Source #
pformatSym :: TypedSymbol 'AnyKind t -> String Source #
defaultValue :: t Source #
defaultValueDynamic :: proxy t -> ModelValue Source #
pevalITETerm :: Term Bool -> Term t -> Term t -> Term t Source #
pevalEqTerm :: Term t -> Term t -> Term Bool Source #
pevalDistinctTerm :: NonEmpty (Term t) -> Term Bool Source #
conSBVTerm :: t -> SBVType t Source #
symSBVName :: TypedSymbol 'AnyKind t -> Int -> String Source #
symSBVTerm :: SBVFreshMonad m => String -> m (SBVType t) Source #
withPrim :: ((PrimConstraint t, SMTDefinable (SBVType t), Mergeable (SBVType t), Typeable (SBVType t)) => a) -> a Source #
default withPrim :: (PrimConstraint t, SMTDefinable (SBVType t), Mergeable (SBVType t), Typeable (SBVType t)) => ((PrimConstraint t, SMTDefinable (SBVType t), Mergeable (SBVType t), Typeable (SBVType t)) => a) -> a Source #
sbvIte :: SBV Bool -> SBVType t -> SBVType t -> SBVType t Source #
sbvEq :: SBVType t -> SBVType t -> SBV Bool Source #
sbvDistinct :: NonEmpty (SBVType t) -> SBV Bool Source #
default sbvDistinct :: EqSymbolic (SBVType t) => NonEmpty (SBVType t) -> SBV Bool Source #
parseSMTModelResult :: Int -> ([([CV], CV)], CV) -> t Source #
castTypedSymbol :: IsSymbolKind knd' => TypedSymbol knd t -> Maybe (TypedSymbol knd' t) Source #
isFuncType :: Bool Source #
Instances
class SupportedPrim con => SymRep con Source #
Type family to resolve the symbolic type associated with a concrete type.
Instances
SymRep AlgReal Source # | |
Defined in Grisette.Internal.SymPrim.SymAlgReal | |
SymRep FPRoundingMode Source # | |
Defined in Grisette.Internal.SymPrim.SymFP Associated Types type SymType FPRoundingMode Source # | |
SymRep Integer Source # | |
Defined in Grisette.Internal.SymPrim.SymInteger | |
SymRep Bool Source # | |
Defined in Grisette.Internal.SymPrim.SymBool | |
(KnownNat n, 1 <= n) => SymRep (IntN n) Source # | |
Defined in Grisette.Internal.SymPrim.SymBV | |
(KnownNat n, 1 <= n) => SymRep (WordN n) Source # | |
Defined in Grisette.Internal.SymPrim.SymBV | |
ValidFP eb sb => SymRep (FP eb sb) Source # | |
Defined in Grisette.Internal.SymPrim.SymFP | |
(SymRep ca, SymRep cb, SupportedPrim (ca --> cb)) => SymRep (ca --> cb) Source # | |
Defined in Grisette.Internal.SymPrim.SymGeneralFun | |
(SymRep a, SymRep b, SupportedPrim (a =-> b)) => SymRep (a =-> b) Source # | |
Defined in Grisette.Internal.SymPrim.SymTabularFun |
Type family to resolve the concrete type associated with a symbolic type.
Instances
ConRep SymAlgReal Source # | |
Defined in Grisette.Internal.SymPrim.SymAlgReal Associated Types type ConType SymAlgReal Source # | |
ConRep SymBool Source # | |
Defined in Grisette.Internal.SymPrim.SymBool | |
ConRep SymFPRoundingMode Source # | |
Defined in Grisette.Internal.SymPrim.SymFP Associated Types type ConType SymFPRoundingMode Source # | |
ConRep SymInteger Source # | |
Defined in Grisette.Internal.SymPrim.SymInteger Associated Types type ConType SymInteger Source # | |
(KnownNat n, 1 <= n) => ConRep (SymIntN n) Source # | |
Defined in Grisette.Internal.SymPrim.SymBV | |
(KnownNat n, 1 <= n) => ConRep (SymWordN n) Source # | |
Defined in Grisette.Internal.SymPrim.SymBV | |
ConRep (SymFP eb sb) Source # | |
Defined in Grisette.Internal.SymPrim.SymFP | |
(ConRep a, ConRep b) => ConRep (a -~> b) Source # | |
Defined in Grisette.Internal.SymPrim.SymGeneralFun | |
(ConRep a, ConRep b) => ConRep (a =~> b) Source # | |
Defined in Grisette.Internal.SymPrim.SymTabularFun |
class (ConRep sym, SymRep con, sym ~ SymType con, con ~ ConType sym) => LinkedRep con sym | con -> sym, sym -> con where Source #
One-to-one mapping between symbolic types and concrete types.
Instances
LinkedRep AlgReal SymAlgReal Source # | |
Defined in Grisette.Internal.SymPrim.SymAlgReal Methods underlyingTerm :: SymAlgReal -> Term AlgReal Source # | |
LinkedRep FPRoundingMode SymFPRoundingMode Source # | |
Defined in Grisette.Internal.SymPrim.SymFP Methods underlyingTerm :: SymFPRoundingMode -> Term FPRoundingMode Source # wrapTerm :: Term FPRoundingMode -> SymFPRoundingMode Source # | |
LinkedRep Integer SymInteger Source # | |
Defined in Grisette.Internal.SymPrim.SymInteger Methods underlyingTerm :: SymInteger -> Term Integer Source # | |
LinkedRep Bool SymBool Source # | |
(KnownNat n, 1 <= n) => LinkedRep (IntN n) (SymIntN n) Source # | |
(KnownNat n, 1 <= n) => LinkedRep (WordN n) (SymWordN n) Source # | |
ValidFP eb sb => LinkedRep (FP eb sb) (SymFP eb sb) Source # | |
(LinkedRep ca sa, LinkedRep cb sb, SupportedPrim ca, SupportedPrim cb, SupportedPrim (ca --> cb)) => LinkedRep (ca --> cb) (sa -~> sb) Source # | |
(LinkedRep ca sa, LinkedRep cb sb, SupportedPrim (ca =-> cb)) => LinkedRep (ca =-> cb) (sa =~> sb) Source # | |
Partial evaluation for the terms
class (SupportedPrim arg, SupportedPrim t, Lift tag, NFData tag, Show tag, Typeable tag, Eq tag, Hashable tag) => UnaryOp tag arg t | tag arg -> t where Source #
Custom unary operator. Not used by Grisette at this time and do not use it.
class (SupportedPrim arg1, SupportedPrim arg2, SupportedPrim t, Lift tag, NFData tag, Show tag, Typeable tag, Eq tag, Hashable tag) => BinaryOp tag arg1 arg2 t | tag arg1 arg2 -> t where Source #
Custom binary operator. Not used by Grisette at this time and do not use it.
class (SupportedPrim arg1, SupportedPrim arg2, SupportedPrim arg3, SupportedPrim t, Lift tag, NFData tag, Show tag, Typeable tag, Eq tag, Hashable tag) => TernaryOp tag arg1 arg2 arg3 t | tag arg1 arg2 arg3 -> t where Source #
Custom ternary operator. Not used by Grisette at this time and do not use it.
class (SupportedPrim f, SupportedPrim a, SupportedPrim b) => PEvalApplyTerm f a b | f -> a b where Source #
Partial evaluation and lowering for function application terms.
Methods
pevalApplyTerm :: Term f -> Term a -> Term b Source #
sbvApplyTerm :: SBVType f -> SBVType a -> SBVType b Source #
Instances
(SupportedPrim (a --> b), SupportedNonFuncPrim a, SupportedPrim b) => PEvalApplyTerm (a --> b) a b Source # | |
Defined in Grisette.Internal.SymPrim.GeneralFun | |
(SupportedPrim a, SupportedPrim b, SupportedPrim (a =-> b)) => PEvalApplyTerm (a =-> b) a b Source # | |
Defined in Grisette.Internal.SymPrim.TabularFun |
class (SupportedNonFuncPrim t, Bits t) => PEvalBitwiseTerm t where Source #
Partial evaluation and lowering for bitwise operation terms.
Minimal complete definition
pevalAndBitsTerm, pevalOrBitsTerm, pevalXorBitsTerm, pevalComplementBitsTerm, withSbvBitwiseTermConstraint
Methods
pevalAndBitsTerm :: Term t -> Term t -> Term t Source #
pevalOrBitsTerm :: Term t -> Term t -> Term t Source #
pevalXorBitsTerm :: Term t -> Term t -> Term t Source #
pevalComplementBitsTerm :: Term t -> Term t Source #
withSbvBitwiseTermConstraint :: (Bits (SBVType t) => r) -> r Source #
sbvAndBitsTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvOrBitsTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvXorBitsTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvComplementBitsTerm :: SBVType t -> SBVType t Source #
Instances
class (SupportedNonFuncPrim t, SymShift t) => PEvalShiftTerm t where Source #
Partial evaluation and lowering for symbolic shifting terms.
Minimal complete definition
pevalShiftLeftTerm, pevalShiftRightTerm, withSbvShiftTermConstraint
Methods
pevalShiftLeftTerm :: Term t -> Term t -> Term t Source #
pevalShiftRightTerm :: Term t -> Term t -> Term t Source #
withSbvShiftTermConstraint :: (SIntegral (NonFuncSBVBaseType t) => r) -> r Source #
sbvShiftLeftTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvShiftRightTerm :: SBVType t -> SBVType t -> SBVType t Source #
Instances
class (SupportedNonFuncPrim t, SymRotate t) => PEvalRotateTerm t where Source #
Partial evaluation and lowering for symbolic rotate terms.
Minimal complete definition
pevalRotateLeftTerm, pevalRotateRightTerm, withSbvRotateTermConstraint
Methods
pevalRotateLeftTerm :: Term t -> Term t -> Term t Source #
pevalRotateRightTerm :: Term t -> Term t -> Term t Source #
withSbvRotateTermConstraint :: (SIntegral (NonFuncSBVBaseType t) => r) -> r Source #
sbvRotateLeftTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvRotateRightTerm :: SBVType t -> SBVType t -> SBVType t Source #
Instances
class (SupportedNonFuncPrim t, Num t) => PEvalNumTerm t where Source #
Partial evaluation and lowering for number terms.
Minimal complete definition
pevalAddNumTerm, pevalNegNumTerm, pevalMulNumTerm, pevalAbsNumTerm, pevalSignumNumTerm, withSbvNumTermConstraint
Methods
pevalAddNumTerm :: Term t -> Term t -> Term t Source #
pevalNegNumTerm :: Term t -> Term t Source #
pevalMulNumTerm :: Term t -> Term t -> Term t Source #
pevalAbsNumTerm :: Term t -> Term t Source #
pevalSignumNumTerm :: Term t -> Term t Source #
withSbvNumTermConstraint :: (Num (SBVType t) => r) -> r Source #
sbvAddNumTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvNegNumTerm :: SBVType t -> SBVType t Source #
sbvMulNumTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvAbsNumTerm :: SBVType t -> SBVType t Source #
sbvSignumNumTerm :: SBVType t -> SBVType t Source #
Instances
pevalSubNumTerm :: PEvalNumTerm a => Term a -> Term a -> Term a Source #
Partial evaluation for subtraction terms.
class (SupportedNonFuncPrim t, Ord t) => PEvalOrdTerm t where Source #
Partial evaluation and lowering for comparison terms.
Minimal complete definition
Methods
pevalLtOrdTerm :: Term t -> Term t -> Term Bool Source #
pevalLeOrdTerm :: Term t -> Term t -> Term Bool Source #
withSbvOrdTermConstraint :: (OrdSymbolic (SBVType t) => r) -> r Source #
Instances
pevalGtOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool Source #
Partial evaluation for greater than terms.
pevalGeOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool Source #
Partial evaluation for greater than or equal to terms.
pevalNEqTerm :: SupportedPrim a => Term a -> Term a -> Term Bool Source #
Partial evaluation for inequality terms.
class (SupportedNonFuncPrim t, Integral t) => PEvalDivModIntegralTerm t where Source #
Partial evaluation and lowering for integer division and modulo terms.
Minimal complete definition
pevalDivIntegralTerm, pevalModIntegralTerm, pevalQuotIntegralTerm, pevalRemIntegralTerm, withSbvDivModIntegralTermConstraint
Methods
pevalDivIntegralTerm :: Term t -> Term t -> Term t Source #
pevalModIntegralTerm :: Term t -> Term t -> Term t Source #
pevalQuotIntegralTerm :: Term t -> Term t -> Term t Source #
pevalRemIntegralTerm :: Term t -> Term t -> Term t Source #
withSbvDivModIntegralTermConstraint :: (SDivisible (SBVType t) => r) -> r Source #
sbvDivIntegralTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvModIntegralTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvQuotIntegralTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvRemIntegralTerm :: SBVType t -> SBVType t -> SBVType t Source #
Instances
class (SupportedNonFuncPrim a, SupportedNonFuncPrim b, BitCast a b) => PEvalBitCastTerm a b where Source #
Partial evaluation and lowering for bitcast terms.
Instances
PEvalBitCastTerm Bool (IntN 1) Source # | |
PEvalBitCastTerm Bool (WordN 1) Source # | |
PEvalBitCastTerm (IntN 1) Bool Source # | |
PEvalBitCastTerm (WordN 1) Bool Source # | |
(KnownNat n, 1 <= n) => PEvalBitCastTerm (IntN n) (WordN n) Source # | |
(KnownNat n, 1 <= n) => PEvalBitCastTerm (WordN n) (IntN n) Source # | |
(n ~ (eb + sb), ValidFP eb sb, KnownNat n, 1 <= n) => PEvalBitCastTerm (IntN n) (FP eb sb) Source # | |
(n ~ (eb + sb), ValidFP eb sb, KnownNat n, 1 <= n) => PEvalBitCastTerm (WordN n) (FP eb sb) Source # | |
class (SupportedNonFuncPrim a, SupportedNonFuncPrim b, BitCastOr a b) => PEvalBitCastOrTerm a b where Source #
Partial evaluation and lowering for bitcast or default value terms.
Methods
pevalBitCastOrTerm :: Term b -> Term a -> Term b Source #
sbvBitCastOr :: SBVType b -> SBVType a -> SBVType b Source #
class (forall n. (KnownNat n, 1 <= n) => SupportedNonFuncPrim (bv n), SizedBV bv, Typeable bv) => PEvalBVTerm bv where Source #
Partial evaluation and lowering for bit-vector terms.
Methods
pevalBVConcatTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => Term (bv l) -> Term (bv r) -> Term (bv (l + r)) Source #
pevalBVExtendTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => Bool -> proxy r -> Term (bv l) -> Term (bv r) Source #
pevalBVSelectTerm :: (KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => p ix -> q w -> Term (bv n) -> Term (bv w) Source #
sbvBVConcatTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => p1 l -> p2 r -> SBVType (bv l) -> SBVType (bv r) -> SBVType (bv (l + r)) Source #
sbvBVExtendTerm :: (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => p1 l -> p2 r -> Bool -> SBVType (bv l) -> SBVType (bv r) Source #
sbvBVSelectTerm :: (KnownNat ix, KnownNat w, KnownNat n, 1 <= n, 1 <= w, (ix + w) <= n) => p1 ix -> p2 w -> p3 n -> SBVType (bv n) -> SBVType (bv w) Source #
Instances
PEvalBVTerm IntN Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Instances.BVPEval Methods pevalBVConcatTerm :: forall (l :: Nat) (r :: Nat). (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => Term (IntN l) -> Term (IntN r) -> Term (IntN (l + r)) Source # pevalBVExtendTerm :: forall (l :: Nat) (r :: Nat) proxy. (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => Bool -> proxy r -> Term (IntN l) -> Term (IntN r) Source # pevalBVSelectTerm :: forall (n :: Nat) (ix :: Nat) (w :: Nat) p q. (KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => p ix -> q w -> Term (IntN n) -> Term (IntN w) Source # sbvBVConcatTerm :: forall (l :: Nat) (r :: Nat) p1 p2. (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => p1 l -> p2 r -> SBVType (IntN l) -> SBVType (IntN r) -> SBVType (IntN (l + r)) Source # sbvBVExtendTerm :: forall (l :: Nat) (r :: Nat) p1 p2. (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => p1 l -> p2 r -> Bool -> SBVType (IntN l) -> SBVType (IntN r) Source # sbvBVSelectTerm :: forall (ix :: Nat) (w :: Nat) (n :: Nat) p1 p2 p3. (KnownNat ix, KnownNat w, KnownNat n, 1 <= n, 1 <= w, (ix + w) <= n) => p1 ix -> p2 w -> p3 n -> SBVType (IntN n) -> SBVType (IntN w) Source # | |
PEvalBVTerm WordN Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Instances.BVPEval Methods pevalBVConcatTerm :: forall (l :: Nat) (r :: Nat). (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => Term (WordN l) -> Term (WordN r) -> Term (WordN (l + r)) Source # pevalBVExtendTerm :: forall (l :: Nat) (r :: Nat) proxy. (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => Bool -> proxy r -> Term (WordN l) -> Term (WordN r) Source # pevalBVSelectTerm :: forall (n :: Nat) (ix :: Nat) (w :: Nat) p q. (KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => p ix -> q w -> Term (WordN n) -> Term (WordN w) Source # sbvBVConcatTerm :: forall (l :: Nat) (r :: Nat) p1 p2. (KnownNat l, KnownNat r, 1 <= l, 1 <= r) => p1 l -> p2 r -> SBVType (WordN l) -> SBVType (WordN r) -> SBVType (WordN (l + r)) Source # sbvBVExtendTerm :: forall (l :: Nat) (r :: Nat) p1 p2. (KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => p1 l -> p2 r -> Bool -> SBVType (WordN l) -> SBVType (WordN r) Source # sbvBVSelectTerm :: forall (ix :: Nat) (w :: Nat) (n :: Nat) p1 p2 p3. (KnownNat ix, KnownNat w, KnownNat n, 1 <= n, 1 <= w, (ix + w) <= n) => p1 ix -> p2 w -> p3 n -> SBVType (WordN n) -> SBVType (WordN w) Source # |
class (SupportedNonFuncPrim t, Fractional t) => PEvalFractionalTerm t where Source #
Partial evaluation and lowering for fractional terms.
Minimal complete definition
pevalFdivTerm, pevalRecipTerm, withSbvFractionalTermConstraint
Methods
pevalFdivTerm :: Term t -> Term t -> Term t Source #
pevalRecipTerm :: Term t -> Term t Source #
withSbvFractionalTermConstraint :: (Fractional (SBVType t) => r) -> r Source #
sbvFdivTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvRecipTerm :: SBVType t -> SBVType t Source #
Instances
PEvalFractionalTerm AlgReal Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Instances.PEvalFractionalTerm | |
ValidFP eb sb => PEvalFractionalTerm (FP eb sb) Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Instances.PEvalFractionalTerm Methods pevalFdivTerm :: Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb) Source # pevalRecipTerm :: Term (FP eb sb) -> Term (FP eb sb) Source # withSbvFractionalTermConstraint :: (Fractional (SBVType (FP eb sb)) => r) -> r Source # sbvFdivTerm :: SBVType (FP eb sb) -> SBVType (FP eb sb) -> SBVType (FP eb sb) Source # sbvRecipTerm :: SBVType (FP eb sb) -> SBVType (FP eb sb) Source # |
class SupportedNonFuncPrim t => PEvalFloatingTerm t where Source #
Partial evaluation and lowering for floating point terms.
Minimal complete definition
pevalFloatingUnaryTerm, pevalPowerTerm, withSbvFloatingTermConstraint
Methods
pevalFloatingUnaryTerm :: FloatingUnaryOp -> Term t -> Term t Source #
pevalPowerTerm :: Term t -> Term t -> Term t Source #
withSbvFloatingTermConstraint :: (Floating (SBVType t) => r) -> r Source #
sbvPowerTerm :: SBVType t -> SBVType t -> SBVType t Source #
sbvFloatingUnaryTerm :: FloatingUnaryOp -> SBVType t -> SBVType t Source #
Instances
class (SupportedNonFuncPrim a, SupportedNonFuncPrim b, Integral a, Num b) => PEvalFromIntegralTerm a b where Source #
Partial evaluation and lowering for integral terms.
Methods
pevalFromIntegralTerm :: Term a -> Term b Source #
sbvFromIntegralTerm :: SBVType a -> SBVType b Source #
Instances
class SupportedNonFuncPrim a => PEvalIEEEFPConvertibleTerm a where Source #
Partial evaluation and lowering for converting from and to IEEE floating point terms.
Methods
pevalFromFPOrTerm :: ValidFP eb sb => Term a -> Term FPRoundingMode -> Term (FP eb sb) -> Term a Source #
pevalToFPTerm :: ValidFP eb sb => Term FPRoundingMode -> Term a -> Term (FP eb sb) Source #
sbvFromFPOrTerm :: ValidFP eb sb => SBVType a -> SBVType FPRoundingMode -> SBVType (FP eb sb) -> SBVType a Source #
sbvToFPTerm :: ValidFP eb sb => SBVType FPRoundingMode -> SBVType a -> SBVType (FP eb sb) Source #
Instances
Typed symbols
data SymbolKind Source #
The kind of a symbol.
All symbols are AnyKind
, and all symbols other than general/tabular
functions are ConstantKind
.
Constructors
ConstantKind | |
AnyKind |
data TypedSymbol (knd :: SymbolKind) t where Source #
A typed symbol is a symbol that is associated with a type. Note that the same symbol bodies with different types are considered different symbols and can coexist in a term.
Simple symbols can be created with the OverloadedStrings
extension:
>>>
"a" :: TypedSymbol 'AnyKind Bool
a :: Bool
Constructors
TypedSymbol | |
Fields
|
Instances
type TypedConstantSymbol = TypedSymbol 'ConstantKind Source #
Constant symbol
type TypedAnySymbol = TypedSymbol 'AnyKind Source #
Any symbol
data SomeTypedSymbol knd where Source #
A non-indexed symbol. Type information are checked at runtime.
Constructors
SomeTypedSymbol :: forall knd t. TypeRep t -> TypedSymbol knd t -> SomeTypedSymbol knd |
Instances
type SomeTypedConstantSymbol = SomeTypedSymbol 'ConstantKind Source #
Non-indexed constant symbol
type SomeTypedAnySymbol = SomeTypedSymbol 'AnyKind Source #
Non-indexed any symbol
class IsSymbolKind (ty :: SymbolKind) where Source #
Decision procedure for symbol kinds.
Associated Types
type SymbolKindConstraint ty :: Type -> Constraint Source #
Methods
decideSymbolKind :: Either (ty :~~: 'ConstantKind) (ty :~~: 'AnyKind) Source #
Instances
IsSymbolKind 'AnyKind Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Term Associated Types type SymbolKindConstraint 'AnyKind :: Type -> Constraint Source # Methods decideSymbolKind :: Either ('AnyKind :~~: 'ConstantKind) ('AnyKind :~~: 'AnyKind) Source # | |
IsSymbolKind 'ConstantKind Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Term Associated Types type SymbolKindConstraint 'ConstantKind :: Type -> Constraint Source # Methods decideSymbolKind :: Either ('ConstantKind :~~: 'ConstantKind) ('ConstantKind :~~: 'AnyKind) Source # |
showUntyped :: TypedSymbol knd t -> String Source #
Show a typed symbol without the type information.
withSymbolSupported :: TypedSymbol knd t -> (SupportedPrim t => a) -> a Source #
Introduce the SupportedPrim
constraint from the TypedSymbol
.
someTypedSymbol :: forall knd t. TypedSymbol knd t -> SomeTypedSymbol knd Source #
Construct a SomeTypedSymbol
from a TypedSymbol
.
eqHeteroSymbol :: forall ta a tb b. TypedSymbol ta a -> TypedSymbol tb b -> Bool Source #
Compare two TypedSymbol
s for equality.
castSomeTypedSymbol :: IsSymbolKind knd' => SomeTypedSymbol knd -> Maybe (SomeTypedSymbol knd') Source #
Cast a typed symbol to a different kind. Check if the kind is compatible.
withSymbolKind :: TypedSymbol knd t -> (IsSymbolKind knd => a) -> a Source #
Introduce the IsSymbolKind
constraint from the TypedSymbol
.
Terms
Traits for IEEE floating point numbers.
Constructors
FPIsNaN | |
FPIsPositive | |
FPIsNegative | |
FPIsPositiveInfinite | |
FPIsNegativeInfinite | |
FPIsInfinite | |
FPIsPositiveZero | |
FPIsNegativeZero | |
FPIsZero | |
FPIsNormal | |
FPIsSubnormal | |
FPIsPoint |
Instances
Unary floating point operations.
Instances
data FPBinaryOp Source #
Binary floating point operations.
Constructors
FPRem | |
FPMinimum | |
FPMinimumNumber | |
FPMaximum | |
FPMaximumNumber |
Instances
data FPRoundingUnaryOp Source #
Unary floating point operations with rounding modes.
Constructors
FPSqrt | |
FPRoundToIntegral |
Instances
data FPRoundingBinaryOp Source #
Binary floating point operations with rounding modes.
Instances
data FloatingUnaryOp Source #
Unary floating point operations.
Constructors
FloatingExp | |
FloatingLog | |
FloatingSqrt | |
FloatingSin | |
FloatingCos | |
FloatingTan | |
FloatingAsin | |
FloatingAcos | |
FloatingAtan | |
FloatingSinh | |
FloatingCosh | |
FloatingTanh | |
FloatingAsinh | |
FloatingAcosh | |
FloatingAtanh |
Instances
Internal representation for Grisette symbolic terms.
Constructors
Instances
identityWithTypeRep :: forall t. Term t -> (SomeTypeRep, Id) Source #
Return the ID and the type representation of a term.
introSupportedPrimConstraint :: forall t a. Term t -> (SupportedPrim t => a) -> a Source #
Introduce the SupportedPrim
constraint from a term.
pformatTerm :: forall t. SupportedPrim t => Term t -> String Source #
Pretty-print a term.
Interning
Term without identity (before internalizing).
Constructors
prettyPrintTerm :: Term t -> Doc ann Source #
Pretty-print a term, possibly eliding parts of it.
forallTerm :: (SupportedNonFuncPrim t, Typeable t) => TypedSymbol 'ConstantKind t -> Term Bool -> Term Bool Source #
Construct and internalizing a ForallTerm
.
existsTerm :: (SupportedNonFuncPrim t, Typeable t) => TypedSymbol 'ConstantKind t -> Term Bool -> Term Bool Source #
Construct and internalizing a ExistsTerm
.
constructUnary :: forall tag arg t. (SupportedPrim t, UnaryOp tag arg t, Typeable tag, Typeable t, Show tag) => tag -> Term arg -> Term t Source #
Construct and internalizing a UnaryTerm
.
constructBinary :: forall tag arg1 arg2 t. (SupportedPrim t, BinaryOp tag arg1 arg2 t, Typeable tag, Typeable t, Show tag) => tag -> Term arg1 -> Term arg2 -> Term t Source #
Construct and internalizing a BinaryTerm
.
constructTernary :: forall tag arg1 arg2 arg3 t. (SupportedPrim t, TernaryOp tag arg1 arg2 arg3 t, Typeable tag, Typeable t, Show tag) => tag -> Term arg1 -> Term arg2 -> Term arg3 -> Term t Source #
Construct and internalizing a TernaryTerm
.
conTerm :: (SupportedPrim t, Typeable t, Hashable t, Eq t, Show t) => t -> Term t Source #
Construct and internalizing a ConTerm
.
symTerm :: forall t. (SupportedPrim t, Typeable t) => Symbol -> Term t Source #
Construct and internalizing a SymTerm
.
ssymTerm :: (SupportedPrim t, Typeable t) => Identifier -> Term t Source #
Construct and internalizing a SymTerm
with an identifier, using simple
symbols.
isymTerm :: (SupportedPrim t, Typeable t) => Identifier -> Int -> Term t Source #
Construct and internalizing a SymTerm
with an identifier and an index,
using indexed symbols.
eqTerm :: SupportedNonFuncPrim a => Term a -> Term a -> Term Bool Source #
Construct and internalizing a EqTerm
.
distinctTerm :: SupportedNonFuncPrim a => NonEmpty (Term a) -> Term Bool Source #
Construct and internalizing a DistinctTerm
.
iteTerm :: SupportedPrim a => Term Bool -> Term a -> Term a -> Term a Source #
Construct and internalizing a ITETerm
.
addNumTerm :: PEvalNumTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a AddNumTerm
.
negNumTerm :: PEvalNumTerm a => Term a -> Term a Source #
Construct and internalizing a NegNumTerm
.
mulNumTerm :: PEvalNumTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a MulNumTerm
.
absNumTerm :: PEvalNumTerm a => Term a -> Term a Source #
Construct and internalizing a AbsNumTerm
.
signumNumTerm :: PEvalNumTerm a => Term a -> Term a Source #
Construct and internalizing a SignumNumTerm
.
ltOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool Source #
Construct and internalizing a LtOrdTerm
.
leOrdTerm :: PEvalOrdTerm a => Term a -> Term a -> Term Bool Source #
Construct and internalizing a LeOrdTerm
.
andBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a AndBitsTerm
.
orBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a OrBitsTerm
.
xorBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a XorBitsTerm
.
complementBitsTerm :: PEvalBitwiseTerm a => Term a -> Term a Source #
Construct and internalizing a ComplementBitsTerm
.
shiftLeftTerm :: PEvalShiftTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a ShiftLeftTerm
.
shiftRightTerm :: PEvalShiftTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a ShiftRightTerm
.
rotateLeftTerm :: PEvalRotateTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a RotateLeftTerm
.
rotateRightTerm :: PEvalRotateTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a RotateRightTerm
.
bitCastTerm :: PEvalBitCastTerm a b => Term a -> Term b Source #
Construct and internalizing a BitCastTerm
.
bitCastOrTerm :: PEvalBitCastOrTerm a b => Term b -> Term a -> Term b Source #
Construct and internalizing a BitCastOrTerm
.
bvconcatTerm :: (PEvalBVTerm bv, KnownNat l, KnownNat r, KnownNat (l + r), 1 <= l, 1 <= r, 1 <= (l + r)) => Term (bv l) -> Term (bv r) -> Term (bv (l + r)) Source #
Construct and internalizing a BVConcatTerm
.
bvselectTerm :: forall bv n ix w p q. (PEvalBVTerm bv, KnownNat n, KnownNat ix, KnownNat w, 1 <= n, 1 <= w, (ix + w) <= n) => p ix -> q w -> Term (bv n) -> Term (bv w) Source #
Construct and internalizing a BVSelectTerm
.
bvextendTerm :: forall bv l r proxy. (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => Bool -> proxy r -> Term (bv l) -> Term (bv r) Source #
Construct and internalizing a BVExtendTerm
.
bvsignExtendTerm :: forall bv l r proxy. (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => proxy r -> Term (bv l) -> Term (bv r) Source #
Construct and internalizing a BVExtendTerm
with sign extension.
bvzeroExtendTerm :: forall bv l r proxy. (PEvalBVTerm bv, KnownNat l, KnownNat r, 1 <= l, 1 <= r, l <= r) => proxy r -> Term (bv l) -> Term (bv r) Source #
Construct and internalizing a BVExtendTerm
with zero extension.
applyTerm :: (SupportedPrim a, SupportedPrim b, SupportedPrim f, PEvalApplyTerm f a b) => Term f -> Term a -> Term b Source #
Construct and internalizing a ApplyTerm
.
divIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a DivIntegralTerm
.
modIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a ModIntegralTerm
.
quotIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a QuotIntegralTerm
.
remIntegralTerm :: PEvalDivModIntegralTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a RemIntegralTerm
.
fpTraitTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => FPTrait -> Term (FP eb sb) -> Term Bool Source #
Construct and internalizing a FPTraitTerm
.
fdivTerm :: PEvalFractionalTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a FdivTerm
.
recipTerm :: PEvalFractionalTerm a => Term a -> Term a Source #
Construct and internalizing a RecipTerm
.
floatingUnaryTerm :: PEvalFloatingTerm a => FloatingUnaryOp -> Term a -> Term a Source #
Construct and internalizing a FloatingUnaryTerm
.
powerTerm :: PEvalFloatingTerm a => Term a -> Term a -> Term a Source #
Construct and internalizing a PowerTerm
.
fpUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => FPUnaryOp -> Term (FP eb sb) -> Term (FP eb sb) Source #
Construct and internalizing a FPUnaryTerm
.
fpBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb)) => FPBinaryOp -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb) Source #
Construct and internalizing a FPBinaryTerm
.
fpRoundingUnaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => FPRoundingUnaryOp -> Term FPRoundingMode -> Term (FP eb sb) -> Term (FP eb sb) Source #
Construct and internalizing a FPRoundingUnaryTerm
.
fpRoundingBinaryTerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => FPRoundingBinaryOp -> Term FPRoundingMode -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb) Source #
Construct and internalizing a FPRoundingBinaryTerm
.
fpFMATerm :: (ValidFP eb sb, SupportedPrim (FP eb sb), SupportedPrim FPRoundingMode) => Term FPRoundingMode -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb) -> Term (FP eb sb) Source #
Construct and internalizing a FPFMATerm
.
fromIntegralTerm :: PEvalFromIntegralTerm a b => Term a -> Term b Source #
Construct and internalizing a FromIntegralTerm
.
fromFPOrTerm :: (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim FPRoundingMode, SupportedPrim (FP eb sb)) => Term a -> Term FPRoundingMode -> Term (FP eb sb) -> Term a Source #
Construct and internalizing a FromFPOrTerm
.
toFPTerm :: forall a eb sb. (PEvalIEEEFPConvertibleTerm a, ValidFP eb sb, SupportedPrim FPRoundingMode, SupportedPrim (FP eb sb)) => Term FPRoundingMode -> Term a -> Term (FP eb sb) Source #
Construct and internalizing a ToFPTerm
.
Support for boolean type
pevalITEBasic :: SupportedPrim a => Term Bool -> Term a -> Term a -> Maybe (Term a) Source #
Basic partial evaluation for ITE terms.
pevalITEBasicTerm :: SupportedPrim a => Term Bool -> Term a -> Term a -> Term a Source #
Basic partial evaluation for ITE terms.
pevalDefaultEqTerm :: SupportedNonFuncPrim a => Term a -> Term a -> Term Bool Source #
Default partial evaluation for equality terms.
type NonFuncPrimConstraint a = (SymVal (NonFuncSBVBaseType a), EqSymbolic (SBVType a), Mergeable (SBVType a), SMTDefinable (SBVType a), Mergeable (SBVType a), SBVType a ~ SBV (NonFuncSBVBaseType a), PrimConstraint a) Source #
Type class for resolving the constraint for a supported non-function primitive type.
class (SupportedPrim a, Ord a) => NonFuncSBVRep a Source #
Type class for resolving the base type for the SBV type for the primitive type.
Associated Types
type NonFuncSBVBaseType a Source #
Instances
class NonFuncSBVRep a => SupportedNonFuncPrim a where Source #
Indicates that a type is supported, can be represented as a symbolic term, is not a function type, and can be lowered to an SBV term.
Methods
conNonFuncSBVTerm :: a -> SBV (NonFuncSBVBaseType a) Source #
symNonFuncSBVTerm :: SBVFreshMonad m => String -> m (SBV (NonFuncSBVBaseType a)) Source #
withNonFuncPrim :: (NonFuncPrimConstraint a => r) -> r Source #
Instances
Type class for resolving the SBV type for the primitive type.
Instances
SBVRep AlgReal Source # | |
SBVRep FPRoundingMode Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Instances.SupportedPrim Associated Types type SBVType FPRoundingMode Source # | |
SBVRep Integer Source # | |
SBVRep Bool Source # | |
Defined in Grisette.Internal.SymPrim.Prim.Internal.Term | |
(KnownNat w, 1 <= w) => SBVRep (IntN w) Source # | |
(KnownNat w, 1 <= w) => SBVRep (WordN w) Source # | |
ValidFP eb sb => SBVRep (FP eb sb) Source # | |
(SupportedNonFuncPrim a, SupportedPrim b) => SBVRep (a --> b) Source # | |
Defined in Grisette.Internal.SymPrim.GeneralFun | |
(SupportedNonFuncPrim a, SupportedPrim b) => SBVRep (a =-> b) Source # | |
Defined in Grisette.Internal.SymPrim.TabularFun |
class Monad m => SBVFreshMonad m where Source #
Monads that supports generating sbv fresh variables.
Instances
MonadIO m => SBVFreshMonad (QueryT m) Source # | |
MonadIO m => SBVFreshMonad (SymbolicT m) Source # | |
SBVFreshMonad m => SBVFreshMonad (ReaderT r m) Source # | |
SBVFreshMonad m => SBVFreshMonad (StateT s m) Source # | |
(SBVFreshMonad m, Monoid w) => SBVFreshMonad (WriterT w m) Source # | |
(SBVFreshMonad m, Monoid w) => SBVFreshMonad (RWST r w s m) Source # | |
translateTypeError :: HasCallStack => Maybe String -> TypeRep a -> b Source #
Error message for unsupported types.
parseSMTModelResultError :: HasCallStack => TypeRep a -> ([([CV], CV)], CV) -> a Source #
Error message for failure to parse the SBV model result.
partitionCVArg :: forall a. SupportedNonFuncPrim a => [([CV], CV)] -> [(a, [([CV], CV)])] Source #
Partition the list of CVs for models for functions.