diff options
author | Chloe Brown <chloe.brown.00@outlook.com> | 2023-04-08 15:23:17 +0100 |
---|---|---|
committer | Chloe Brown <chloe.brown.00@outlook.com> | 2023-04-08 15:44:50 +0100 |
commit | 1995d5aba2d63e1854d138fda6747a8865a43bcb (patch) | |
tree | ebd1eb9af815a76eeb3af9cf1792c022a0014c88 | |
parent | e3e810024343f0262b452cd9825ac77c6c897c16 (diff) |
Define generic equality.
-rw-r--r-- | obs.ipkg | 1 | ||||
-rw-r--r-- | src/Core/Generic.idr | 116 |
2 files changed, 117 insertions, 0 deletions
@@ -11,6 +11,7 @@ modules , Core.Declarative , Core.Declarative.Substitution , Core.Environment + , Core.Generic , Core.Name , Core.Reduction , Core.Term diff --git a/src/Core/Generic.idr b/src/Core/Generic.idr new file mode 100644 index 0000000..37b6b36 --- /dev/null +++ b/src/Core/Generic.idr @@ -0,0 +1,116 @@ +module Core.Generic + +import Core.Context +import Core.Declarative +import Core.Environment +import Core.Reduction +import Core.Term +import Core.Term.NormalForm +import Core.Term.Substitution +import Core.Thinning +import Core.Var + +%prefix_record_projections off + +-- Definition ------------------------------------------------------------------ + +record GenericEquality where + constructor MkEquality + TypeEq : forall sx. Env sx -> Term sx -> Term sx -> Type + TermEq : forall sx. Env sx -> Term sx -> Term sx -> Term sx -> Type + NtrlEq : forall sx. Env sx -> Term sx -> Term sx -> Term sx -> Type + +interface IsGenericEquality (eq : GenericEquality) where + -- Subsumption + ntrlImpliesTermEq : eq.NtrlEq {sx} env t u a -> eq.TermEq env t u a + termImpliesTypeEq : eq.TermEq {sx} env a b Set -> eq.TypeEq env a b + eqImpliesTermConv : eq.TermEq {sx} env t u a -> TermConv env t u a + eqImpliesTypeConv : eq.TypeEq {sx} env a b -> TypeConv env a b + + -- Partial Equivalence + ntrlSym : eq.NtrlEq {sx} env t u a -> eq.NtrlEq env u t a + ntrlTrans : eq.NtrlEq {sx} env t u a -> eq.NtrlEq env u v a -> eq.NtrlEq env t v a + termSym : eq.TermEq {sx} env t u a -> eq.TermEq env u t a + termTrans : eq.TermEq {sx} env t u a -> eq.TermEq env u v a -> eq.TermEq env t v a + typeSym : eq.TypeEq {sx} env a b -> eq.TypeEq env b a + typeTrans : eq.TypeEq {sx} env a b -> eq.TypeEq env b c -> eq.TypeEq env a c + + -- Conversion + ntrlConv : eq.NtrlEq {sx} env t u a -> TypeConv env a b -> eq.NtrlEq env t u b + termConv : eq.TermEq {sx} env t u a -> TypeConv env a b -> eq.TermEq env t u b + + -- Weakening + wknPresNtrlEq : + eq.NtrlEq {sx} env1 t u a -> + EnvWf env2 -> + IsExtension thin env2 env1 -> + eq.NtrlEq {sx = sy} env2 (wkn t thin) (wkn u thin) (wkn a thin) + wknPresTermEq : + eq.TermEq {sx} env1 t u a -> + EnvWf env2 -> + IsExtension thin env2 env1 -> + eq.TermEq {sx = sy} env2 (wkn t thin) (wkn u thin) (wkn a thin) + wknPresTypeEq : + eq.TypeEq {sx} env1 a b -> + EnvWf env2 -> + IsExtension thin env2 env1 -> + eq.TypeEq {sx = sy} env2 (wkn a thin) (wkn b thin) + + -- Weak Head Expansion + typeExpansion : + TypeRed env a a' -> + TypeRed env b b' -> + Whnf a' -> + Whnf b' -> + eq.TypeEq {sx} env a' b' -> + eq.TypeEq env a b + termExpansion : + TypeRed env a b -> + TermRed env t t' b -> + TermRed env u u' b -> + Whnf b -> + Whnf t' -> + Whnf u' -> + eq.TermEq {sx} env t' u' b -> + eq.TermEq env t u a + + -- Type Constructor Congruence + typeSet : + EnvWf env -> + --- + eq.TypeEq {sx} env Set Set + typePi : + TypeWf env f -> + eq.TypeEq env f h -> + eq.TypeEq (env :< f) g e -> + --- + eq.TypeEq {sx} env (Pi n f g) (Pi n h e) + + -- Term Constructor Congruence and η + termPi : + TypeWf env f -> + eq.TermEq env f h Set -> + eq.TermEq (env :< f) g e Set -> + --- + eq.TermEq {sx} env (Pi n f g) (Pi n h e) Set + termPiEta : + TypeWf env f -> + TermWf env t (Pi n f g) -> + TermWf env u (Pi n f g) -> + eq.TermEq (env :< f) + (App (wkn t (wkn1 _ n)) (Var Var.here)) + (App (wkn u (wkn1 _ n)) (Var Var.here)) + g -> + --- + eq.TermEq {sx} env t u (Pi n f g) + + -- Neutral Congruence + ntrlVar : + TermWf env (Var i) a -> + --- + eq.NtrlEq {sx} env (Var i) (Var i) a + ntrlApp : + eq.NtrlEq env t u (Pi n f g) -> + eq.TermEq env a b f -> + --- + eq.NtrlEq {sx} env (App t a) (App u b) (subst g (sub1 a)) |