Wednesday, July 21, 2010

What = really means, and a variation of sets

I have often wondered how = fits in as an operator in a strict mathematical setting. It doesn't seem right that is is simple a boolean function, why should the value trueness or falsehood matter to equations.
In a previous post, I followed a train of thought that lead to equality being seen as the 0th operator of modified hyper-operators (where 1st operator is +, 2nd is *, 3rd is power etc), I called this slight modification ultra-operators.
With this definition, equals only returns a value when the two values are equal, a bit like this in pseudo C++:
operator =(a, b)
if (a==b)
return a; // or b

This leads to a problem of definition, what is the value of 1=0? no value is returned, but we cannot therefore say the value is the empty set.. because who says it should be returning a set. If it returns the empty set, then we could equally say that 1=1 returns the set {1}. However, it is wrong to think of 1 and {1} as being the same thing, since by induction it should be the same as {{1}}, and {} would be the same as {{}} and none of these are true of sets.

The more correct answer has to be that = returns a number of results, that number may be 0, e.g. 1=0 returns 0 results, or it may be 1, e.g. 3=3 returns 1 result. Or it may return 2 results e.g. x^2=2+x.

But no-one has put these numbers into a set. In fact it is probably useful to give a name to this concept, so instead of a set of values, we have a 'number' of values. So whereas a set of the first 3 integers is {1,2,3}, a number of integers is 1,2,3. And the equivalent to the empty set is just 'empty' or void.
So void does not contain itself, and a single value like 3 is also the same as a 'number' of values 3 (the number happens to be 1). Also the number of values containing 1,2 and the third element being the number of values 3,4 is the same as the number of values 1,2,3,4. i.e. there is no containment going on.

So what to make of a common formula such as

x^2 = 2+x where x is a member of integers <-- which is a set

The problem with this common definition of the formula is that it doesn't say which member, it just says 'a' member.
The set version would be
{ for all x member of integers: x^2 = 2+x }
but this is more long winded, and gives a set of answers, which isn't part of the scope of basic arithmetic and doesn't match the value of other operators which just give values.

Instead, what the above (normal) formula is actually shorthand for is:
the 'number' of values
x^2 = 2+x for each x in the set of integers
which is short hand for:
0^2 = 2+0, 1^2 = 2+1, 2^2 = 2+2, 3^2 = 2+3, ....
a 'set' of values without the brackets, i.e. a 'number' of values.
since there are only two above that actually evaluate to anything, this can be shortened to:
-1^2 = 2+-1, 2^2 = 2+2
which evaluates to:
1, 4
i.e. the formula itself has a value.
Therefore you can do arithmetic on it:
3*(x^2 = 2+x)
which gives 3, 12.

Equality operator isn't a boolean function, it is simply a way of writing a value (or a number of values), writing 1, 4 is exactly the same as writing x^2=2+x, just as 2/4 is the same as 1/2.
So writing an equation with no answers is the same as writing nothing... writing 1,2,1=0,4 is the same as the numbers 1,2,4.

Interestingly some programming languages have picked up on this before mathematics has I think. Several languages will simply ignore expressions that don't add up, and the language C already give '=' a value, for example:
a = b = c; works because b=c has the value b (though admittedly this is also assigning c to b).

So in summary, if we all add 'number of' to the already existing 'set of' and 'list of' then we get a formal way to deal with multiple results. And since 'number of' has no container, the equivalent of the empty set {} or the empty list () is just 'empty' or void.

The same sort of thing should also work for inequalities, e.g. x<10 x member of reals is a 'number of' values, where the number happens to be infinite. Thus it has a (or many) value(s) and can be used in equations, e.g. 3 * (x<10) = x<30.

This will probably feed in to the soft numbers post coming in a few weeks.

1 comment:

  1. TGlad, I really like your writing style and the topics that you're exploring. Thanks so much for being a pillar of interesting thought! I love the ideas behind ultraOperators. Arithmetic ops always seemed to me to have a natural kind of order-of-escalation to them, and properly exploring the root one (=) is at least as interesting as (if not more, than) escalation upwards towards tetration and further hyperOperators.

    This also leads very nicely into your future work on 3d numbers, it'd be fascinating to flesh out ultraOperators on your 3d numbers and see what that could generate!?

    Perhaps this avenue could even be as fruitful as the math behind 3d fractals has been in recent years? (I know you're well accross that little revolution!!) Could it even elucidate an implementation of a properly 3-dimensional fractal automata (that isn't only totalistic, not that I don't love Gray Scott with all my heart ;D, three cheers for Robert Munafo!! btw).

    Great work man!