Racket 从归约关系中调用判断

Racket 从归约关系中调用判断,racket,plt-redex,Racket,Plt Redex,我正在定义一种具有类型转换和子类型化的语言,如下所示: (define-language base (t ::= int any) (e ::= number (cast t e)) #| stuff ... |#) 然后,我对其定义了以下判断形式: (define-judgment-form base #:mode (<: I I) #:contract (<: t t) [------ (<: t t)] [------

我正在定义一种具有类型转换和子类型化的语言,如下所示:

(define-language base 
  (t ::= int any) 
  (e ::= number (cast t e)) 
  #| stuff ... |#)
然后,我对其定义了以下判断形式:

(define-judgment-form base
   #:mode (<: I I)
   #:contract (<: t t)
   [------ 
    (<: t t)]
   [------ 
    (<: int any)])
(定义判断表基础)

#:mode(您正在寻找的实际上被称为
判断保持
,它在您的示例中正好适用于您将
放置在判断保持
的位置:

(define b-> (reduction-relation base
    (--> (cast t v)
         v
         (judgment-holds (<: (typeof v) t)))))
(定义b->(缩减关系基)
(->(铸造电视)
v
(判决成立)(
(define b-> (reduction-relation base
    (--> (cast t v)
         v
         (judgment-holds (<: (typeof v) t)))))