A new clean foundation for mathematics
-
A new clean foundation for mathematics
Abstract. I have been working on this maths system for a while, it’s not fully finished, but I think it’s mature enough at its core to be presentable. It is still not rigorously defined, but that should be easy with a bit of more effort. I had watched Mr. Kuykendall’s interviews with David de Hilster a year or two ago. I have been programming for 14 years now (more than half my life), and I am currently designing a CPU ISA, which forces me to define the behaviour of mathematical operations and the semantics of what is and isn’t a number. I initially was only dissatisfied with the integer division by 0 being forbidden, which prompted me to re-examine how I approach maths. I also philosophically reject Cantor’s set theory because he posits that you can count infinite things and arrive at a result, and that counting different infinite things has different results. So I ended up having to re-define maths and Mr. Kuykendall’s work did end up being very useful as a reference, so I am posting this here.
Motivation. I have come to disdain modern maths, and especially the formalist school of thought, as opposed to the constructivist school of thought, as it only accepts things that can be constructed in finite steps to be acceptable (a computer cannot infinitely calculate and yield a result, after all). Additionally, I have been annoyed with the sloppy way in which maths treats the types of values. Having grown up with C++, I refuse to engage in maths that does not have clearly defined data types for every value. In modern maths, 1 is both a natural number, an integer, a rational number, a real number, etc. Modern maths confuses notation (syntax) with meaning (semantics) whenever it is convenient. Sometimes, a whole expression is treated as one symbolic entity that can be manipulated symbolically, at other times, it is treated as a description for a calculation whose result is manipulated semantically. The funniest thing was in cryptography, where the security parameter is 1^n, which is intended to mean a string of n-times repeated “1”. That took me ages to understand.
Long term goals. I am not a physicist or anything like that, I am a programmer. I’m interested in the nature of the universe but I’m not that deep into all the natural phenomena to be able to create a theory of reality. Being a programmer, I much more care about the semantic analysis of the world in terms of ideas, concepts, relations, accurate namings and representations. Long term, I hope to develop this into a mathematical system that can be translated from and to my programming language with 0 friction. Because both programming and maths should be about calculating things based on representations of the real world. And computers in their core design should perfectly connect both. I think having mutually fully aligned maths, computers, and programming languages will lead to great scientific and engineering-wise progress and understanding, as clarity and ease of thought will be maximised. Of course this all requries that the maths is inherently compatible with reality.
Core principles
- Finity. Infinite things do not exist. Infinity merely describes the potential of a property to take arbitrarily large values. So you can have arbitrary iterations on an approximation procedure, but you cannot have infinite iterations, as it would never end and never yield a result.
- Computability/Constructibility. Without a method describing the construction of a mathematical object within finite steps, the existence of such an object is rejected. This means that “real numbers” are rejected, as well as implicit descriptions (such as “existential proofs” about objects that are never constructed). My maths system is not based on an infinitely powerful and precise otherworldly computer, but targets mental or on-paper calculations, or physical computers in the real world, constrained by physical resources and time.
- Typing. Like in a statically typed programming language, the type of each value must be fixed and determinable at all times.
- Semantics. Mathematics is intended for deriving knowledge about the real world. Hence, every operation and every mathematical object has to have semantic intent behind it (as opposed to the modern formalist school of mathematics, where the description or notation is the intent). This means I reject Plato’s ideal world of independently existing concepts.
At all times, it must be clear what something is intended to represent, what the thought behind something is. Mathematic constructs without an accompanying thought or intent are to be rejected. The mathematical notation must be unambiguous (although you do not have to use LISP style parentheses where the resulting ambiguity makes no difference (a+a+a vs. a+(a+a)) or where operator precedence is unambiguous).
- Imperative procedures. Maths is, if possible, to be conducted in an imperative manner, meaning that the explicit operations to be performed in a function are given, instead of an implicit, constraint-based description of functions. For example, saying “the square root of X is the number Y where Y*Y = X” is not acceptable as a definition of a mathematical operation. Operations without an accompanied algorithmical, imperative definition are rejected. Of course, the concept of the square root can be described in that implicit manner, but it is not sufficient for use in actual calculations, therefore not a sufficient definition.
Once you have to define a square root algorithmically, it quickly becomes apparent that sqrt(2) does not exist, because you need infinite iterations on the approximation to arrive at it, violating the finity/computability constraints.
Numbers. By its etymology, “number” means to number or count something. This should be the very foundation of all mathematics, and should not be broken. Counting starts at 1, and counts upwards successively. 0 represents the count of nothing (as it is also fittingly called naught). An infinite number, by its etymology, is an oxymoron, since number means count, and infinite means un-ending. An unending count will never yield any result. So I only see “natural numbers” as actual numbers. The type for numbers is called N or Z (for the German Zahl).
Multiplicity/Ratios. For a lack of a better term, currently, I use ratios or multiplicities to describe how many times one number is another number. A ratio is defined by a pair of numbers (N/N). The type for ratios is called R or V (for the German Verhältnis). All unit-based values in maths are multiples of a base unit. All measurements are multiplicities. The 1.24… notation of numbers is merely the ratio 124… / 10^n. By this definition, 0.999… and other numbers do not exist, because they are the division of two infinite numbers which also do not exist by the definition of the terms.
Sizes/Magnitudes. A size or magnitude can either be a number or a multiplicity/ratio. This is what you would use to calculate in general, and what allows the interchangeable or combined use of numbers and ratios (pair of numbers). The type for Sizes is called S or G (for the German Größe). Without a R being seen as an S, you cannot compare it to an N. Only when one or both are seen as S, can N and R be compared or combined.
Processes vs. Values. My maths system differentiates between processes and their results. A computational process, such as sqrt(2), never yields a perfectly exact result, and yields different results based on how many iterations you perform. However, we can still formulate equations using sqrt(2) for correctness. My maths system does not acknowledge infinite processes as yielding any kind of value, but the processes themselves are still valuable for getting arbitrarily precise approximations. So all calculations involving any arbitrarily precise computational process are always acknowledged to result in an approximation only. And even something like 5² is not a number. 25 is a number, 5² is a computational process. This distinction is important for reasoning about runtime and result of a calculation.
However, something like sqrt(a)² can be simplified into a without any calculation required. So, one discipline of my maths system is not just the calculation of over formulas, but also the systemic analysis of formulas, focusing on the minimisation of computational errors by rearranging or simplifying / combining terms. But all of this meta-mathematics should be focused on real-world equations and problems with the direct purpose of improving our ability to compute and solve these problems, not on gobbledigook like infinite-dimensional matrices or whatever modern mathematicians waste their lives on.
Fundamental operations
- Addition. Pretty straightforward, I don’t need to elaborate on it.
- Remainder. Operations with remainder (not just division) are defined as a pair of sizes (S), namely the result and remainder. The remainder is accessed by using R(…), otherwise the result is implicitly used when continuing to calculate on an expression that has a remainder.
- Subtraction with remainder. Negative numbers were invented solely for the purpose of dealing with underflow / remainder of a subtraction. This is evident from the fact that without considering subtraction, you will never arrive at a negative number, as all you have left is counting, adding, multiplying, and dividing. As Mr. Kuykendall correctly identified, negative numbers have very illogical properties for all the other operations.
Subtraction with remainder is denoted using “\”. It results in a result and a remainder: a \ b = c | d, where c is how many things were left over, and d is how many things failed to be subtracted. For example, 5 \ 3 = 2 | 0, and 3 \ 5 = 0 | 2.
Now that we have a way to arbitrarily subtract without negative numbers, there is no reason for the concept of positive or negative numbers. Subtraction with remainder should be used when doing bookkeeping or otherwise requiring a balance of two opposed forces (such as having a weight limit on an elevator, and subtracting the actual payload, you either get how much additional weight it can still handle, or by how much the payload exceeded the weight limit).
- Natural subtraction. Natural subtraction is denoted using “-“. It is forbidden to subtract a larger size from a smaller size (you cannot have 3 apples and then take 5 of them away), similar to how division by 0 is forbidden in modern maths. Natural subtraction should be used whenever subtraction means to actually subtract something from something else. You cannot subtract 10°K from 1°K, as there are is no negative heat / positive coldness.
- Multiplication. Straightforward, I don’t need to elaborate on it.
- Natural division. Natural division is the division with remainder. It is denoted using “÷”. The natural division by 0 is allowed: a ÷ 0 = 0 | a. This is easy to see when you frame division as: You have a flock of a sheep. You have b descendants. How many sheep do you give to each descendant when fairly distributing, and how many sheep remain? If you have no one to distribute to, you will not distribute anything, and everything remains. Natural division is not the inverse of multiplication. It is the inverse of multiplication and an addition (of the remainder).
Natural division of two sizes results in a number as result and a size as remainder, as it counts whole multiples and a remainder. Natural division of two numbers obviously has a number as remainder instead of a size, though.
- Rational division. Rational division of two sizes results in a ratio (R = Z/Z). It is denoted using “/” or vertical fraction notation. This works like normal rational math, and rational division by 0 is forbidden, although 0/0 should be 1, since in general, a/a=1, as each number is 1x as large as itself. Rational division acts like the inverse of multiplication, but is not defined as the inverse of multiplication, since otherwise 0/0 would be undefined.
Spatial maths
This part is heavily inspired by Mr. Kuykendall’s work, and should be equivalent.
- Spatial directions. A direction is a directed arrow without a length property. The 6 arrow notations (←/→, ↓/↑, and ↙/↗) from Mr. Kuykendall are used to identify the basic 3 spacial axes. I personally use a prefixed “-” as the opposite direction, but if Mr. Kuykendall does not like it, he can also use “¬” (which is commonly used for logical negation). The type for spatial directions is D or R (for the German Raumrichtung). There are infinite possible directions, which can receive individual names or be described as a sum of other named directions.
- Angular directions. An angular direction is either clockwise or counter-clockwise (with respect to an observer looking along an axis): ↶ and ↷. Again, just like with spatial directions, – or ¬ can be used to invert a direction. The type for angular directions is A or W (for the German Winkelrichtung).
- Directed sizes. A direction (D or A) combined with a size (S) is either a directed arrow with a length (DS/SD) or an angular measure (AS/SA). One counter-clockwise rotation is defined as 1↶ (magnitude 1). Sine and Cosine etc. are defined via 1-based angular measure, so Pi (which does not exist due to finity/computability constraints) is not required for doing any geometry besides circumferences and spherical surfaces. Using [S](…), we extract the magnitude of a directed size, and using [A](…) or [D](…) we extract the angular or spacial direction of a directed size. Using [→]|…|, we extract the axial component from a directed size, the same goes for angular sizes.
- Rotation. The rotation function rot(angle: AS, rotational_axis: D, x: D) → D rotates a direction x along the rotational axis by the specified angular measure. The sine and cosine can be defined by extracting the ↑ and → component of the ↶ rotation along the ↗ axis using sin(45/360) = [↑]|rot(↶45/360, ↗, →)|.
Circles and spheres aren’t real, and pi does not exist, but rotations and angles are very real and do not require infinite series or any of that crap.
This is by no means a complete description of spatial maths, and specifying a computer ISA, I mostly care about the number and arithmetic side, but I wanted to at least go as far as to be able to bridge into Mr. Kuykendall’s work. The areas of proofs and logic still are unspecified in my maths system, but I think I have laid a good and semantically clean foundation so far, which is fully in line with intuition and reality.