| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Language.Haskell.Liquid.Types.RefType
Description
Refinement Types. Mostly mirroring the GHC Type definition, but with room for refinements of various sorts. TODO: Desperately needs re-organization.
Synopsis
- data TyConMap
- uTop :: r -> UReftV v r
- uReft :: (Symbol, Expr) -> UReft Reft
- uRType :: RType c tv a -> RType c tv (UReft a)
- uRType' :: RType c tv (UReft a) -> RType c tv a
- uRTypeGen :: IsReft b => RType c tv a -> RType c tv b
- uPVar :: PVarV v t -> UsedPVarV v
- applySolution :: Functor f => FInfo a -> HashMap KVar (Delayed Expr) -> f SpecType -> f SpecType
- isDecreasing :: HashSet TyCon -> [RTyVar] -> SpecType -> Bool
- makeDecrType :: Symbolic a => HashSet TyCon -> Maybe (a, (Symbol, RType RTyCon t (UReft Reft))) -> Either (Symbol, RType RTyCon t (UReft Reft)) String
- makeNumEnv :: (Foldable t, TyConable c) => t (RType c b t1) -> [b]
- makeLexRefa :: [Located Expr] -> [Located Expr] -> UReft Reft
- pdVar :: PVarV v t -> PredicateV v
- findPVar :: [PVar (RType c tv NoReft)] -> UsedPVar -> PVar (RType c tv NoReft)
- class FreeVar a v
- allTyVars :: Ord tv => RType c tv r -> [tv]
- allTyVars' :: Eq tv => RType c tv r -> [tv]
- freeTyVars :: Eq tv => RTypeV v c tv r -> [RTVar tv (RTypeV v c tv NoReft)]
- tyClasses :: OkRT RTyCon tv r => RType RTyCon tv r -> [(Class, [RType RTyCon tv r])]
- tyConName :: TyCon -> Symbol
- quantifyRTy :: (Monoid r, Eq tv) => [RTVar tv (RTypeV v c tv NoReft)] -> RTypeV v c tv r -> RTypeV v c tv r
- quantifyFreeRTy :: (Monoid r, Eq tv) => RTypeV v c tv r -> RTypeV v c tv r
- ofType :: IsReft r => Type -> RRType r
- toType :: ToTypeable r => Bool -> RRType r -> Type
- bareOfType :: IsReft r => Type -> BRType r
- bTyVar :: LocSymbol -> BTyVar
- rTyVar :: TyVar -> RTyVar
- rVar :: IsReft r => TyVar -> RType c RTyVar r
- rApp :: TyCon -> [RType RTyCon tv r] -> [RTProp RTyCon tv r] -> r -> RType RTyCon tv r
- gApp :: TyCon -> [RTyVar] -> [PVar a] -> SpecType
- rEx :: Foldable t => t (Symbol, RType c tv r) -> RType c tv r -> RType c tv r
- symbolRTyVar :: Symbol -> RTyVar
- bareRTyVar :: BTyVar -> RTyVar
- tyConBTyCon :: TyCon -> BTyCon
- pdVarReft :: PVar t -> UReft Reft
- subts :: SubsTy tv ty c => [(tv, ty)] -> c -> c
- subvPredicate :: (UsedPVar -> UsedPVar) -> Predicate -> Predicate
- subvUReft :: (UsedPVar -> UsedPVar) -> UReft Reft -> UReft Reft
- subsTyVarMeet :: (Eq tv, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r
- subsTyVarMeet' :: (Eq tv, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => (tv, RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r
- subsTyVarNoMeet :: (Eq tv, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r
- subsTyVarsNoMeet :: (Eq tv, Foldable t, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => t (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r
- subsTyVarsMeet :: (Eq tv, Foldable t, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => t (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r
- addTyConInfo :: (PPrint r, ToReft r, SubsTy RTyVar RSort r, Variable r ~ Symbol, ReftBind r ~ Symbol, ReftVar r ~ Symbol, IsReft r) => TCEmb TyCon -> TyConMap -> RRType r -> RRType r
- appRTyCon :: ToTypeable r => TCEmb TyCon -> TyConMap -> RTyCon -> [RRType r] -> (RTyCon, [RPVar])
- typeUniqueSymbol :: Type -> Symbol
- classBinds :: TCEmb TyCon -> SpecType -> [(Symbol, SortedReft)]
- isSizeable :: HashSet TyCon -> TyCon -> Bool
- famInstTyConType :: TyCon -> Maybe Type
- famInstArgs :: TyCon -> Maybe (TyCon, [Type])
- strengthen :: Meet r => RTypeBV b v c tv r -> r -> RTypeBV b v c tv r
- strengthenWith :: (r -> r -> r) -> RTypeBV b v c tv r -> r -> RTypeBV b v c tv r
- generalize :: (Eq tv, Monoid r) => RType c tv r -> RType c tv r
- normalizePds :: OkRT c tv r => RType c tv r -> RType c tv r
- dataConMsReft :: (ToReft r, ReftBind r ~ v, ReftVar r ~ v, Refreshable v) => RTypeBV v v c tv r -> [v] -> ReftBV v v
- dataConReft :: DataCon -> [Symbol] -> Reft
- rTypeSortedReft :: (PPrint r, IsReft r, ReftBind r ~ Symbol, ReftVar r ~ Symbol, SubsTy RTyVar (RType RTyCon RTyVar NoReft) r) => TCEmb TyCon -> RRType r -> SortedReft
- rTypeSort :: (PPrint r, IsReft r, ReftBind r ~ Symbol, ReftVar r ~ Symbol, SubsTy RTyVar (RType RTyCon RTyVar NoReft) r) => TCEmb TyCon -> RRType r -> Sort
- typeSort :: TCEmb TyCon -> Type -> Sort
- shiftVV :: (TyConable c, IsReft (f Reft), Functor f, Subable (f Reft), Variable (f Reft) ~ Variable Reft, ReftBind (f Reft) ~ ReftBind Reft) => RType c tv (f Reft) -> Symbol -> RType c tv (f Reft)
- expandProductType :: (PPrint r, IsReft r, SubsTy RTyVar (RType RTyCon RTyVar NoReft) r, ReftBind r ~ Symbol, ReftVar r ~ Symbol, Variable r ~ Symbol) => Var -> RType RTyCon RTyVar r -> RType RTyCon RTyVar r
- mkTyConInfo :: TyCon -> VarianceInfo -> VarianceInfo -> Maybe SizeFun -> TyConInfo
- strengthenRefTypeGen :: (OkRTBV v v c tv r, Subable r, Variable r ~ v, ReftBind r ~ v, IsReft r, FreeVar c tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => RTypeBV v v c tv r -> RTypeBV v v c tv r -> RTypeBV v v c tv r
- strengthenDataConType :: (Var, SpecType) -> (Var, SpecType)
- isBaseTy :: Type -> Bool
- updateRTVar :: IsReft r => RTVar RTyVar i -> RTVar RTyVar (RType RTyCon RTyVar r)
- isValKind :: Kind -> Bool
- kindToRType :: IsReft r => Type -> RRType r
- rTVarInfo :: IsReft r => TyVar -> RTVInfo (RRType r)
- tyVarsPosition :: RType RTyCon tv r -> Positions tv
- data Positions a = Pos {}
- isNumeric :: TCEmb TyCon -> RTyCon -> Bool
Documentation
Information about Type Constructors
Functions for lifting Reft-values to Spec-values
uRType :: RType c tv a -> RType c tv (UReft a) Source #
Various functions for converting vanilla Reft to Spec
Applying a solution to a SpecType
applySolution :: Functor f => FInfo a -> HashMap KVar (Delayed Expr) -> f SpecType -> f SpecType Source #
Functions for decreasing arguments
makeDecrType :: Symbolic a => HashSet TyCon -> Maybe (a, (Symbol, RType RTyCon t (UReft Reft))) -> Either (Symbol, RType RTyCon t (UReft Reft)) String Source #
makeNumEnv :: (Foldable t, TyConable c) => t (RType c b t1) -> [b] Source #
Termination Predicates ----------------------------------------------------
Functions for manipulating Predicates
pdVar :: PVarV v t -> PredicateV v Source #
Minimal complete definition
freeVars
allTyVars' :: Eq tv => RType c tv r -> [tv] Source #
Quantifying RTypes
quantifyRTy :: (Monoid r, Eq tv) => [RTVar tv (RTypeV v c tv NoReft)] -> RTypeV v c tv r -> RTypeV v c tv r Source #
RType constructors
rVar :: IsReft r => TyVar -> RType c RTyVar r Source #
Helper Functions (RJ: Helping to do what?) --------------------------------
symbolRTyVar :: Symbol -> RTyVar Source #
bareRTyVar :: BTyVar -> RTyVar Source #
tyConBTyCon :: TyCon -> BTyCon Source #
Substitutions
subts :: SubsTy tv ty c => [(tv, ty)] -> c -> c Source #
Type Substitutions --------------------------------------------------------
subsTyVarMeet :: (Eq tv, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r Source #
subsTyVarMeet' :: (Eq tv, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => (tv, RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r Source #
subsTyVarNoMeet :: (Eq tv, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r Source #
subsTyVarsNoMeet :: (Eq tv, Foldable t, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => t (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r Source #
subsTyVarsMeet :: (Eq tv, Foldable t, Hashable tv, IsReft r, TyConable c, Binder b, SubsTy tv (RTypeBV b v c tv (NoReftB b)) c, SubsTy tv (RTypeBV b v c tv (NoReftB b)) r, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTypeBV b v c tv (NoReftB b)), FreeVar c tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) tv, SubsTy tv (RTypeBV b v c tv (NoReftB b)) (RTVar tv (RTypeBV b v c tv (NoReftB b)))) => t (tv, RTypeBV b v c tv (NoReftB b), RTypeBV b v c tv r) -> RTypeBV b v c tv r -> RTypeBV b v c tv r Source #
Destructors
addTyConInfo :: (PPrint r, ToReft r, SubsTy RTyVar RSort r, Variable r ~ Symbol, ReftBind r ~ Symbol, ReftVar r ~ Symbol, IsReft r) => TCEmb TyCon -> TyConMap -> RRType r -> RRType r Source #
appRTyCon :: ToTypeable r => TCEmb TyCon -> TyConMap -> RTyCon -> [RRType r] -> (RTyCon, [RPVar]) Source #
- NOTE:FamInstPredVars
- related to [NOTE:FamInstEmbeds]
See testsdataconpos/T1446.hs
The function txRefSort converts
Intp ===> {v:Int | p v}
which is fine, but also converts
Fieldq Blob a ===> {v:Field Blob a | q v}
which is NOT ok, because q expects a different arg.
The above happens because, thanks to instance-family stuff, LH doesn't realize that q is actually an ARG of Field Blob Note that Field itself has no args, but Field Blob does...
That is, it is not enough to store the refined
TyConinfo, solely in theRTyConas with family instances, you need BOTH theTyConand the args to determine the extra info.We do so in
TyConMap, and by crucially extendingRefType.appRTyConwhose job is to use the RefinedTyConthat is, theRTyCongenerated from theTyConPto strengthen individual occurrences of the TyCon applied to various arguments.
typeUniqueSymbol :: Type -> Symbol Source #
classBinds :: TCEmb TyCon -> SpecType -> [(Symbol, SortedReft)] Source #
Binders generated by class predicates, typically for constraining tyvars (e.g. FNum)
famInstArgs :: TyCon -> Maybe (TyCon, [Type]) Source #
famInstArgs c destructs a family-instance TyCon into its components, e.g.
e.g. 'famInstArgs R:FieldBlob' is (Field, [Blob])
Manipulating Refinements in RTypes
strengthenWith :: (r -> r -> r) -> RTypeBV b v c tv r -> r -> RTypeBV b v c tv r Source #
dataConMsReft :: (ToReft r, ReftBind r ~ v, ReftVar r ~ v, Refreshable v) => RTypeBV v v c tv r -> [v] -> ReftBV v v Source #
dataConReft :: DataCon -> [Symbol] -> Reft Source #
rTypeSortedReft :: (PPrint r, IsReft r, ReftBind r ~ Symbol, ReftVar r ~ Symbol, SubsTy RTyVar (RType RTyCon RTyVar NoReft) r) => TCEmb TyCon -> RRType r -> SortedReft Source #
- NOTE:Hole-Lit
We use toType to convert RType to GHC.Type to expand any GHC
related type-aliases, e.g. in Bare.Resolve.expandRTypeSynonyms.
If the RType has a RHole then what to do?
We, encode RHole as `LitTy LH_HOLE` -- which is a bit of
a *hack*. The only saving grace is it is used *temporarily*
and then swiftly turned back into an RHole via ofType
(after GHC has done its business of expansion).
Of course, we hope this doesn't break any GHC invariants! See issue #1476 and #1477
The other option is to *not* use toType on things that have
holes in them, but this seems worse, e.g. because you may define
a plain GHC alias like:
type ToNat a = a -> Nat
and then you might write refinement types like:
{- foo :: ToNat {v:_ | 0 <= v} -}
and we'd want to expand the above to
{- foo :: {v:_ | 0 v} - Nat -}
and then resolve the hole using the (GHC) type of foo.
Annotations and Solutions -------------------------------------------------
rTypeSort :: (PPrint r, IsReft r, ReftBind r ~ Symbol, ReftVar r ~ Symbol, SubsTy RTyVar (RType RTyCon RTyVar NoReft) r) => TCEmb TyCon -> RRType r -> Sort Source #
typeSort :: TCEmb TyCon -> Type -> Sort Source #
From Old Fixpoint ---------------------------------------------------------
shiftVV :: (TyConable c, IsReft (f Reft), Functor f, Subable (f Reft), Variable (f Reft) ~ Variable Reft, ReftBind (f Reft) ~ ReftBind Reft) => RType c tv (f Reft) -> Symbol -> RType c tv (f Reft) Source #
TODO: classify these
expandProductType :: (PPrint r, IsReft r, SubsTy RTyVar (RType RTyCon RTyVar NoReft) r, ReftBind r ~ Symbol, ReftVar r ~ Symbol, Variable r ~ Symbol) => Var -> RType RTyCon RTyVar r -> RType RTyCon RTyVar r Source #
mkTyConInfo :: TyCon -> VarianceInfo -> VarianceInfo -> Maybe SizeFun -> TyConInfo Source #
strengthenRefTypeGen :: (OkRTBV v v c tv r, Subable r, Variable r ~ v, ReftBind r ~ v, IsReft r, FreeVar c tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => RTypeBV v v c tv r -> RTypeBV v v c tv r -> RTypeBV v v c tv r Source #
tyVarsPosition :: RType RTyCon tv r -> Positions tv Source #
tyVarsPosition t returns the type variables appearing | (in positive positions, in negative positions, in undetermined positions) | undetermined positions are due to type constructors and type application
Orphan instances
| Eq RTyVar Source # | Wrappers for GHC Type Elements -------------------------------------------- | ||||||||
| Ord RTyVar Source # | |||||||||
| Hashable RTyCon Source # | |||||||||
| Hashable RTyVar Source # | |||||||||
| Fixpoint Class Source # | |||||||||
| Fixpoint String Source # | |||||||||
| Expression Var Source # | Converting to Fixpoint ---------------------------------------------------- | ||||||||
| SubsTy TyVar Type SpecType Source # | |||||||||
| SubsTy Symbol RSort Sort Source # | |||||||||
| SubsTy BTyVar BSort BSort Source # | |||||||||
| SubsTy BTyVar BSort BTyCon Source # | |||||||||
| SubsTy RTyVar RSort Sort Source # | |||||||||
| SubsTy RTyVar RSort RSort Source # | |||||||||
| SubsTy RTyVar RSort RTyCon Source # | |||||||||
| SubsTy RTyVar RSort SpecType Source # | |||||||||
| SubsTy RTyVar RTyVar SpecType Source # | |||||||||
| SubsTy tv RSort Predicate Source # | |||||||||
| SubsTy tv ty Symbol Source # | |||||||||
| SubsTy tv ty Sort => SubsTy tv ty Expr Source # | |||||||||
| SubsTy tv ty Expr => SubsTy tv ty Reft Source # | |||||||||
| SubsTy tv ty NoReft Source # | |||||||||
| SubsTy Symbol Symbol (BRType r) Source # | |||||||||
| SubsTy tv ty r => SubsTy tv ty (UReft r) Source # | |||||||||
| (SubsTy tv ty a, SubsTy tv ty b) => SubsTy tv ty (a, b) Source # | |||||||||
| SubsTy Symbol Symbol (RTProp BTyCon BTyVar r) Source # | |||||||||
| SubsTy tv ty ty => SubsTy tv ty (PVarBV b v ty) Source # | |||||||||
| (SubsTy tv ty (UReft r), SubsTy tv ty (RType c tv NoReft)) => SubsTy tv ty (RTProp c tv (UReft r)) Source # | |||||||||
| SubsTy BTyVar (RType BTyCon BTyVar NoReft) Sort Source # | |||||||||
| SubsTy BTyVar (RType c BTyVar NoReft) BTyVar Source # | |||||||||
| SubsTy RTyVar (RType RTyCon RTyVar NoReft) RTyVar Source # | |||||||||
| SubsTy BTyVar (RType c BTyVar NoReft) (RTVar BTyVar (RType c BTyVar NoReft)) Source # | |||||||||
| SubsTy RTyVar (RType RTyCon RTyVar NoReft) (RTVar RTyVar (RType RTyCon RTyVar NoReft)) Source # | |||||||||
| Subable (RRProp Reft) Source # | Subable Instances ----------------------------------------------------- | ||||||||
Associated Types
Methods syms :: RRProp Reft -> [Variable (RRProp Reft)] substa :: (Variable (RRProp Reft) -> Variable (RRProp Reft)) -> RRProp Reft -> RRProp Reft substf :: (Variable (RRProp Reft) -> ExprBV (Variable (RRProp Reft)) (Variable (RRProp Reft))) -> RRProp Reft -> RRProp Reft subst :: SubstV (Variable (RRProp Reft)) -> RRProp Reft -> RRProp Reft subst1 :: RRProp Reft -> (Variable (RRProp Reft), ExprBV (Variable (RRProp Reft)) (Variable (RRProp Reft))) -> RRProp Reft | |||||||||
| (Show tv, Show ty) => Show (RTAlias tv ty) Source # | Auxiliary Stuff Used Elsewhere --------------------------------------------- | ||||||||
| (Eq c, Eq tv, Hashable tv, PPrint tv, TyConable c, PPrint c) => Eq (RType c tv NoReft) Source # | |||||||||
| Meet (RTProp BTyCon BTyVar NoReft) Source # | |||||||||
| Meet (RTProp BTyCon BTyVar (UReft Reft)) Source # | |||||||||
| Meet (RTProp RTyCon RTyVar Reft) Source # | |||||||||
| Meet (RTProp RTyCon RTyVar NoReft) Source # | |||||||||
| Meet (RTProp RTyCon RTyVar (UReft Reft)) Source # | |||||||||
| Meet (RType BTyCon BTyVar (UReft Reft)) Source # | |||||||||
| Semigroup (RType RTyCon RTyVar r) => Meet (RType RTyCon RTyVar r) Source # | |||||||||
| (SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, OkRTBV v v c tv r, Variable r ~ v, ReftBind r ~ v, IsReft r, FreeVar c tv, Subable r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => Monoid (RTPropBV v v c tv r) Source # | |||||||||
| (SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, OkRTBV v v c tv r, FreeVar c tv, Subable r, Variable r ~ v, ReftBind r ~ v, IsReft r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => Monoid (RTypeBV v v c tv r) Source # | |||||||||
| (SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, OkRTBV v v c tv r, Variable r ~ v, ReftBind r ~ v, IsReft r, FreeVar c tv, Subable r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => Semigroup (RTPropBV v v c tv r) Source # | |||||||||
| (SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, OkRTBV v v c tv r, FreeVar c tv, Subable r, Variable r ~ v, ReftBind r ~ v, IsReft r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => Semigroup (RTypeBV v v c tv r) Source # | |||||||||
| (SubsTy tv (RTypeBV v v c tv (NoReftB v)) c, OkRTBV v v c tv r, Variable r ~ v, ReftBind r ~ v, IsReft r, FreeVar c tv, Subable r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) r, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTypeBV v v c tv (NoReftB v)), SubsTy tv (RTypeBV v v c tv (NoReftB v)) tv, SubsTy tv (RTypeBV v v c tv (NoReftB v)) (RTVar tv (RTypeBV v v c tv (NoReftB v)))) => Meet (RTPropBV v v c tv r) Source # | |||||||||