> The function I am talking about doesn't take any arguments.
All impure functions have an implicit dependency on (some subset of) the state of the universe when they execute; in mathematics and logic something with this kind of dependency is typically noted by parameterizing it by time when the actual precise nature of the dependency is outside of the scope of the immediate analysis (because a dependency on the state of the universe at the time of execution is equivalent to a dependency on the time of execution with a hidden function mapping time to state of the universe.)
That impure functions methods are in many programming languages syntactically not distinguished from pure ones does not change the logic here.
That Time.now(at time t0) is distinct from Time.now(at time t1) is... unsurprising, and not an example of A != A in logical terms.
By the way... your conception of a pure function is incoherent.
Parameters ARE inputs. Results ARE outputs. Renaming them to something else is just obscuring the fact that you are still talking about a function with side-effects.
So using Python as my model of computation this is a pure function, but it does nothing:
def f(): pass
This is NOT a pure function. It has outputs.
def g(): return True
This is NOT a pure function. It mandates input.
def h(x): pass
This is NOT a pure function - it mandates input and produces output:
def j(x): return x
This is a pure function. It calculates the answer to 2+2, but doesn't tell you what it is.
def k(): 2+2
If pure functions take no input and produce no output, what is there left to analyse? What is Logic and Mathematics talking ABOUT?
You know what the state of the universe is when you do logic?
Tell us more! I didn't believe in omniscience until now.
Time.now(t1) and Time.now(t2) is meaningless in this context because t1 and t2 are unbound variables. What are you passing to your function? Where is it coming from?
My function says you are overlooking something.
[1] pry(main)> Time.now(t1)
NameError: undefined local variable or method `t1' for main:Object from (pry):1:in `__pry__'
[2] pry(main)> Time.now(1)
ArgumentError: wrong number of arguments (given 1, expected 0) from (pry):2:in `now'
If you're familiar with the literature of programming languages, you'll see references to the "world" or the "universe" all the time. That's the kind of universe we mean in this discussion, not the one Carl Sagan talked about.
As for the rest: please provide the implementation of your Time.now function and I'll tell you its implicit parameters. If you're not talking about an actual function that can be run by a computer, then please tell me so and I'll drop it -- I'm not interested in hypothetical functions tautologically defined not to be equal to themselves.
>If you're not talking about an actual function that can be run by a computer
As far as I can tell you are not talking about such a function either when you speak about equality, but I'll reserve judgment until you produce an implementation.
>I'm not interested in hypothetical functions tautologically defined not to be equal to themselves.
OK, but you are interested in hypothetical functions tautologically defined to be equal to themselves.
That's perfectly fine - we are interested in different tautologies.
We are talking about function declaration not implementation, right?
The expression A = A can be trivially re-written in another notation as equal(A,A).
The reason you don't question the implementation of the equal() function is because it's declared as being true
however it's implemented.
So, I declare f() != f() as being true. I also declare that f() takes no arguments. All I am doing is translating (transpiling?) English into Ruby.
"Now is not now" => "Time.now != Time.now"
Talking about function arguments is not even in point. What's the argument to now() in English?
> All I am doing is translating (transpiling?) English into Ruby.
Incorrectly.
> "Now is not now" => "Time.now != Time.now"
Sure, “Now (pointedly looks at watch) is not now (pointedly looks at watch)” is true, and the equivalent of the Ruby. Ruby expressions lack the implicit simultaneity that English sentences wthout some contextual signal of explicit time dependency have, and your mistranslation ignores this.
The function I am talking about doesn't take any arguments.