5 ms·
So you are telling me that I can't choose to declare that A = A is false? Telling me what I can and can't do is an imperative statement...
by ukj 5y ago
So you are telling me that I can't choose to declare that A = A is false?
Telling me what I can and can't do is an imperative statement...
- joshuak 5y agoYou certainly may define your own symbology. But if you want to communicate with others you’ll need to agree on your symbology. In the common mathematical understanding A != A is defined as a false statement. In any example that one can contemplate it would become a true statement then you are replacing one of the ‘A’ symbols with something that is not ‘A’ in your mind. Which is to say you are using the wrong symbols to represent the idea you intend to communicate.
- ukj 5y agoIndeed I want to communicate with others, but I do not insist on communicating with Mathematicians in particular. I want to communicate with anybody who wants to talk to me about the nature of time. And when we converse about time I want to be able to say the obvious: now is not now. If we get more serious about this time business we might even want to formally express that: A != A If anybody insist that the above is false then they can exclude themselves from any formal or informal conversation about time on the basis of incomensurability of our paradigms
- joshuak 5y agoThe above is a false statement because if we say A is "true" then the statement becomes "true != true" which is obviously a false statement. In fact if we put anything in the place of A the results are the same. If, however, you wish to communicate the evaluation of a function such as "now()", then you would express that as two invocations of that function now() != now() or t != t' or simply A != B So simply using 'A' to mean things not exclusively 'A' is unnecessarily ambiguous. This makes it not only useless for communication between people but also makes it useless for forming any meaningful conclusions. Failure to be completely expressive about a paradigm is not itself a paradigm. Its just faulty reasoning.
- ukj 5y agoI am not looking for an a debate; or to be “set straight”. I am telling you that in my model what I am saying is true . Yes I am talking about function invocation. In Ruby: a = lambda { Time.now } a.call != a.call Or… x = “Time.now != Time.now” eval(x) == true Not to get bogged down in any particular notation/syntax… I am expressing the same thing in different ways. f() != f() !( f() == f() ) A != A Now is not now. If you disagree with this - you are welcome to disengage me.
- the_af 5y agoNo need to bring Ruby into this; every language with impure functions (which is almost every language) can reproduce your example. f() != f() And it's not hard to find an f that will satisfy this. This is not surprising or insightful to anyone with programming experience. Do note two things: The notation f.call is the same as f(), i.e. function invocation. You're not comparing functions but invoking them and comparing their results. I don't know the equivalent syntax in Ruby, but in other languages the following is always true: f == f That is, comparing the actual function (something that is constant even if the function is impure) instead of invoking it twice and comparing the results. Note that the assertion "two things that are not the same might be different" is completely unsurprising. We're just letting syntax confuse us in this discussion.
- ukj 5y agoI am bringing Ruby into the discussion so that I can simply point to an ostensive/empirical example - it spares all of us from the tedious "define it!" game. It depends on which evaluation strategy you are using. Call by value or call by reference. def f return Time.now end f == f It produces exactly the same effect as the one I am going for. Look past the syntax.
- the_af 5y agoI don't know Ruby. In your example, if you're comparing the function itself, it is true that f == f But it's not true if that's function invocation and there are implicit arguments. Applying a function and comparing its definition are of course different. The evaluation strategy must come after we agree whether we're comparing values after invocation or definitions. If it's invocations, the evaluation strategy you pick can change the meaning of the program, so that we must discuss semantics. In all of these cases, A == A Once we make all implicit assumptions explicit.