84 lines
2.3 KiB
Scheme
84 lines
2.3 KiB
Scheme
;"one point basis"
|
|
;"formal aspects of computing"
|
|
|
|
(module combinators mzscheme
|
|
(require "../reduction-semantics.ss"
|
|
"../gui.ss")
|
|
|
|
(initial-font-size 12)
|
|
(reduction-steps-cutoff 100)
|
|
(initial-char-width 80)
|
|
|
|
(define lang
|
|
(language
|
|
(e (e e)
|
|
comb
|
|
abs1
|
|
abs2
|
|
abs3)
|
|
(e-ctxt (e e-ctxt)
|
|
(e-ctxt e)
|
|
hole)
|
|
(comb i
|
|
j
|
|
b
|
|
c
|
|
c*
|
|
w)))
|
|
|
|
(define ij-reductions
|
|
(list
|
|
(reduction/context lang
|
|
e-ctxt
|
|
(i e_1)
|
|
(term e_1))
|
|
(reduction/context lang
|
|
e-ctxt
|
|
((((j e_a) e_b) e_c) e_d)
|
|
(term ((e_a e_b) ((e_a e_d) e_c))))))
|
|
|
|
(define reductions
|
|
(append
|
|
ij-reductions
|
|
(list
|
|
(reduction/context lang
|
|
e-ctxt
|
|
(((b e_m) e_n) e_l)
|
|
(term (e_m (e_n e_l))))
|
|
(reduction/context lang
|
|
e-ctxt
|
|
(((c e_m) e_n) e_l)
|
|
(term ((e_m e_l) e_n)))
|
|
(reduction/context lang
|
|
e-ctxt
|
|
((c* e_a) e_b)
|
|
(term (e_b e_a)))
|
|
(reduction/context lang
|
|
e-ctxt
|
|
((w e_a) e_b)
|
|
(term ((e_a e_b) e_b))))))
|
|
|
|
|
|
(define c* `((j i) i))
|
|
(define (make-c c*) `(((j ,c*) (j ,c*)) (j ,c*)))
|
|
(define (make-b c) `((,c ((j i) ,c)) (j i)))
|
|
(define (make-w b c c*) `(,c ((,c ((,b ,c) ((,c ((,b j) ,c*)) ,c*))) ,c*)))
|
|
(define (make-s b c w) `((,b ((,b (,b ,w)) ,c)) (,b ,b)))
|
|
|
|
(traces/multiple lang
|
|
reductions
|
|
(list
|
|
`((,c* abs1) abs2)
|
|
`(((,(make-c 'c*) abs1) abs2) abs3)
|
|
`(((,(make-b 'c) abs1) abs2) abs3)
|
|
`((,(make-w 'b 'c 'c*) abs1) abs2)
|
|
`(((,(make-s 'b 'c 'w) abs1) abs2) abs3)))
|
|
|
|
;; s in terms of i and j ( > 18,000 reductions and probably still long way to go)
|
|
'(traces lang ij-reductions
|
|
(make-s (make-b (make-c c*))
|
|
(make-c c*)
|
|
(make-w (make-b (make-c c*))
|
|
(make-c c*)
|
|
c*))))
|