summaryrefslogtreecommitdiff
path: root/src/Total/NormalForm.idr
diff options
context:
space:
mode:
authorChloe Brown <chloe.brown.00@outlook.com>2023-06-01 11:54:49 +0100
committerChloe Brown <chloe.brown.00@outlook.com>2023-06-01 11:54:49 +0100
commit3eb03e2347b35432f7eae7d6847ec9ecf1dff19e (patch)
treeb1de56d9fdb3cb229d73f3a774997080d5e6f2df /src/Total/NormalForm.idr
parentfddd990ce9aa233ddc3b1591fb63e29b96e8c61a (diff)
Define terms with substitution as an operation.
Diffstat (limited to 'src/Total/NormalForm.idr')
-rw-r--r--src/Total/NormalForm.idr31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Total/NormalForm.idr b/src/Total/NormalForm.idr
new file mode 100644
index 0000000..7421ca9
--- /dev/null
+++ b/src/Total/NormalForm.idr
@@ -0,0 +1,31 @@
+module Total.NormalForm
+
+import Total.Reduction
+import Total.Term
+
+public export
+data Neutral : Term ctx ty -> Type
+public export
+data Normal : Term ctx ty -> Type
+
+data Neutral where
+ Var : Neutral (Var i)
+ App : Neutral t -> Normal u -> Neutral (App t u)
+ Rec : Neutral t -> Normal u -> Normal v -> Neutral (Rec t u v)
+
+data Normal where
+ Ntrl : Neutral t -> Normal t
+ Abs : Normal t -> Normal (Abs t)
+ Zero : Normal Zero
+ Suc : Normal t -> Normal (Suc t)
+
+%name Neutral n, m, k
+%name Normal n, m, k
+
+record NormalForm (0 t : Term ctx ty) where
+ constructor MkNf
+ term : Term ctx ty
+ 0 steps : t >= term
+ 0 normal : Normal term
+
+%name NormalForm nf