spec: clarify resolution of undefined names (#303)

diff --git a/doc/spec.md b/doc/spec.md
index 743e6cd..203ce28 100644
--- a/doc/spec.md
+++ b/doc/spec.md
@@ -1273,7 +1273,7 @@
 are bound only by `load` statements.
 The sets of names bound in the file block and in the module block do not overlap:
 it is an error for a load statement to bind the name of a global,
-or for a top-level statement to assign to a name bound by a load statement.
+or for a top-level statement to bind a name bound by a load statement.
 
 A file block contains a _function_ block for each top-level
 function, and a _comprehension_ block for each top-level comprehension.
@@ -1318,7 +1318,7 @@
 x = "hello"
 ```
 
-and for nested loops in comprehensions.
+The same is also true for nested loops in comprehensions.
 In the (unnatural) examples below, the scope of the variables `x`, `y`, 
 and `z` is the entire compehension block, except the operand of the first
 loop (`[]` or `[1]`), which is resolved in the enclosing environment.
@@ -1330,6 +1330,7 @@
 [1//0 for x in [1] for y in z for z in ()]  # dynamic error: local variable z referenced before assignment
 ```
 
+
 <!-- This is similar to Python[23]. Presumed rational: it resembles
      the desugaring to nested loop statements, in which the scope
      of all three variables is the entire enclosing function,
@@ -1343,6 +1344,21 @@
               1//0
 -->
 
+It is a static error to refer to a name that has no binding at all.
+```
+def f():
+  if False:
+    g()                   # static error: undefined: g
+```
+(This behavior differs from Python, which treats such references as global,
+and thus does not report an error until the expression is evaluated.)
+
+<!-- Consequently, the REPL, which consumes one compound statement at a time,
+     cannot resolve forward references such as
+             def f(): return K
+             K = 1
+     because the first chunk has an unresolved reference to K.
+-->
 
 It is a static error to bind a global variable already explicitly bound in the file: