diff options
author | Chloe Brown <chloe.brown.00@outlook.com> | 2023-06-21 16:05:44 +0100 |
---|---|---|
committer | Chloe Brown <chloe.brown.00@outlook.com> | 2023-06-21 16:05:44 +0100 |
commit | 0ddaf1b2c9ca66cf0ae03d2f6ad792c7885dfc32 (patch) | |
tree | 8dac25792a00c24aa1d55288bb538fab89cc0092 /src/Encoded/Fin.idr | |
parent | af7c222cc3e487cd3ca8b5dd8749b7e258da7c7c (diff) |
Add sums, vectors and arithmetic encodings.
Also define pretty printing of terms.
Diffstat (limited to 'src/Encoded/Fin.idr')
-rw-r--r-- | src/Encoded/Fin.idr | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Encoded/Fin.idr b/src/Encoded/Fin.idr new file mode 100644 index 0000000..901c612 --- /dev/null +++ b/src/Encoded/Fin.idr @@ -0,0 +1,48 @@ +module Encoded.Fin + +import public Data.Nat + +import Data.Stream +import Encoded.Arith +import Encoded.Pair +import Term.Semantics +import Term.Syntax + +export +Fin : Nat -> Ty +Fin k = N + +oldShow : Nat -> String +oldShow = show + +export +zero : Term (Fin (S k)) ctx +zero = Zero + +export +suc : Term (Fin k ~> Fin (S k)) ctx +suc = Abs' Suc + +export +inject : Term (Fin k ~> Fin (S k)) ctx +inject = Id + +export +absurd : {ty : Ty} -> Term (Fin 0 ~> ty) ctx +absurd = Arb + +export +induct : {ty : Ty} -> Term (Fin (S k) ~> ty ~> (Fin k * ty ~> ty) ~> ty) ctx +induct = rec + +export +forget : Term (Fin k ~> N) ctx +forget = Id + +export +allSem : (k : Nat) -> List (TypeOf (Fin k)) +allSem k = take k nats + +export +divmod' : (k : Nat) -> {auto 0 ok : NonZero k} -> Term (N ~> N * Fin k) ctx +divmod' k = Abs' (\n => App divmod [<n, Lit k]) |