Mikan
Safe HaskellNone
LanguageHaskell2010

Mikan.TypeChecking.SyntacticEquality

Description

A syntactic equality check that takes meta instantiations into account, but does not reduce. It replaces

(v, v') <- instantiateFull (v, v')
v == v'

by a more efficient routine which only traverses and instantiates the terms as long as they are equal.

Synopsis

Documentation

checkSyntacticEquality Source #

Arguments

:: (SynEq a, MonadReduce m) 
=> a 
-> a 
-> (a -> a -> m b)

Continuation used upon success.

-> (a -> a -> m b)

Continuation used upon failure.

-> m b 

Syntactic equality check for terms.

Morally, checkSyntacticEquality behaves as if it were implemented as:

checkSyntacticEquality v v' s f = do
  (v, v') <- instantiateFull (v, v')
  if v == v' then s v v' else f v v'

with the follow caveat:

  • Both v and v' are only guaranteed to fully instantiated to the depth at which they are syntactically equal.

class SynEq a Source #

A type is SynEq if it can be checked for syntactic equality.

Minimal complete definition

synEq

Instances

Instances details
SynEq ArgInfo Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: ArgInfo -> ArgInfo -> SynEqA ArgInfo

SynEq Level Source #

Returns levels in canonical form.

Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Level -> Level -> SynEqA Level

SynEq PlusLevel Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: PlusLevel -> PlusLevel -> SynEqA PlusLevel

SynEq Sort Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Sort -> Sort -> SynEqA Sort

SynEq Term Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Term -> Term -> SynEqA Term

SynEq Type Source #

Syntactic equality ignores sorts.

Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Type -> Type -> SynEqA Type

SynEq Bool Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Bool -> Bool -> SynEqA Bool

SynEq a => SynEq (Arg a) Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Arg a -> Arg a -> SynEqA (Arg a)

(Subst a, SynEq a) => SynEq (Abs a) Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Abs a -> Abs a -> SynEqA (Abs a)

SynEq a => SynEq (Elim' a) Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Elim' a -> Elim' a -> SynEqA (Elim' a)

SynEq a => SynEq (Dom a) Source #

Ignores tactic argument annotations.

Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: Dom a -> Dom a -> SynEqA (Dom a)

SynEq a => SynEq [a] Source # 
Instance details

Defined in Mikan.TypeChecking.SyntacticEquality

Methods

synEq :: [a] -> [a] -> SynEqA [a]