| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Agda.TypeChecking.Rewriting.NonLinMatch
Description
Non-linear matching of the lhs of a rewrite rule against a neutral term.
Given a lhs
Δ ⊢ lhs : B
and a candidate term
Γ ⊢ t : A
we seek a substitution Γ ⊢ σ : Δ such that
Γ ⊢ B[σ] = A and Γ ⊢ lhs[σ] = t : A
Synopsis
- type NLM = ExceptT Blocked_ (StateT NLMState ReduceM)
 - data NLMState = NLMState {}
 - nlmSub :: Lens' Sub NLMState
 - nlmEqs :: Lens' PostponedEquations NLMState
 - runNLM :: MonadReduce m => NLM () -> m (Either Blocked_ NLMState)
 - matchingBlocked :: Blocked_ -> NLM ()
 - tellSub :: Relevance -> Int -> Type -> Term -> NLM ()
 - tellEq :: Telescope -> Telescope -> Type -> Term -> Term -> NLM ()
 - type Sub = IntMap (Relevance, Term)
 - data PostponedEquation = PostponedEquation {}
 - type PostponedEquations = [PostponedEquation]
 - class Match t a b where
 - reallyFree :: (MonadReduce m, Reduce a, ForceNotFree a) => IntSet -> a -> m (Either Blocked_ (Maybe a))
 - makeSubstitution :: Telescope -> Sub -> Substitution
 - checkPostponedEquations :: (MonadReduce m, MonadAddContext m, HasConstInfo m, HasBuiltins m, MonadDebug m) => Substitution -> PostponedEquations -> m (Maybe Blocked_)
 - nonLinMatch :: (MonadReduce m, MonadAddContext m, HasConstInfo m, HasBuiltins m, MonadDebug m, Match t a b) => Telescope -> t -> a -> b -> m (Either Blocked_ Substitution)
 - equal :: (MonadReduce m, MonadAddContext m, HasConstInfo m, HasBuiltins m) => Type -> Term -> Term -> m (Maybe Blocked_)
 
Documentation
Constructors
| NLMState | |
Fields 
  | |
matchingBlocked :: Blocked_ -> NLM () Source #
tellSub :: Relevance -> Int -> Type -> Term -> NLM () Source #
Add substitution i |-> v : a to result of matching.
data PostponedEquation Source #
Matching against a term produces a constraint which we have to verify after applying the substitution computed by matching.
Constructors
| PostponedEquation | |
type PostponedEquations = [PostponedEquation] Source #
class Match t a b where Source #
Match a non-linear pattern against a neutral term, returning a substitution.
Methods
reallyFree :: (MonadReduce m, Reduce a, ForceNotFree a) => IntSet -> a -> m (Either Blocked_ (Maybe a)) Source #
makeSubstitution :: Telescope -> Sub -> Substitution Source #
checkPostponedEquations :: (MonadReduce m, MonadAddContext m, HasConstInfo m, HasBuiltins m, MonadDebug m) => Substitution -> PostponedEquations -> m (Maybe Blocked_) Source #
nonLinMatch :: (MonadReduce m, MonadAddContext m, HasConstInfo m, HasBuiltins m, MonadDebug m, Match t a b) => Telescope -> t -> a -> b -> m (Either Blocked_ Substitution) Source #
equal :: (MonadReduce m, MonadAddContext m, HasConstInfo m, HasBuiltins m) => Type -> Term -> Term -> m (Maybe Blocked_) Source #
Typed βη-equality, also handles empty record types.
   Returns Nothing if the terms are equal, or `Just b` if the terms are not
   (where b contains information about possible metas blocking the comparison)