That actually cuts right to the heart of one of our issues.<div><br></div><div>In our ideal semantics (e1 e2) can step to (e1&#39; e2), (e1 e2&#39;), or (e1&#39; e2&#39;), but of course this creates many possible evaluation orders and makes redex take a long long time.</div>

<div><br></div><div>Our quick-and-dirty version is to require synchronous steps (e1&#39; e2&#39;), and then separately allow one branch to catch up if the other branch is a value: </div><div>   (e v) -&gt; (e&#39; v)</div>

<div>   (v e) -&gt; (v e&#39;)</div><div><br>So that would cover your example.  It&#39;s still parallelism, but it&#39;s an unrealistically constrained evaluation order.</div><div><br></div><div>  -Ryan<br><br><div class="gmail_quote">

On Sun, Jul 8, 2012 at 7:49 AM, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I&#39;m not sure of another way (but there might be one I just haven&#39;t<br>
found), but do you want this program to reduce?<br>
<br>
  ((+ 1 2) 3)<br>
<br>
That is, a program that has a value in parallel with a computation?<br>
<span class="HOEnZb"><font color="#888888"><br>
Robby<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Sat, Jul 7, 2012 at 10:37 PM, Lindsey Kuper &lt;<a href="mailto:lkuper@cs.indiana.edu">lkuper@cs.indiana.edu</a>&gt; wrote:<br>
&gt; On Sat, Jul 7, 2012 at 8:04 PM, Robby Findler<br>
&gt; &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt; wrote:<br>
&gt;&gt; No, there is no way to do that in Redex.<br>
&gt;&gt;<br>
&gt;&gt; Are you trying to model parallelism?<br>
&gt;<br>
&gt; Yep.  We could have just used single-hole contexts &quot;E ::= (E e) | (e<br>
&gt; E) | ... &quot; that allow for the two expressions in (e1 e2) to be<br>
&gt; evaluated in arbitrary order, but we wanted to make parallelism<br>
&gt; explicit in the model.  Using define-judgment-form, we can do<br>
&gt; something along the lines of<br>
&gt;<br>
&gt; (define-judgment-form my-lang<br>
&gt;<br>
&gt;   [(small-step (e_1 e_2) (e_11 e_22))<br>
&gt;    (small-step e_1 e_11)<br>
&gt;    (small-step e_2 e_22)]<br>
&gt;<br>
&gt;   ...more rules here...<br>
&gt;<br>
&gt;   )<br>
&gt;<br>
&gt; This works, but I was wondering if there was some other trick I hadn&#39;t<br>
&gt; thought of for modeling parallelism.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Lindsey<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>