Agda-2.5.1.1: A dependently typed functional programming language and proof assistant

Safe HaskellNone
LanguageHaskell98

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

Documentation

class PatternFrom a b where Source #

Turn a term into a non-linear pattern, treating the free variables as pattern variables. The first argument is the number of bound variables (from pattern lambdas).

Minimal complete definition

patternFrom

Methods

patternFrom :: Int -> a -> TCM b Source #

Instances

PatternFrom Term NLPat Source # 

Methods

patternFrom :: Int -> Term -> TCM NLPat Source #

PatternFrom a b => PatternFrom [a] [b] Source # 

Methods

patternFrom :: Int -> [a] -> TCM [b] Source #

PatternFrom a b => PatternFrom (Dom a) (Dom b) Source # 

Methods

patternFrom :: Int -> Dom a -> TCM (Dom b) Source #

PatternFrom a b => PatternFrom (Arg a) (Arg b) Source # 

Methods

patternFrom :: Int -> Arg a -> TCM (Arg b) Source #

PatternFrom a b => PatternFrom (Type' a) (Type' b) Source # 

Methods

patternFrom :: Int -> Type' a -> TCM (Type' b) Source #

PatternFrom a b => PatternFrom (Abs a) (Abs b) Source # 

Methods

patternFrom :: Int -> Abs a -> TCM (Abs b) Source #

PatternFrom a b => PatternFrom (Elim' a) (Elim' b) Source # 

Methods

patternFrom :: Int -> Elim' a -> TCM (Elim' b) Source #

type NLM = ExceptT Blocked_ (StateT NLMState ReduceM) Source #

Monad for non-linear matching.

tellSub :: Int -> Term -> NLM () Source #

Add substitution i |-> v 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 

Fields

  • eqFreeVars :: Telescope

    Telescope of free variables in the equation

  • eqLhs :: Term

    Term from pattern, living in pattern context.

  • eqRhs :: Term

    Term from scrutinee, living in context where matching was invoked.

class Match a b where Source #

Match a non-linear pattern against a neutral term, returning a substitution.

Minimal complete definition

match

Methods

match :: Telescope -> Telescope -> a -> b -> NLM () Source #

Instances

Match NLPat Term Source # 

Methods

match :: Telescope -> Telescope -> NLPat -> Term -> NLM () Source #

Match a b => Match [a] [b] Source # 

Methods

match :: Telescope -> Telescope -> [a] -> [b] -> NLM () Source #

Match a b => Match (Dom a) (Dom b) Source # 

Methods

match :: Telescope -> Telescope -> Dom a -> Dom b -> NLM () Source #

Match a b => Match (Arg a) (Arg b) Source # 

Methods

match :: Telescope -> Telescope -> Arg a -> Arg b -> NLM () Source #

Match a b => Match (Type' a) (Type' b) Source # 

Methods

match :: Telescope -> Telescope -> Type' a -> Type' b -> NLM () Source #

(Match a b, Subst t1 a, Subst t2 b) => Match (Abs a) (Abs b) Source # 

Methods

match :: Telescope -> Telescope -> Abs a -> Abs b -> NLM () Source #

Match a b => Match (Elim' a) (Elim' b) Source # 

Methods

match :: Telescope -> Telescope -> Elim' a -> Elim' b -> NLM () Source #

equal :: Term -> Term -> ReduceM Bool Source #

Untyped βη-equality, does not handle things like empty record types.

class RaiseNLP a where Source #

Raise (bound) variables in a NLPat

Minimal complete definition

raiseNLPFrom

Methods

raiseNLPFrom :: Int -> Int -> a -> a Source #

raiseNLP :: Int -> a -> a Source #

Instances

RaiseNLP NLPat Source # 
RaiseNLP a => RaiseNLP [a] Source # 

Methods

raiseNLPFrom :: Int -> Int -> [a] -> [a] Source #

raiseNLP :: Int -> [a] -> [a] Source #

RaiseNLP a => RaiseNLP (Dom a) Source # 

Methods

raiseNLPFrom :: Int -> Int -> Dom a -> Dom a Source #

raiseNLP :: Int -> Dom a -> Dom a Source #

RaiseNLP a => RaiseNLP (Arg a) Source # 

Methods

raiseNLPFrom :: Int -> Int -> Arg a -> Arg a Source #

raiseNLP :: Int -> Arg a -> Arg a Source #

RaiseNLP a => RaiseNLP (Type' a) Source # 

Methods

raiseNLPFrom :: Int -> Int -> Type' a -> Type' a Source #

raiseNLP :: Int -> Type' a -> Type' a Source #

RaiseNLP a => RaiseNLP (Abs a) Source # 

Methods

raiseNLPFrom :: Int -> Int -> Abs a -> Abs a Source #

raiseNLP :: Int -> Abs a -> Abs a Source #

RaiseNLP a => RaiseNLP (Elim' a) Source # 

Methods

raiseNLPFrom :: Int -> Int -> Elim' a -> Elim' a Source #

raiseNLP :: Int -> Elim' a -> Elim' a Source #