summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChloe Brown <chloe.brown.00@outlook.com>2023-04-01 13:01:44 +0100
committerChloe Brown <chloe.brown.00@outlook.com>2023-04-01 13:30:46 +0100
commitb89ece01704e3b8040e75687f1f8524027d7f7e8 (patch)
treebb95f05f1bb935374a603456d463db5988432ee6 /src
parenta0a1e89e7d27711ff67c909ae2d42b153b806280 (diff)
Define Reduction.
Diffstat (limited to 'src')
-rw-r--r--src/Core/Reduction.idr47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Core/Reduction.idr b/src/Core/Reduction.idr
new file mode 100644
index 0000000..0b3a651
--- /dev/null
+++ b/src/Core/Reduction.idr
@@ -0,0 +1,47 @@
+module Core.Reduction
+
+import Core.Context
+import Core.Declarative
+import Core.Term
+import Core.Term.Environment
+import Core.Term.Substitution
+
+public export
+data TermStep : Env sx -> Term sx -> Term sx -> Term sx -> Type where
+ PiBeta :
+ TypeWf env f ->
+ TermWf (env :< f) t g ->
+ TermWf env u f ->
+ ---
+ TermStep env (App (Abs n t) u) (subst t $ sub1 u) (subst g $ sub1 u)
+ AppStep :
+ TermStep env t u (Pi n f g) ->
+ TermWf env a f ->
+ ---
+ TermStep env (App t a) (App u a) (subst g $ sub1 a)
+ StepConv :
+ TermStep env t u a ->
+ TypeConv env a b ->
+ ---
+ TermStep env t u b
+
+public export
+TypeStep : Env sx -> Term sx -> Term sx -> Type
+TypeStep env a b = TermStep env a b Set
+
+namespace Type
+ public export
+ data TypeRed : Env sx -> Term sx -> Term sx -> Type where
+ Stay : TypeWf env a -> TypeRed env a a
+ (::) : TypeStep env a b -> TypeRed env b c -> TypeRed env a c
+
+namespace Term
+ public export
+ data TermRed : Env sx -> Term sx -> Term sx -> Term sx -> Type where
+ Stay : TermWf env t a -> TermRed env t t a
+ (::) : TermStep env t u a -> TermRed env u v a -> TermRed env t v a
+
+%name TypeStep step
+%name TermStep step
+%name TypeRed steps
+%name TermRed steps