[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haskell-cafe
Subject:    Re: [Haskell-cafe] Re: [Haskell] Typing in haskell and
From:       "Jacques Carette" <carette () mcmaster ! ca>
Date:       2005-01-28 22:48:13
Message-ID: web-80937504 () cgpsrv2 ! cis ! mcmaster ! ca
[Download RAW message or body]

[I have now subscribed to haskell-cafe]

Henning Thielemann <lemming@henning-thielemann.de> wrote:
> This seems to be related to what I wrote yesterday
> http://www.haskell.org/pipermail/haskell-cafe/2005-January/008893.html

Yes, very much.  Except that rather than trying to tell mathematicians that they are \
*wrong*, I am trying to see which  of their notations I can explain (in a typed way). \
There will be some 'leftovers', where the notation is simply bad.

> I've collected some examples of abuse and bad mathematical notation:
> http://www.math.uni-bremen.de/~thielema/Research/notation.pdf

Some of what you point out there is bad notation.  Other bits point to some \
misunderstanding of the issues.

Starting from your original post:
> f(x) \in L(\R)
> where f \in L(\R) is meant
> 
> F(x) = \int f(x) \dif x
> where x shouldn't be visible outside the integral

First, mathematicians like to write f(x) to indicate clearly that they are denoting a \
function.  This is equivalent to  writing down (f \in -> ) with domain/range omitted.

Second, every mathematician knows that \int f(x) \dif x == \int f(y) \dif y (ie alpha \
conversion), so that combined  with the previous convention, there is no confusion in \
writing F(x) = \int f(x) \dif x.  It is just as well-defined as (\x.x x) (\x.x x)
which requires alpha-conversion too for proper understanding.

You also write
> O(n)
> which should be O(\n -> n) (a remark by Simon Thompson in
> The Craft of Functional Programming)
but the only reason for this is that computer scientists don't like open terms.  \
Since the argument to O must be a  univariate function with range the Reals, then \
whatever is written there must *denote* such a function.  The term  ``n'' can only \
denote only one such function, \n -> n.  So the mathematician's notation is in fact \
much more pleasing.

However, you have to remember one crucial fact: a set of typographical symbols are \
meant to *denote* a value, they are  not values in themselves.  So there is always a \
function around which is the ``denotes'' function that is implicitly  applied.  \
Russell's work in the early 1900, "sense and denotation" are worth reading if you \
want to learn more about  this.

What is definitely confusing is the use of = with O notation.  The denotation there \
is much more complex - and borders  on incorrect.

> a < b < c
> which is a short-cut of a < b \land b < c

That is plain confusion between the concepts of ``denotation'' and ``value''.  Where \
< is a denotation of a binary  function from bool x bool -> bool, _ < _ < _ is a \
mixfix denotation of a constraint, which could be denoted in a  long-winded fashion \
by p a b c = a<b and b<c
but more accurately by
p a c = \b -> b \in )a,c(
where I am using mathematical notation for the body above.


On your ``notation.pdf'' (link above), you have some other mis-interpretations.  On \
p.10 you seem to think that  Mathematica is a lazy language, when it is in fact an \
eager language.  So your interpretation does not ``make sense''. Not that your \
observation is incorrect.  In Maple, there are two functions, eval(expr, x=pt) and \
subs(x=pt, expr)  which do ``similar'' things.  But subs is pure textual substitution \
(ie the CS thing), whereas 2-argument eval means  "evaluate the function that \x -> \
expr denotes at the point pt" (ie the math thing).  The interesting thing is that  \
"the function that \x -> expr denotes" is allowed to remove (removeable) \
singularities in its ``denotation'' map.   However,
> subs(x=2,'diff'(ln(x),x)) ;
       diff(ln(2),2)
where the '' quotes mean to delay evaluation of the underlying function.  On the \
other hand
> eval('diff'(ln(x),x),x=2) ;
       eval('diff'(ln(x),x),x=2)
because it makes no sense to evaluate an open term which introduces a (temporary) \
binding for one of its variables.

Note that without access to terms, it is not possible to write a function like diff \
(or derive as you phrase it, or D  as Mathematica calls it).  Mathematician's diff \
looks like it is has signature diff: function -> function, but it in  fact is treated \
more often as having signature diff: function_denotation -> function_denotation.  But \
you can see a  post by Oleg in December on the haskell list how it is possible (with \
type classes) in Haskell to automatically pair  up function and function_denotation.

You also seem to assume that set theory is the only axiomatization of mathematics \
that counts (on p.31).  I do not see  functions A -> B as somehow being subsets of \
powerset(A x B).  That to me is one possible 'implementation' of  functions.  This \
identification is just as faulty as the one you point out on p.14 of the naturals not \
``really''  being a subset of the rationals.  In both cases, there is a natural \
embedding taking place, but it is not the  identity.

You also have the signature of a number of functions not-quite-right.  ``indefinite'' \
integration does not map  functions to functions, but functions to equivalence \
classes of functions.  Fourier transforms (and other integral  transforms) map into \
functionals, not functions.  

I hope your audience (for things like slide 35) was made of computer scientists - it \
is so amazingly condescending to  thousands of mathematicians, it is amazing you \
would not get immediately booted out!

On p.37, you have polynomials backwards.  Polynomials are formal objects, but they \
(uniquely) denote a function.  So  polynomials CANNOT be evaluated, but they denote a \
unique function which can.

On p.51 where you speak of ``hidden'' quantifiers, you yourself omit the thereexists \
quantifiers that are implicit on  the last 2 lines -- why?

The above was meant to be constructive -- I apologize if it has come across \
otherwise.  This is an under-studied area,  and you should continue to look at it.  \
But you should try a little harder to not assume that thousands of  mathematicians \
for a couple of hundred years (at least) are that easily ``wrong''.  Redundant, \
sub-optimal, sure.

Jacques


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic