This looks like a fairly conventional form of parallel evaluation with some 
form of attempt at 'free deterministic update'. 

If I were to model this kind of thing, I am sure I'd use a multi-hole reduction 
semantics to represent non-coordinated parallelism. Too bad Redex can't model 
this, but it doesn't mean you can't formulate it as a plain old reduction 
semantics. 

Whether you "believe" it to be deterministic is pretty irrelevant. If you want 
it to be deterministic, you construct it that way, and with multi-hole 
"standard" reductions it is quite easy (near trivial) to show this -- assuming 
you get your effects right.

Enough said, good luck -- Matthias





On Jul 9, 2012, at 3:11 PM, Ryan Newton wrote:

> Hi all,
> 
> Thanks for all the advice.
> 
> Just to be clear about the context.  This is a parallel language that we 
> developed on paper which we strongly believed was deterministic.  We wrote 
> the paper proof and also, on the side, wanted to make a redex model to check 
> ourselves.
> 
> We felt it was necessary to include simultaneous steps (Matthias's [A] 
> scenario) to model real parallel machines and force us to deal with 
> potentially incompatible simultaneous updates to the store.  
> 
> Lindsey had a slightly awkward time shoehorning things into redex, and the 
> resulting model runs pretty slowly.  BUT, these are just nits and possible 
> areas for improvement.  Redex was still enormously helpful and fulfilled its 
> purpose.  There wasn't any existential crisis here.
> 
>   -Ryan
> 
> P.S.  It would be simpler to just share the paper rather than describing the 
> problems out of context.  However, I don't want to send the draft out quite 
> yet, because it needs a few more tweaks to have all the refactorings pushed 
> through and achieve internal consistency.  But I'm attached the reduction 
> rules and grammar, FYI.
> 
> On Mon, Jul 9, 2012 at 12:34 PM, Matthias Felleisen <matth...@ccs.neu.edu> 
> wrote:
> 
> On Jul 9, 2012, at 6:29 AM, Lindsey Kuper wrote:
> 
> > I had been assuming that "one-step" meant "small-step", but
> > now I think that by "one-step" David means a relation that doesn't
> > reduce redexes in parallel.  So, in fact, ours *is* multi-step because
> > it *does* reduce in parallel.
> 
> 
> Lindsey and Ryan, I have had no time until now to catch up with this thread 
> (argh). And I have my own POPL deadline, so here are some general remarks:
> 
> 1. The parallel reduction trick that David pointed out goes back to the early 
> 1970s. Tait appears to be the source. See Barendregt.
> 
> 2. 'small step' is NOT 'one-step' and 'one-step' is not 'notion of 
> reduction'. See Redex, chapter 1 for definitions. They are the same ones as 
> Barendregt uses and the informed PL community has used when publishing 
> semantics papers in this style. I dislike 'small step'  A LOT but if you want 
> a relationship |---> (standard reduction) is what most publishing PLists 
> would call a 'small step' semantics.
> 
> 3. Also Redex, chapter 1 suggests that 'eval' is the actual semantics and 
> |---> or -->> are two distinct ways of specifying it. Since eval is the key, 
> this also eliminates any worries about reflexive rules -- as long as you 
> think of eval as the mathematical semantics and the arrow relations as just 
> one possible mechanism to define it.
> 
> 4. The reduction relations (-->> or standard) become important only if you 
> wish to make some claim about the intension of the semantics, i.e., how it 
> relates to actual machine steps. You don't have to. Plotkin 74, for example, 
> shows that it is perfectly okay to show two different unrelated ways of 
> defining eval (secd and a recursive interpreter) and to prove them equivalent 
> -- brute force in his case.  You do that because you might be able to use one 
> definitional mechanism to show one thing (type soundness) and with another 
> one you can show something else (cost of execution). I have done it many 
> times.
> 
> 5. The confusion between reduction relations and parallel execution is about 
> 40 years old (perhaps a bit less). Indeed, the confusion between reduction 
> relations in LC and plain execution is that old -- see so-called "optimal 
> reduction sequences", which a well-trained  computer scientist (===/== 
> mathematician masquerading as a PL person) will quickly recognize that it is 
> nonsense. Fortunately we have had a proof for 10 years that this horse is 
> dead.
> 
> ;; ---
> 
> May I propose a re-thinking of your approach that may benefit us Redex 
> designers?
> 
> -- figure out what your real goal is; it cannot be to develop a semantics of 
> some hypothetical PL (see above, especially 4)
> -- develop a paper and pencil model of a semantics that helps you prove this 
> goal/theorem
> -- if it happens to be a reduction semantics (I am of course convinced that 
> 90% of all goals can be reached via reduction semantics),
>         allow one of two things to happen:
>   [A] you need to model 'simultaneous' steps meaning you need multi-hole
>   [B] you don't need truly simultaneous steps but you allow some 
> non-determinism in |--->
> 
> For [A], Redex is ill-suited. The define-judgment form isn't remotely as 
> helpful for semantics as is the core redex language.
> 
> For [B], Redex is your friend.
> 
> See my paper with Cormac in the mid 90s on modeling futures with reduction 
> systems, for one approach to parallelism. We did intend to tackle an FP 
> language with set! at the time, but the analysis didn't work out so we 
> abandoned this direction.
> 
> In short, decouple what you want to accomplish from the tool that might look 
> like it could help.
> 
> 
> -- Matthias
> 
> 
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
> 
> <grammar_excerpt.pdf><semantics_excerpt.pdf>


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to