Due date: 10/7 @ at the beginning of class
 
  The goal of this problem set is to deepen your understanding of
  language specifications via relations. Doing so will enhance your
  familiarity with reduction systems and Redex. Think of problem 1 as a
  
  "finger exercise" warm-up for problem 2. The deep domain content of the exercise
  is relevant for those of you who end up in disciplines that heavily rely
  on numeric computations. 
Problem 1:
 The ListSum function consumes a list of numbers and
 computes the sum. 
 Formulate the ListSum function as three different Redex
 reduction model: the first one should evaluate addition from left
 to right; the second one should evaluate addition from right to left; and
 the third one should evaluate addition in arbitrary order. All
 meta-operations from Racket must add/multiply exactly two numbers.
 Define metafunctions that encapsulate the idea of evaluation-via-reduction
 in all three models.  Find an example that produces distinct results for
 at least two of three orders of evaluation and formulate the example as a
 failing test case. Comment out the test case. 
Problem 2:
 Develop a variant of the language of arithmetic from class so that
 + and * can be applied to an arbitrary number of
 numbers just like in Racket and similar programming languages. 
part a Extend the language with two distinct reduction
 relations. The first should reduce the nested expressions from left to
 right and the second one from right to left. Employ a corresponding
 strategy to primitive arithmetic, respectively, i.e., for adding or
 multiplying numbers. Constraint: All meta-operations from Racket
 must add/multiply exactly two numbers.
part b Include two traces expressions that
 demonstrate that the reduction graphs for one and the same example differ.
part c Formulate metafunctions that encapsulate the
 idea of evaluation-via-reduction in both models. We know from grade school
 that, in principle, the two evaluation functions are equal. Formulate a
 corresponding conjecture with redex-check. Then formulate a
 counter-example as a test or record one that redex-check
 finds. Finally explain the counter-example with a single sentence (at most
 two lines).