Yes, the inconsistency is frustrating. We are keeping it for backwards 
compatibility but it should be overcome with the addition of a different form 
of s-e in the future. Lucky you, we drilled ‘exampling’ and ‘testing’ at the 
summer school so that you caught this small problem before it causes a big one 
in context — Matthias




> On Aug 28, 2015, at 12:44 PM, Andrew Kent <[email protected]> wrote:
> 
> PSA - careful using side-conditions in PLT Redex! (I'd stick to 'where' 
> clauses, personally)
> 
> The fact that side-conditions exist in both metafunctions/reduction-relations 
> *and* judgment-forms but are *not* in fact the same thing (i.e. those found 
> in the former accept racket expressions, the latter accepts terms) can lead 
> to nasty, subtle little bugs if you're not careful. (yes the difference is 
> documented, however it's still really easy to hang yourself with them if you 
> forget the subtle distinction in a sufficiently complicated model, IMHO).
> 
> For example, consider a little language which models propositional logic:
> 
> (define-language propositional-logic
>  [φ ::= variable-not-otherwise-mentioned]
>  [Γ ::= (φ ...)])
> 
> (define-judgment-form propositional-logic
>  #:mode (proves I I)
>  #:contract (proves Γ φ)
>  ;; ...
>  [(side-condition (memq (term φ) (term Γ)))
>   -------------------------------- "L-Assumption"
>   (proves Γ φ)]
>  ;; ...
>  )
> 
> (test-equal (judgment-holds (proves (P) P)) #t)
> (test-equal (judgment-holds (proves (P) Q)) #f) ;; <-- fails test!
> 
> Uh oh, why did our second test fail? Ah yes, but of course! We forgot that in 
> a judgment-form, side-condition will end up quoting Racket expressions (since 
> it accepts terms) and so the condition '(side-condition (memq (term φ) (term 
> Γ)))' is always true.
> 
> Although what we wrote would have worked as a guard in a metafunction 
> definition, that same code here behaves differently. We should have written 
> (side-condition ,(memq (term φ) (term Γ))) to escape to Racket and actually 
> call 'memq' on the arguments.
> 
> Because of this, I try to idiot proof things by *always* just use 'where' 
> clauses since they behave the same everywhere. This has worked quite well for 
> me thus far.
> 
> Anyway, that's all I've got to say about that.
> 
> Thanks for PLT Redex! Everyone should attend the PLT Redex summer school next 
> year! (Assuming there is one... =)
> 
> -Andrew
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to