etymology of "list comprehension"?

David C. Ullrich dullrich at sprynet.com
Tue Nov 11 15:38:42 EST 2008


In article <7xej1o8i12.fsf at ruckus.brouhaha.com>,
 Paul Rubin <http://phr.cx@NOSPAM.invalid> wrote:

> mh at pixar.com writes:
> > Ah, thanks... and does "comprehension" have any special computer
> > science meaning?
> 
> It is from mathematical set theory.  If you write something like
> 
>    { p | [some logical expression indicating that p is prime] }
> 
> then that denotes a set (the set of all prime numbers).  That every
> such formula names a set is called the axiom of comprehension.  The
> above notation is sometimes called set-builder notation.
> 
> Frege's original system of logic (late 19th century), now called
> "naive set theory" had "unrestricted comprehension" which meant
> you could say anything at all where the logical expression went.
> This made the system inconsistent, because of Russell's paradox
> ("c is the class of all classes that are not members of themselves.
> So is c a member of itself?").  
> 
> Axiomatic set theory has a restricted axiom of comprehension that
> requires the logical expression to be a first order formula with
> a certain syntax, to avoid such paradoxes.

Not that it matters, but the fix is not by using a first-order
formula with a certain syntax. The comprehension itself is
not 

           {p | p satisfies some condition}, 

it's

           {p in S | p satisfies some condition},

where S is some set. You're not allowed to ask for _everything_
satisfying a certain condition, just for the elements of
some given set satisfying the condition.

The paradox doesn't come from being allowed to say anything
at all. If you write

(*)          c = {x | ~(x e x)}

(where ~ means "not" and "a e b" means "a is an element of b")
you get Russell's paradox: if c is an element of c then it follows
that c is not an element of c, while if c is not an element of c
then it follows that c is an element of c. The problem is not
with the formula ~(x e x); given a set S, there's no problem
with the set {x in S | ~(x e x)}, for example. "restricted"
versus "unrestricted" does not refer to some restriction on
that formula - the "restriction" in restricted comprehension
is the "x in S" part - we're restricting things to elements
of a given set S.

Writing informally people often omit the "in S" part when the
S in clear from the context. For example, your original
{p | p is prime} should officially be {p in N | p is prime},
where N is the set of natural numbers - the first form is 
often written because the "in N" is implicit in "prime".

> Anyway, list comprehensions in programming languages got their
> name because of their resemblance to set-builder notation that
> invoked the axiom of comprehension.

-- 
David C. Ullrich



More information about the Python-list mailing list