-
Notifications
You must be signed in to change notification settings - Fork 0
/
list-vec.rkt
46 lines (36 loc) · 908 Bytes
/
list-vec.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#lang pie
(claim mot-replicate
(-> U Nat
U))
(define mot-replicate
(lambda (E)
(lambda (l)
(Vec E l))))
(claim step-replicate
(Pi ((E U)
(e E)
(l-1 Nat))
(-> (mot-replicate E l-1)
(mot-replicate E (add1 l-1)))))
(claim list->vec
(Pi ((E U))
(-> (List E)
(Sigma ((l Nat))
(Vec E l)))))
(claim step-list->vec
(Pi ((E U))
(-> E (List E) (Sigma ((l Nat))
(Vec E l))
(Sigma ((l Nat))
(Vec E l)))))
(define step-list->vec
(lambda (E)
(lambda (e es list->vec-es)
(cons (add1 (car list->vec-es))
(vec:: e (cdr list->vec-es))))))
(define list->vec
(lambda (E)
(lambda (es)
(rec-List es
(the (Pair Nat (Vec E 0)) (cons 0 vecnil))
(step-list->vec E)))))