From mkkuhner@genetics.washington.eduThu Jun 29 17:31:42 1995
Date: Thu, 29 Jun 95 07:12:27 -0700
From: "Mary K. Kuhner" <mkkuhner@genetics.washington.edu>
To: frc@nvg.unit.no
Subject: Round 39 Final Results

Round 39 (Storm)

Round 39 is over (due to a pair of just-missed deadlines).  Vanyel is
the Judge and Stein is the Wizard for round 40.

I'm a bit disappointed--the deadline-missing rules were interesting and
the round could have gone on quite a while. 

Theme:  Programming Languages

10 Rules:  6 valid, 4 invalid, 1 unsuccessful
Mean SP:  0.5

Eligibilities (all times PDT:  add 7 hours for GMT):

Player            Eligible until        Style points
----------------  --------------------  ------------
Vanyel            Tue-Jul-04 00:05:05     1.0
----------------------------------------------------
Gareth            Mon-Jun-26 09:00:00     0.5
Jeremy            Mon-Jun-26 10:42:17     0.5
The Wizard        Tue-Jun-27 09:12:05     1.0
Others            Tue-Jun-27 09:00:00     0.0
Stein             Wed-Jun-28 00:44:42     3.0
Dave              Wed-Jun-28 14:36:16     0.0
Bruce             Wed-Jun-28 10:32:40    -0.5

--

PROPOSAL 39:A:  To overturn the judgement of INVALID on 39:4 (proposed by 
the Wizard)

Voting ended:  Sat-Jun-24 08:15:39
FAILS 2/7 

FOR:  Wizard, Gareth
AGAINST:  Peter, Dug, Dave, Stein, Andre

--

Rule 39:1 The Wizard VALID (1.0 SP) Tue-Jun-20-95 09:12:05 PDT

From: Orjan Johansen <oerjan@nvg.unit.no>
Subject: 39:1

====
Each Rule will describe at least one aspect of UPL (Universal Programming 
Language, formerly known as GOPL,) the language in which the Universe is 
written. Here is the first line of an UPL program:
;NTG -> LGT=SQRT(E/m)
An "x -> y" command means "Turn x into y". LGT takes a speed parameter.
====

Greetings,
Oerjan.

----------------------------------

Judgement: 

Straightforward establishment of the theme, with extra credit for (E/m) 
and for brevity (I like short rules in this sort of round).

------------------------------------

Rule 39:2 Jeremy VALID (0.0 SP) Tue-Jun-20-95 10:42:17 PDT

From: selengut@MIT.EDU
Subject: Rule 39:2

>>>>>>
All rules must include at least one line of UPL code.
All rules which have a predecessor must explain the relationship between the 
   code found in a previous valid rule and the Universe.  (Do not repeat
   previous explanations)

The code in 39:1 recounts that from nothing was created light (which is 
   related to energy and mass).

;{ALL} :> {LVG} :> {MAN}:> {MLE}
;DEFN <qual1> : mean => nice
;t(f){MLE} @ qual1

{} defines a set
:> defines the second set as a subset of the first
<> defines a variable
=> defines a variable ranging between first value (low) and second value (high)
@  is proportional to
>>>>>>

- Jeremy

-----------------------------------

Judgement:

A bit "busy", adding a lot of new terms (and not defining all of them).
We'll quickly run out of punctuation at this rate.

------------------------------------

Rule 39:3 Stein VALID (0.5 SP)  Wed Jun 21 00:44:42 1995

>>>>
The notation a(b) denotes a function. The extended notation
a(b){c} denotes that the argument b range over the set c.

The code in rule 39:2 say that males are human are living creatures
are things. And it also defines an evaluation function
t for males that are proportional to how nice they are.

This evaluation function is used in the following piece of code:

;P.thvn(f){MLE} @ t(f)

In GOPL the character combination /* starts a comment, and
the first occurance of the character combination */ ends the
same comment. Comments are completely non-operational, but
what you state, or do not state, in a comment might be held
against you on judgement day.

An example of code containing a comment, and which also introduces
the agent notation for the first time in this round:

LOVE::WLD.grnd /* Indeed!!! */
>>>>
-- Stein                            stein.kulseth@tf.telenor.no
                G=Stein;S=Kulseth;O=TF;P=telenor;A=telemax;C=no;
                                http://www.nta.no/brukere/stein

--------------

Judgement:

No problems that I can see, and at least a little potential to trip up
future coders.

--------------

Rule 39:4 Gareth INVALID (0.5 SP) Wed Jun 21 04:44:26 1995

> ;P.thvn(f){MLE} @ t(f)
states that the probability that a man goes to heaven is proportional
to how nice he is. (Oh well, there goes every major religion I know...)

> LOVE::WLD.grnd /* Indeed!!! */
states that love makes the world go round.

Just as :> indicates the relation "is a superset of",
so      .> indicates the relation "contains as an element".

The following fragment comes from an early revision of a
well known UPL program, but had to be removed because it
caused the system to crash. (When the system is the universe,
this is serious.) The next valid rule will explain why,
and propose a better version.

; f{ALL} -> X(f) = {x, f(x)=TRUE}

-- 
Gareth McCaughan     Dept. of Pure Mathematics & Mathematical Statistics,
gjm11@pmms.cam.ac.uk Cambridge University, England.    [Research student]

------------

Judgement:

(0001) TYPE MISMATCH ERROR

By 38:1 the notation f{ALL} defines f as a set.  By 38:3 the notation
f(x) implies that f is a function.   I don't think these are compatible
definitions.

My policy as Judge will be to invalidate rules with invalid code unless
it is clearly marked (a la K&R) as intentionally invalid within the rule
text.  Gareth's is described as buggy but not as invalid.

It's a bit unstylish to define .> without using it in the code fragment,
but I like the challenge at the end. 

--------------

Rule 39:5 Bruce VALID (-0.5 SP) Wed-Jun-21 10:32:40 PDT

From: Bruce Jones <bjones@microsoft.com>
Subject: 39:5?

>>>
Since Nature abhors a vacuum, no line of UPL (nee GOPL) code may 
consist solely of comment[s].

Unfortunately, at this point in our discussion, I find it necessary to 
go over some code that some have seen before.

> ;P.thvn(f){MLE} @ t(f)
states that the probability that a man goes to heaven is proportional
to how nice he is.

> LOVE::WLD.grnd /* Indeed!!! */
states that love makes the world go round.

           _____
;LOVE[$]=\/{EVL}
<<<

- Bruce

--

Judgement:

Eww!  Symbols that take more than one line to represent!  Also not
terribly ambitious, though the code content is cute.

--

Rule 39:6 Dave VALID (1.0 SP) Wed-Jun-21 14:36:16

Subject: 39:7 [sic]

The code described in a previous rule, namely:
           _____
;LOVE[$]=\/{EVL}

defines a particular kind of love, indicated by the square bracket 
delimiters (in this case, the love of money), as the root of all evil.
Obviously, given the previous line of code

;LOVE::WLD.grnd
(my note: comment deleted for clarity)

where LOVE is NOT delimited, we can see that evil must play some role in 
making the world go round.  Thus we must, in some way, limit the role of 
evil in order to create a stable system.  Therefore, we have the following:


;{ALL}:>{OBJ}:>{HVE}
;{OBJ}:>{NHV}:>{BUY}
;if <obj>|{BUY} then $(<obj>) -> <obj'>:>{HVE} 
;HPNS#{BUY}

| is a member of the set
# is not a member of the set.

This code appears after the code described in 39:1.

The next valid piece of code should provide a positive reinforcement for 
doing good, rather than a disincentive for evil.

Dave Honsinger

--

Judgement:

Of *course* UPL is case-sensitive, how could I have doubted it for a
moment?

I like the purposeful quality of the code given, though the rule is a
bit long.  I'm willing to forgive the misnumbering as it's not part of
the rule.

--

For unknown reasons I did not receive the first mailing of this rule.
I don't think I'm allowed to renumber Dave's rule in order to fit it in,
so I have no choice but to judge it Unsuccessful.  I will try to find
out whether my mailer is dropping mail (and fix it if it is!)  I
encourage Jeremy to resubmit it taking Dave's rule into account.

Storm

>>>>>>

Rule 39:7 Jeremy UNSUCCESSFUL (0.0 SP) Thu Jun 22 13:16:09

Subject: Rule 39:6
From: Jeremy D Selengut <selengut@MIT.EDU>

39:2 can also be interpreted to mean that "nice guys finish last" as
t(f) in this case signifies the finishing time.

The following code is called before that mentioned in 39:1 in the 
unified compiled version (UCV) of the Universe program:

;DIM% {SPC} : 3 : {x,y,z}
;DIM% {TIM} : 1 : {t}
;{x,y,z,t} -> ortho
;t -> unidir
;t(0) -> 0

Indicate where your code falls in the UCV relative to at least one other
piece of code found in another valid rule.

>>>>>>

--------------------

Rule 38:8 Jeremy INVALID (0.5 SP) Mon Jun 26 08:24:10 1995

Cc: selengut@MIT.EDU
Subject: Rule Proposal

>>>>>>
Dave's most recent line of code recounds the truism:
   "Happiness is not a thing which can be bought"

As required (yawn), here is some code reinforcing the doing of good
deeds.  This is an excerpt from a much larger sub-program:

;{MAN} :> {SRA} /* SRA=self-responsible adult i.e. not excused from
                   judgement because of impaired brain function */
;DEFN <sraid> : 0 => INFIN : INTEGER
;For each <sra> <- <sraid> = C<sraid> + 1  /* Note that a previous
                   subprogam includes the code: ;<adam> | {SRA}
                                                ;<adam> <- <sraid> = 0 */
;DEFN <qual2> : evil => good : REAL (-1,1)
*
;trn(<qual2>) -> trn'(<qual2>) iff <qual2> > 0 /* Thus: */
;TALLY(<sraid>_trn'_) -> TALLY(<sraid>) +1

Notes: C< > notes the current value of <> held in the buffers
       iff means "if and only if" i.e. any other subprogram which
           contradicts this statement will cause an error
       * indicates that some number of lines of code have been omitted here
       <1>_2_ means the thing 1 which is associated with or responsible
           for thing 2

The next three valid rules may not concern themselves in any way with any
set {X} which follows the relationship {MAN} :> {X}
>>>>>>

- Jeremy

--

Judgement:

(0002) UNTERMINATED COMMENT

Lines containing only comments are prohibited by 39:5.  Otherwise a 
nice rule.  (I don't think the argument that you can wrap lines as long
as they don't start with ";" is in the spirit of this rather user-
unfriendly language.)

--

Rule 39:9 Vanyel VALID (1.0 SP) Tue Jun 27 00:05:05 1995

From: Don Blaheta <blahedo@quincy.edu>

>>>>>

;{ALL}:>{OBJ}:>{HVE}
;{OBJ}:>{NHV}:>{BUY}

These two lines fairly simply specify that objects are a subset of
things, and what a person has is a subset of objects.  Likewise, what
a person *doesn't* have is a subset of objects (line 2), and things
which may be bought are a subset of what a person doesn't have.

;if <obj>|{BUY} then $(<obj>) -> <obj'>:>{HVE} 

This bit of code shows some control structure for UPL, namely the
conditional block.  The condition, "<obj>|{BUY}" is true if and only if
the item in variable <obj> is a member of the set of things which may be
bought.  In this conditional statement, if the condition is true, then
through spending of money (signified by the $ and parens surrounding the
variable <obj>) the item in variable <obj> may be moved into the set of
what a person has.  Here, the :> operator is overloaded--when a non-set
parameter is given on the left side, it means that that parameter is
moved into the set specified on the right.

;HPNS#{BUY}

This line simply states that the universal constant of happiness (a
universal constant as it has no brackets of any sort surrounding it) is
not in the set of things which may be bought.

There are a number of universal constants, most often represented with
four-letter abbreviatons, and distinguished by not having brackets of
any sort, unlike variables (angle), sets (curly), subtypes (square),
and functions (round).  A universal constant is used in the following
code, as well as more control structure:

;while (~ SCSS)
  ;!try
  ;!try

Future rules must specify how the compiler disambiguates overloaded
operators.
>>>>>

I sincerely apologize for the lengthy rule, but this round seems to grow
the rules exponentially.  A bit of brief explanation for future
rulesters: "Overloading", in programming, is when a function or operator
has two different meanings depending on context.  Like in verbal
English, "to", "two", and "too" sound alike, but we can tell what is
meant by context--so you get to tell the compiler how to do it with UPL.
:)

Vanyel

------

The specification "future rules" is troublesomely vague, and may not
prove to have the desired effect.  On the other hand, the rest of the
rule is clever.

-----

Rule 39:10 Stein INVALID (2.5 SP) Wed Jun 28 00:57:04 1995

From: Stein.Kulseth@TF.telenor.no
Subject: 39:10

<<<<
;while (~ SCSS)
  ;!try
  ;!try

This little snip of code holds the universal truth that if you
do not succeed, then you must try and try harder. And indeed is
appropriate for this rule, for this rule does not succeed in
specifying how the compiler disambiguates overloaded operators.
Rather it is up to the next two rules to fulfill this restriction
from the previous rule.

GOPL also has the possibility for function sets (note: all GOPL
function has only one single parameter, which may be composite using
the * delimited notation), like in the following code:
;rnd(x) # {IHVH::y(x)}

Using this we see that we may form FRC restrictions using GOPL like:
;DEFN <a> : ANY : FUNCTION
;DEFN <b> : 0 => INFIN * 0 => INFIN : INTEGER*INTEGER
;DEFN <c> : 2 => INFIN : INTEGER
;DEFN <d> : "AndrewDRhodes" => "WendyHatch" : PERSON
;if <a>(<b>)|{FRC::y(x){INTEGER%INTEGER}} and <b>=39*<c> then
    ;if <d>::<a>(<b>) and <d>::<a>(39*<c>-1 then <a>(<b>) -> INVALID

>>>>


Again a trifle long, sorry. Got carried away...

-- Stein                            stein.kulseth@tf.telenor.no
                G=Stein;S=Kulseth;O=TF;P=telenor;A=telemax;C=no;
                                http://www.nta.no/brukere/stein

---

Judgement:

Alas, Stein missed his window of eligibility by a couple of minutes. 
A very nice rule, though, working on a number of levels.  Half a point
off for length.

----

Rule 39:11 Dave INVALID (-1.0 SP) Wed Jun 28 14:40:49 1995

In the preceding code the line

;while (~ SCSS)

calls a universal constant (explained in the accompanying text preceding) 
identified as SCSS and representing "success".  The character "~" 
denotes negation; therefore the code calls the following lines only when 
there is no state of "success".  The lines that follow:

  ;!try
  :!try

call a subroutine (called by the !) defining attempts to correct the 
state of "non-success".  In whole the bit of code states quite simply if 
success in not achieved one must attempt again.

The subroutine ?try is interesting in that it offers some insight into 
the METHODS of trying...

;?try
  ;do <mthd>
    ;if <mthd> => <errstate> then !admit
    ;if <mthd> => SCSS then !reward
;?admit
  ;echo <errstate>
  ;!try


Further examples of subroutine processing should follow in the next rule.

Dave Honsinger

--

Judgement:

Missing the deadline by a couple of minutes, alas.

As the author notes, the use of => is also incorrect, and there is
something about the structure of the recursion that makes me queasy 
(not that the real universe doesn't do that occasionally!)

Storm mkkuhner@genetics.washington.edu
