Re: Re: Types in Mathematica thread
- To: mathgroup at smc.vnet.net
- Subject: [mg62916] Re: [mg62848] Re: Types in Mathematica thread
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Thu, 8 Dec 2005 00:06:16 -0500 (EST)
- References: <dmp9na$hi2$1@smc.vnet.net> <roadnYOk3NcFDw7eRVn-jg@speakeasy.net> <200512050837.DAA08425@smc.vnet.net> <200512051840.NAA21063@smc.vnet.net> <200512060503.AAA02736@smc.vnet.net> <dn3jsl$8s0$1@smc.vnet.net> <200512070410.XAA23685@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 7 Dec 2005, at 13:10, Jon Harrop wrote:
> Andrzej Kozlowski wrote:
>> Yes, but obviously if the discussion is about types in the sense that
>> computer scientists (not me!) use the term, then the type of objects
>> with Head Real in Mathematica is exactly what is known as inexact
>> numbers, or floating point number or floats etc.
>
> or intervals. As I've said, using Head is not a generally useful
> definition
> of "type" in the context of Mathematica code:
>
> In[1]:= Head[Sqrt[2]]
> Out[2]= Power
Of course I agree with you and I never expressed any support for the
idea that Heads of Mathematica expressions are "types", although they
sometime serve a similar purpose. But this example isn't terribly
convincing since Sqrt[2] is simply converted to 2^(1/2) and is no
different form, say
Head[1+2^(1/3)]
Plus
or
Head[Sin[23]]
Sin
etc, etc. None of these expressions will return True if you apply
AtomQ to them. Obviously Heads of non-atomic expressions are not
"types". Whether Heads of atomic expressions can be regarded as types
is more to the point (but I think on the whole it is not a very
useful way of thinking).
>
>> Mathematica does not know it but correctly computes its numerical
>> approximation:
>>
>> NSum[10^(-k!), {k, 1, Infinity}]
>>
>> 0.110001
>>
>> But in any case, all this has nothing to do with "types" in the sense
>> of computer science.
>
> The word "type" means different things to different people even within
> computer science. Some type systems provide numerics in the type
> system,
> even if it is accidental (e.g. church numerals encoded in C++
> templates).
One reason why I think of this whole discussion as being kind of
beside the point, is that it completely ignores what in my opinion is
the most fundamental aspect of Mathematica: that it is a computer
algebra system. Therefore the most important thing about its
programming language has to be suitability for being used together
with the vast amount of algebra functionality built into Mathematica.
I think the current structure, including the concepts such as
expression, its Head etc, are extremely well suited to this purpose
(and so are the pattern matching and arrays used by Mathematica -that
you mentioned in another posting. Again, they have to be considered
primarily in relation to suitability for a CAS, not for other
purposes). I expect that they came about by thinking in terms of the
CAS aspect of Mathematica and not in terms the kind of things that
are important in languages like C++, which serve a quite different
purpose.
In particular, if you are developing a programming language for a CAS
system you had better have a good understanding of the complexity of
various algorithms used frequently in manipulating mathematical
expressions. This is why the idea of having a "type" corresponding to
the mathematical concept of a real number seems quite inane to me. Of
course, I am assuming that "types" are supposed to be something that
is checked rather frequently. The difficulty of deciding whether a
numerical expression represents a real number (as opposed to checking
its Head) even when it can be done, would grind you programs to a
halt before they got to anything really substantial. This is in an
entirely different game from checking heads of expressions or types
in programs like C.
On the other hand, if one is talking about something meant for a
special purpose, to be used only when you actually want to decide if
something is a real number, then Mathematica's concept of domains
already provides this functionality. It even incorporates "inheritance":
In[12]:=
Assuming[Element[x,Reals],FullSimplify[Element[x,Complexes]]]
Out[12]=
True
In[14]:=
Assuming[Element[x,Rationals],FullSimplify[Element[x,Reals]]]
Out[14]=
True
I do not know whether anybody in computer science would say this
has anything to do with "types", but it certainly has nothing to do
with the function of Heads like Real, Rational or Complex in
Mathematica.
Andrzej Kozlowski
- References:
- Re: Types in Mathematica thread
- From: Kristen W Carlson <carlsonkw@gmail.com>
- Re: Re: Types in Mathematica thread
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: Re: Re: Types in Mathematica thread
- From: Kristen W Carlson <carlsonkw@Gmail.com>
- Re: Types in Mathematica thread
- From: Jon Harrop <usenet@jdh30.plus.com>
- Re: Types in Mathematica thread