http://roadioapp.com/ ]]>

For example, for a function like f(x)=1/x, the ‘domain’ is usually set to be the set of objects for which this function is defined, i.e. R/{0}, the ‘range’ as the set of values the function can take on, i.e. also R/{0}, but the co-domain would be R … Which is clearly not the ‘domain’ of the converse, or inverse, of this function.

Another question I have here is where the R comes from: why would we think that we are initially/immediately talking about real numbers when talking about functions like 1/x? Couldn’t I be talking about complex numbers, say? Indeed, why do we indicate some kind of ‘intended’ set of ‘potential’ values of the function on the output side (the ‘co-domain’), but don’t do this on the input side?

Indeed, I think it *would* make a lot of sense to *first* define a set of objects that the function is *intended* to work on (which we could call a ‘domain of discourse’), and then point out any values for which the function is actually defined (which we would call the ‘domain of definition’). And with that, we could have a ‘co-domain of discourse’ and a ‘co-domain of definition’ as the converse’s counterparts. Thus, for the function f(x)=1/x we could say that the domain and co-domain of discourse are both R, but the domain and co-domain of definition R/{0}.

In fact, I have been taking the lack of standards (or logical consistency) in the terminology as justification to use exactly this terminology when I teach my students about functions. It may not be ‘standard’, but I think it is certainly a lot more consistent and coherent … What do you think?

]]>The one word I would dispute there is “deliberate”. It’s just an unfortunate example of a situation where by a historical accident the terminology didn’t standardize itself satisfactorily.

]]>(b) f-1(AUB)=f-1(A)Uf-1(B)

(c) f-1(A∩B)=f-1(A)∩f-1(B)

please help me with in today. ]]>

You’re using “transcendental” when you mean “computable”. As there are only countably many finite deterministic algorithms, there are only countably many reals whose decimal expansions we can compute by algorithm to arbitrary accuracy. We name transcendental numbers all the time (), but we never name noncomputable numbers. However, Chaitin would disagree.

]]>Yet, when I think of real numbers I should feel the same way: most of us tend to come up with examples of real numbers who have names, such as -2, square root of 5, or pi. Yet the crushing majority of real numbers are transcendental and will never have a name of their own in our entire lifetime. So, when trying to answer the question “what is a real number?” one is necessarily forced to use the more abstract approach since there is no way to exhibit your general real number. unless dealing with random-like sequences of decimal digits should feel “concrete” to anyone. Similarly, going back to functions if we try to think of a random-valued real function it feels somewhat silly to think of it as an f(x) since we have nowhere near a formula for it.

In this sense, I suspect that what Tim Gowers thinks about when speaking of the “grammar” of functions he is only referring to functions that actually can be meaningfully written as y = f(x) (with a “readable” f(x) part), and this seems quite analogous to the “grammar” associated to those real numbers that have a name: “see, square roof two is a real number.” But how can I reasonably fit in a sentence that forever unnamed (and rather unreal, in fact) transcendental “thing” that together with its brethren fills up most of the real line?

]]>I always find this worrying: morally speaking, should a function “know” what its codomain is? The category theory approach certainly solves that one, but it doesn’t seem to be a common approach when introducing functions.

So, is the category theory approach the “right” one? If so, what would happen if we did try to teach that ordered triple version to starting undergraduates. CD says he isn’t sure this would be helpful. Has anyone tried it?

If we do try it, we would have to warn students that they will find variants on this definition in many books.

The “officially correct” definition in the original post says “A function from A to B is [a set of ordered pairs with certain properties] …”. Isn’t this in fact the “wrong” definition found in many textbooks, or is there a subtle difference, based on context, that I am missing?

The “officially correct” definition is, of course, the one I was taught as an undergraduate, and which I have always worked with, but subject to the concerns expressed above.

Joel

In Terence Tao ‘s book “Analysis”,the part of the book which involve set theory,there are two ways of presenting the power set axiom:

(1)All the functions from set A from set B form a set.

(2)All the subset of set A form a set.

It seems only if we regard function as a subset of cartesian product can we prove that the two statements are equal.For more information,see “analysis” exercise 3.5.11 ]]>

Henning: Oops. Absolutely no sarcasm intended. Sorry for being so sloppy. I very much sympathize with your approach (albeit I probably do not completely understand it).

Is software engineering really completely separable from programming language research ? I do not think so. There surely is a considerable overlap. At least there was, when I studied it.

In any case, typed variables with restricted scopes (as discussed in this thread) are just the beginning. Once you have that, why not making explicit when you overload an operator like + or . Polymorphisms like that are everyday business for mathematicians and can be very confusing to students. In terms of programming languages such concepts are best described by OOP languages. At least, that is what I think.

]]>Terrence: the problem with category theory is that while it can express a lot of mathematics, to do so it translates everything into its own language and henceforth it is something completely different.

Uwe, I have trouble discerning whether you’re being sarcastic. The goal of the program I’m imagining (which already makes it sound rather more grandiose than I think it should) would not be the recast mathematics in the mold of software development, but to vindicate the way everyday mathematics _already_ uses formulas. The most important thing to borrow from computer science might be a vocabulary for _describing_ systematically what must surely look to newcomers like an endless parade of disjoint ad-hoc notational conventions.

In any case, I think you’re conflating software engineering with programming language research. The former, being both practically important and very, very difficult to make solid theoretical progress in, is mostly a collection glorified rules of thumb, quite susceptible to fads and populated in part by loud, dogmatic amateur propagandists for current and past fads. The latter is a proper quasimathematical field of study with rigorous definitions, theorems, and heavy use of Greek letters.

I don’t really think OOP has much to offer mathematics. One of its ingredients, namely subtyping, is relevant on its own: as much as we don’t really want to identify the natural number 2 with the set {0,1}, we certainly do want it to be the same object as the integer 2, the rational number 2, the real number 2, and the complex number 2, which subtyping can help describe systematically (whereas a typical set-theoretic development would claim that there are “really” invisible injections being applied everywhere).

Insisting on a strict top-down order of development would be almost as misplaced in mathematics as it is in programming.

]]>