dvanhorn / redex-aam-tutorial

An Introduction to Redex with Abstracting Abstract Machines

Home Page:https://dvanhorn.github.io/redex-aam-tutorial

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Section 3.1 gives confusing prose on define-metafunction vs define-relation

csgordon opened this issue · comments

I'm following along typing everything, and hit a minor snag.

Section 3.1 gives two alternative definitions of unique and suggests they are equivalent:

(define-metafunction REDEX
      unique : any ... -> boolean
      [(unique any_!_1 ...) #t]
      [(unique _ ...) #f])

There is a kind of short-hand for defining predicates (metafunctions that produce either true or false), called, confusingly enough, define-relation:

(define-relation REDEX
  unique ⊆ any × ...
  [(unique any_!_1 ...)])

The text suggests the two are interchangable, but the define-metafunction form seems to break things. I tried to evaluate the PCF typing judgment using the define-metafunction form of unique, but got the following error:

define-judgment-form: expected judgment form name in: unique

The error goes away if I switch to the define-relation form, and the tutorial code itself uses the relation form in shared.rkt (line 128)

I ran into this on Racket (DrRacket) 6.5, but checked on 6.2.1 as well.

I can confirm the issue. It happened exactly the same to me. I believe a suitable solution is just to remove the part mentioning unique as a meta-function. I don't think it would do any harm, as ext was already introduced as an example of meta-function, so the reader should know define-metafunction by that point.

I also ran into this issue.