-
Notifications
You must be signed in to change notification settings - Fork 0
/
last.rkt
52 lines (41 loc) · 860 Bytes
/
last.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
45
46
47
48
49
50
51
52
#lang pie
(claim mot-last
(-> U Nat
U))
(define mot-last
(lambda (E)
(lambda (k)
(-> (Vec E (add1 k))
E))))
(claim step-last
(Pi ((E U)
(l-1 Nat))
(-> (-> (Vec E (add1 l-1))
E)
(-> (Vec E (add1 (add1 l-1)))
E))))
(define step-last
(lambda (E l-1)
(lambda (f-1)
(lambda (es)
(f-1 (tail es))))))
(claim base-last
(Pi ((E U))
(-> (Vec E (add1 zero))
E)))
(define base-last
(lambda (E es)
(head es)))
(claim last
(Pi ((E U)
(k Nat))
(-> (Vec E (add1 k))
E)))
(define last
(lambda (E k es)
((ind-Nat
k
(mot-last E)
(base-last E)
(step-last E)) es)))
(last Atom 1 (vec:: 'a (vec:: 'b vecnil)))