From 193be1168ec32fec4fdd498ef9cfac13ebfd8a4c Mon Sep 17 00:00:00 2001 From: Yiyun Liu Date: Tue, 13 May 2025 16:43:00 -0400 Subject: [PATCH] Add stub for the typechecker --- nbe.rkt | 2 -- type-checker.rkt | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/nbe.rkt b/nbe.rkt index b083ddb..ffded3a 100644 --- a/nbe.rkt +++ b/nbe.rkt @@ -1,6 +1,4 @@ #lang typed/racket -;; Grammar (Λ) -;; t := λ t | app t t | i (define-type denv (-> V (Promise D))) (define-type V Nonnegative-Integer) diff --git a/type-checker.rkt b/type-checker.rkt index 0ad77af..d895735 100644 --- a/type-checker.rkt +++ b/type-checker.rkt @@ -1,2 +1,30 @@ #lang typed/racket + (require "nbe.rkt") + +(define-type context (Immutable-HashTable V Term)) + +(: context-len (-> context V)) +(define (context-len Γ) + (hash-count Γ)) + +(: context-ext (-> context Term context)) +(define (context-ext Γ A) + (hash-set Γ (context-len Γ) A)) + +(: context-get (-> context V Term)) +(define (context-get Γ i) + (if (< i (context-len Γ)) + (subst (λ (j) `(var ,(+ i j 1))) (hash-ref Γ (- (context-len Γ) (add1 i)))) + (error "context-get: out of bound"))) + +(: context-empty context) +(define context-empty (hash)) + +(: synth (-> context Term Term)) +(define (synth Γ a) + (error "unimplmented")) + +(: check (-> context Term D Boolean)) +(define (check Γ a A) + (error "unimplemented"))