Safe Haskell | None |
---|---|
Language | Haskell2010 |
- externals :: [External]
- type EqualityProof c m = (Rewrite c m CoreExpr, Rewrite c m CoreExpr)
- flipEquality :: Equality -> Equality
- eqLhsIntroR :: Equality -> Rewrite c HermitM Core
- eqRhsIntroR :: Equality -> Rewrite c HermitM Core
- birewrite :: (AddBindings c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, MonadCatch m, MonadUnique m) => Equality -> BiRewrite c m CoreExpr
- extensionalityR :: Maybe String -> Rewrite c HermitM Equality
- getLemmasT :: HasLemmas m => Transform c m x Lemmas
- getLemmaByNameT :: (HasLemmas m, Monad m) => LemmaName -> Transform c m x Lemma
- insertLemmaR :: (HasLemmas m, Monad m) => LemmaName -> Lemma -> Rewrite c m a
- lemmaR :: LemmaName -> BiRewriteH CoreExpr
- markLemmaUsedR :: (HasLemmas m, Monad m) => LemmaName -> Rewrite c m a
- modifyLemmaR :: (HasLemmas m, Monad m) => LemmaName -> (LemmaName -> LemmaName) -> Rewrite c m Equality -> (Bool -> Bool) -> (Bool -> Bool) -> Rewrite c m a
- lhsT :: (AddBindings c, Monad m, ReadPath c Crumb) => Transform c m CoreExpr b -> Transform c m Equality b
- rhsT :: (AddBindings c, Monad m, ReadPath c Crumb) => Transform c m CoreExpr b -> Transform c m Equality b
- bothT :: (AddBindings c, Monad m, ReadPath c Crumb) => Transform c m CoreExpr b -> Transform c m Equality (b, b)
- forallVarsT :: Monad m => Transform c m [Var] b -> Transform c m Equality b
- lhsR :: (AddBindings c, Monad m, ReadPath c Crumb) => Rewrite c m CoreExpr -> Rewrite c m Equality
- rhsR :: (AddBindings c, Monad m, ReadPath c Crumb) => Rewrite c m CoreExpr -> Rewrite c m Equality
- bothR :: (AddBindings c, MonadCatch m, ReadPath c Crumb) => Rewrite c m CoreExpr -> Rewrite c m Equality
- ppEqualityT :: PrettyPrinter -> TransformH Equality DocH
- proveEqualityT :: forall c m. (AddBindings c, Monad m, ReadPath c Crumb) => EqualityProof c m -> Transform c m Equality ()
- verifyEqualityT :: Monad m => Transform c m Equality ()
- verifyEqualityLeftToRightT :: MonadCatch m => CoreExpr -> CoreExpr -> Rewrite c m CoreExpr -> Transform c m a ()
- verifyEqualityCommonTargetT :: MonadCatch m => CoreExpr -> CoreExpr -> EqualityProof c m -> Transform c m a ()
- verifyIsomorphismT :: CoreExpr -> CoreExpr -> Rewrite c HermitM CoreExpr -> Rewrite c HermitM CoreExpr -> Transform c HermitM a ()
- verifyRetractionT :: CoreExpr -> CoreExpr -> Rewrite c HermitM CoreExpr -> Transform c HermitM a ()
- retractionBR :: forall c. Maybe (Rewrite c HermitM CoreExpr) -> CoreExpr -> CoreExpr -> BiRewrite c HermitM CoreExpr
- alphaEqualityR :: (Var -> Bool) -> (String -> String) -> RewriteH Equality
- unshadowEqualityR :: RewriteH Equality
- instantiateDictsR :: RewriteH Equality
- instantiateEquality :: MonadIO m => [(Var, CoreExpr, [Var])] -> Equality -> m Equality
- instantiateEqualityVar :: MonadIO m => (Var -> Bool) -> CoreExpr -> [Var] -> Equality -> m Equality
- instantiateEqualityVarR :: (Var -> Bool) -> CoreString -> RewriteH Equality
- discardUniVars :: Equality -> Equality
Equational Reasoning
flipEquality :: Equality -> Equality Source
Flip the LHS and RHS of a Equality
.
birewrite :: (AddBindings c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, MonadCatch m, MonadUnique m) => Equality -> BiRewrite c m CoreExpr Source
getLemmasT :: HasLemmas m => Transform c m x Lemmas Source
lemmaR :: LemmaName -> BiRewriteH CoreExpr Source
Lifting transformations over Equality
lhsT :: (AddBindings c, Monad m, ReadPath c Crumb) => Transform c m CoreExpr b -> Transform c m Equality b Source
rhsT :: (AddBindings c, Monad m, ReadPath c Crumb) => Transform c m CoreExpr b -> Transform c m Equality b Source
bothT :: (AddBindings c, Monad m, ReadPath c Crumb) => Transform c m CoreExpr b -> Transform c m Equality (b, b) Source
forallVarsT :: Monad m => Transform c m [Var] b -> Transform c m Equality b Source
Lift a transformation over '[Var]' into a transformation over the universally quantified variables of a Equality
.
lhsR :: (AddBindings c, Monad m, ReadPath c Crumb) => Rewrite c m CoreExpr -> Rewrite c m Equality Source
rhsR :: (AddBindings c, Monad m, ReadPath c Crumb) => Rewrite c m CoreExpr -> Rewrite c m Equality Source
bothR :: (AddBindings c, MonadCatch m, ReadPath c Crumb) => Rewrite c m CoreExpr -> Rewrite c m Equality Source
proveEqualityT :: forall c m. (AddBindings c, Monad m, ReadPath c Crumb) => EqualityProof c m -> Transform c m Equality () Source
Verify that a Equality
holds, by applying a rewrite to each side, and checking that the results are equal.
verifyEqualityT :: Monad m => Transform c m Equality () Source
Verify that the left- and right-hand sides of a Equality
are alpha equivalent.
verifyEqualityLeftToRightT :: MonadCatch m => CoreExpr -> CoreExpr -> Rewrite c m CoreExpr -> Transform c m a () Source
Given two expressions, and a rewrite from the former to the latter, verify that rewrite.
verifyEqualityCommonTargetT :: MonadCatch m => CoreExpr -> CoreExpr -> EqualityProof c m -> Transform c m a () Source
Given two expressions, and a rewrite to apply to each, verify that the resulting expressions are equal.
verifyIsomorphismT :: CoreExpr -> CoreExpr -> Rewrite c HermitM CoreExpr -> Rewrite c HermitM CoreExpr -> Transform c HermitM a () Source
Given f :: X -> Y and g :: Y -> X, verify that f (g y) ==> y and g (f x) ==> x.
verifyRetractionT :: CoreExpr -> CoreExpr -> Rewrite c HermitM CoreExpr -> Transform c HermitM a () Source
Given f :: X -> Y and g :: Y -> X, verify that f (g y) ==> y.
retractionBR :: forall c. Maybe (Rewrite c HermitM CoreExpr) -> CoreExpr -> CoreExpr -> BiRewrite c HermitM CoreExpr Source
Given f :: X -> Y and g :: Y -> X, and a proof that f (g y) ==> y, then f (g y) == y.
instantiateEquality :: MonadIO m => [(Var, CoreExpr, [Var])] -> Equality -> m Equality Source
Instantiate a set of universally quantified variables in a Equality
.
It is important that all type variables appear before any value-level variables in the first argument.
instantiateEqualityVar :: MonadIO m => (Var -> Bool) -> CoreExpr -> [Var] -> Equality -> m Equality Source
Instantiate one of the universally quantified variables in a Equality
.
Note: assumes implicit ordering of variables, such that substitution happens to the right
as it does in case alternatives. Only first variable that matches predicate is
instantiated.
instantiateEqualityVarR :: (Var -> Bool) -> CoreString -> RewriteH Equality Source
discardUniVars :: Equality -> Equality Source