#lang racket (require slideshow redex "list-machine.rkt" "list-machine-typing.rkt") (define (with-rewriters t) (define rewrite-lookup (match-lambda [(list op id r v a cp) (list "" r "(" v ") = " a)])) (define set-rewrite (match-lambda [(list op id r1 v a r2 cp) (list "" r1 "[" v ":=" a "] = " r2)])) (define subset-rewrite (match-lambda [(list op id left right cp) (list "" left " ⊂ " right "")])) (define (turn which subscr) (hbl-append (text which (default-style) (default-font-size)) (text subscr (cons 'subscript (default-style)) (default-font-size)) (text " " (default-style) (default-font-size)))) (with-compound-rewriters (['var-lookup rewrite-lookup] ['var-set set-rewrite] ['program-lookup rewrite-lookup] [':lookup rewrite-lookup] [':set set-rewrite] ['check-program (match-lambda [(list op id p Π cp) (list (turn "⊨" "prog") p " : " Π)])] ['check-blocks (match-lambda [(list op ip Π p cp) (list "" Π (turn "⊢" "blocks") p)])] ['check-block (match-lambda [(list op id Π Γ ι cp) (list "" Π ";" Γ (turn "⊢" "blocks") ι)])] ['check-instr (match-lambda [(list op id Π Γ1 ι Γ2 cp) (list "" Π (turn "⊢" "instr") Γ1 "{" ι "}" Γ2)])] ['l-⊂ subset-rewrite] ['Γ-⊂ subset-rewrite] ['⊔ (match-lambda [(list op id τ1 τ2 τ3 cp) (list "" τ1 "⊔" τ2 " = " τ3)])] ['dom (λ (lws) (define arg (list-ref lws 2)) (list "dom(" arg ")"))]) (t))) (define (scale-to-fit p) (scale p (min (/ (- 1024 margin margin) (pict-width p)) (/ (- 768 margin margin) (pict-height p))))) (slide (with-rewriters (λ () (scale-to-fit (ht-append 40 (language->pict list-machine #:nts '(a p ι)) (reduction-relation->pict red)))))) (slide (with-rewriters (λ () (scale-to-fit (judgment-form->pict check-instr))))) (slide (with-rewriters (λ () (scale-to-fit (vc-append 40 (judgment-form->pict check-block) (judgment-form->pict check-blocks) (judgment-form->pict check-program))))))