import public Core.Name
import public Libraries.Data.List.ThinScopeable : Type -> TypeSomething which is having similar order as Scope itself
Scope : TypeA scope is represented by a list of names. E.g. in the following
rule, the scope Γ is extended with x when going under the λx.
binder:
Γ, x ⊢ t : B
-----------------------------
Γ ⊢ λx. t : A → B
empty : Scopeable aaddInner : Scopeable a -> Scopeable a -> Scopeable abind : Scopeable a -> a -> Scopeable asingle : a -> Scopeable aScoped : TypeA scoped definition is one indexed by a scope
scopeEq : (xs : Scope) -> (ys : Scope) -> Maybe (xs = ys)mkFresh : Scope -> Name -> Namedata CompatibleVars : List a -> List a -> TypePre : CompatibleVars xs xsExt : CompatibleVars xs ys -> CompatibleVars (n :: xs) (m :: ys)invertExt : CompatibleVars (n :: xs) (m :: ys) -> CompatibleVars xs ysextendCompats : (args : List a) -> CompatibleVars xs ys -> CompatibleVars (args ++ xs) (args ++ ys)decCompatibleVars : (xs : List a) -> (ys : List a) -> Dec (CompatibleVars xs ys)areCompatibleVars : (xs : List a) -> (ys : List a) -> Maybe (CompatibleVars xs ys)0 Weakenable : Scoped -> Type0 Strengthenable : Scoped -> Type0 GenWeakenable : Scoped -> Type0 Thinnable : Scoped -> Type0 Shrinkable : Scoped -> Type0 Embeddable : Scoped -> Typeinterface Weaken : Scoped -> Typeweaken : tm vars -> tm (nm :: vars)weakenNs : Weakenable tmweaken : Weaken tm => tm vars -> tm (nm :: vars)weakenNs : Weaken tm => Weakenable tminterface GenWeaken : Scoped -> TypegenWeakenNs : GenWeakenable tmgenWeakenNs : GenWeaken tm => GenWeakenable tmgenWeaken : GenWeaken tm => SizeOf local -> tm (local ++ outer) -> tm (local ++ (n :: outer))interface Strengthen : Scoped -> TypeStrengthen VarStrengthen (NVar nm)strengthenNs : Strengthen tm => Strengthenable tmstrengthen : Strengthen tm => tm (nm :: vars) -> Maybe (tm vars)interface FreelyEmbeddable : Scoped -> Typeembed : Embeddable tmembed : FreelyEmbeddable tm => Embeddable tmFunctorFreelyEmbeddable : Functor f => FreelyEmbeddable tm => FreelyEmbeddable (f . tm)ListFreelyEmbeddable : FreelyEmbeddable tm => FreelyEmbeddable (List . tm)MaybeFreelyEmbeddable : FreelyEmbeddable tm => FreelyEmbeddable (Maybe . tm)GenWeakenWeakens : GenWeaken tm => Weaken tmFunctorGenWeaken : Functor f => GenWeaken tm => GenWeaken (f . tm)FunctorWeaken : Functor f => Weaken tm => Weaken (f . tm)ListWeaken : Weaken tm => Weaken (List . tm)MaybeWeaken : Weaken tm => Weaken (Maybe . tm)interface IsScoped : Scoped -> TypecompatNs : CompatibleVars xs ys -> tm xs -> tm ysthin : Thinnable tmshrink : Shrinkable tmcompatNs : IsScoped tm => CompatibleVars xs ys -> tm xs -> tm ysthin : IsScoped tm => Thinnable tmshrink : IsScoped tm => Shrinkable tmcompat : IsScoped tm => tm (m :: xs) -> tm (n :: xs)