This paper was converted on www.awesomepapers.org from LaTeX by an anonymous user.
Want to know more? Visit the Converter page.

Epi-constructivism: Decidable sets of computable numbers as foundational objects for mathematics

Abstract

It is well known that the \mathbb{R}, the set of real numbers, is an abstract set, where almost all its elements cannot be described in any finite language.

We investigate possible approaches to what might be called an epi-constructionist approach to mathematics. While most constructive mathematics is concerned with constructive proofs, the agenda here is that the objects that we study, specifically the class of numbers that we study, should be an enumerable set of finite symbol strings. These might also be called decidable constructive real numbers, that is our class of numbers should be a computable sets of explicitly represented computable numbers.

There have been various investigations of the computable numbers going back to Turing. Most are however not expressed constructively, rather computable is a property assigned to some of the abstract real numbers. Other definitions define constructive real numbers without reference to the abstract \mathbb{R}, but the construction is undecidable, i.e., we cannot determine if a given construction represents a computable real number or not. For example, we may define a real as a computable convergent sequence of rationals, but cannot in general decide if a given computable sequence is convergent.

This paper explores several specific classes of decidable constructive real numbers that could form foundational objects for what we might call an epi-constructionist mathematics. These include Primitive Recursive Computed Numbers namely a binary power series where the coefficients are provided by a primitive recursive function, the broader and most useful class of Signed Primitive Recursive Computed Numbers, and the broader still Generalized Computed Numbers which even include the limit of the Specker Sequence which is not a computable number in the traditional sense.

Zvi Schreiber [email protected]

Keywords: Computable analysis, computable numbers, constructive mathematics, foundations of mathematics

1 Foreword

As an informal introduction, let us consider the riddle that a friend told me over dinner which motivated this line of research. Versions of the riddle are found in [CSH08].

An infinite number of people numbered 1,2,3,1,2,3,... are given time to confer, then they are arranged in a line so that person n=kn=k is facing all the people with n>kn>k. Each has a hat with a random natural number placed on their head (the distribution is not important). Each must guess the number on their head, with all but a finite number guessing correctly.

This challenge appears impossible, given that nobody has any information at all about the hat on their head and so they are purely guessing. But the following solution is based on a suggestion attributed in [CSH08] to Yuval Gabay and Michael O’Connor, as graduate students at Cornell University in 2004.

While confering, the people consider all sequences (ai)(a_{i}) of natural numbers grouped into the equivalence class of sequences which defer at only finitely many positions. The axiom of choise ensures that there is a choice of sequences which includes just one representative of each equivalence class. Imagine the people could make such a choice.

Now once lined up with the hats, each person can see all but finitely many hats, and can therefore determine the equivalence class of the full sequence of hats. They assume that the hats are in fact arranged according to the representative sequence of that equivalence class, and guess their own hat accordingly. Since the real sequence of hats, and the class representative defer at finitely manly places, all but finitely many people guess their own hat correctly.

Of all the paradoxical corollaries of the axiom of choice, it was this one that I find hardest to accept. Clearly while the axoim of choice stiuplates that there exists a choice of a representative of each equivalence class of sequences, this choice could not in fact be constructed. So in what sense does it exist? This riddle motivated a study of whether we could have a foundation of mathematics which only reasons about objects which we can actually represent.

2 Introduction

Although we can discuss the axioms of the real numbers \mathbb{R} as an abstract set, it is well known that there is limited opportunity to describe the specific elements of the set, as only countably many elements of \mathbb{R} can be described by any finite expression in any natural or mathematical language; consequently, almost all elements of \mathbb{R} are inherently indescribable. Related to this, it is well known that there is not a unique model of the axioms of \mathbb{R} (there is not even a unique model of the Peano axioms [Pea89] of \mathbb{N}), and there are some fundamental undecidable questions regarding the nature of \mathbb{R}; for example, the continuum hypothesis that \mathbb{R} doesn’t have a subset strictly larger than \mathbb{N} is undecidable [Coh66].

There some well-known constructive approaches to mathematics. Most work in constructive mathematics focuses on the nature of mathematical proof, namely the banning of proving x:P(x)\exists x:P(x) without finding xx. With this limitation, the axiom of choice is discarded, or severely limited, and even the simplest choice, the law of excluded middle (LEM), is dropped from logic. Thus, we cannot prove pqp\vee q without providing at least one of pp or qq. This approach is associated mostly with Brouwer’s intuitionism [Bro23].

Historically, it came as a surprise to many when Bishop showed that a large portion of mathematics survives this limitation [Bis67]. Constructive expositions of real analysis have continued to the present [Abe01, Bri06, DSB06, Bri19].

Here we instead consider what we will call epi-constructivism, so called to distinguish it from constructivism. The principle is that the objects which we wish reason about–the numbers, and more generally the elements in our sets–are constructed explicitly, in the sense that we can write down every object using a string of symbols and that given a string of symbols we can determine in finite time if it is one of our objects or not.

This requirement of constructive objects is orthogonal to the requirement of constructive proofs. That is, we may choose to study only epi-constructive objects, and reject sets like \mathbb{R} which have indescribable elements, but we do not necessarily reject LEM. Conversely, we may accept non-constructive proofs of x:P(x)\exists x\in\mathbb{R}:P(x) without identifying which specific xx has the property, while however rejecting the abstract set \mathbb{R} and focusing instead on classes of constructive objects, maintaining that even if one doesn’t know which xx has the property, one knows that it is some describable xx.

It was A. A. Markov who most clearly set an agenda that mathematics should study objects that may be explicitly constructed. Quoting from [Mar62, Mar71]:

Constructive objects are certain figures that are put together in particular ways from elementary figures, which are the elementary constructive objects. An example would be the structures built up with the help of a child’s “Erector” set [like lego]…In constructive mathematical theories we limit ourselves to the consideration of constructive objects of some standard type…One of the simplest types of constructive objects are the words in a particular fixed alphabet. A word in a given alphabet is a string of letters of that alphabet…

Markov constructs the natural numbers, integers, rationals, and finally real numbers in such as way that they can be written as strings of symbols:

The natural numbers are introduced as words 0, 01, 011, … in the alphabet {0, 1}. The rational numbers are introduced as certain words in the alphabet of rational numbers {0, 1, -, /}…  The normal algorithms in this alphabet that take each natural number into some rational number are called constructive sequences of rational numbers…  Let 𝕌\mathbb{U} be a constructive sequence of rational numbers. We will say that 𝕌\mathbb{U} converges regularly if :iji|𝕌(i)𝕌(j)|<1)\forall:i\leq j\implies i|\mathbb{U}(i)-\mathbb{U}(j)|<1)

We will call proper real numbers the words…  encoding of a regularly convergent sequence. The constructive real numbers…  will be the proper real numbers and the rational numbers.

As paraphrased by [Kus06]:

A pair of algorithms is called a constructive real number if the first algorithm is a constructive sequence of rational numbers and the second effectively estimates the rate of convergence of this sequence. For such constructive real numbers one can define in some natural way the relations of order and equality as well as arithmetical operations.

In other words, the second algorithm gives a modulus of Cauchy convergence to ensure constructively that the first algorithm yields a convergent sequence of rational numbers.

A similar definition may be found, among other equivalent definitions, in [Ric54]

A recursively enumerable sequence of rational numbers a0,a1,a2,a_{0},a_{1},a_{2},\ldots is recursively convergent (r.c.) when there exists a general recursive function g(x)g(x) such that |anam|<1N|a_{n}-a_{m}|<\frac{1}{N} for g(N)<n,mg(N)<n,m. And a recursive real number is the limit of an r.e., r.c. sequence of rational numbers.

Unfortunately, all the above formulations of constructive real numbers or recursive real numbers fall short of the goal of having decidable elements. Given a pair of algorithms (representing a rational sequence and an explicit Cauchy modulus as in [Kus06]) we cannot decide algorithmically if the second algorithm is indeed a valid modulus of Cauchy convergence for the first, as famously, we cannot even decide if it halts [Tur37]. All of the other definitions suffer from the same limitation. They allow a constructive description of real numbers, but the construction is not decidable; given a string of symbols we cannot generally determine if it represents a real number, particularly whether the algorithm describes a Cauchy sequence of rational numbers. Interestingly, Markov defined the integers and rationals in a decidably constructive manner, but then accepted an undecidably constructive definition of the reals.

This paper offers a preliminary investigation of epi-constructivism, by exploring sets of representations of real numbers (i.e., explicitly constructed convergent sequences of rational numbers) that are decidable in that the “numbers” are represented symbolically (as in Markov’s formulation) but with the additional property that the class is a decidable (/enumerable/computable) set, meaning that given a string of symbols, a terminating algorithm can determine whether it is in the set or not. This also implies that our classes of constructive numbers will be enumerable, i.e., an algorithm can output an enumeration of all the valid constructive real numbers in the classes that we present.

The classes we will consider include Primitive Recursive Computed Numbers (PRCN) which are expressed as a binary power series, where the coefficients are output by a primitive recursive function, and the important generalization of Signed Primitive Recursive Computed Numbers (SPRCN) where the binary power series may have negative coefficients. Finally we consider Generalized Computed Numbers (GCN) which are algorithms that may not have an explicit power series, but where nevertheless we can confirm by inspection that the algorithm outputs a convergent sequence of rationals. This latter broadest group includes the limit of the Specker Sequence which is not normally considered computable.

In exploring decidable constructive real numbers, we may borrow not only from ideas of constructive mathematics, but also from the closely related ideas of computable analysis. Accordingly, we first present a very short survey of useful definitions of computable numbers, as they are closely related to constructive real numbers.

2.1 Computability as a property of abstract real numbers

Alan Turing opened his well-known paper [Tur36] with

The “computable” numbers may be described briefly as the real numbers whose expressions as a decimal are calculable by finite means.

So a real number has the property of being computable if there exists a Turing machine, or computer program, which will output the decimal expansion one digit at a time. Note that Turing does not have any explicit constructive agenda. He accepts the existence of real numbers in the abstract sense, and explores which of them have the property of being computable.

This definition arguably places too much importance on the decimal expansion. In practice, it is also inconvenient to approximate a real number by sequentially outputing its decimal expansion due to the so-called table maker’s dilemma [LMT98] [Kah04]. For example, it is necessary to compute an accuracy of 101010^{-10} before determining even the very first digit of the number 0.9999999990.999999999 as it is so close to 1.01.0). Another disadvantage is that given a computer program that has output some decimal digits, we cannot generally determine whether it will output more digits or loop forever, as a result of the halting problem.

Conversely, one advantage of Turing’s definition is that a decimal expansion is inherently a convergent series and given a computer program that outputs only decimal digits, there is no need for a modulus of convergence to ensure that the output digits represent a convergent sequence. We will use this approach in some of our definitions.

More modern definitions do not rely on the decimal expansion. According to [ZR04], xx\in\mathbb{R} is computable, is equivalent to the following:

There is a computable sequence (xs)(x_{s}) of rational numbers which converges to xx effectively in the sense that (s,t)(ts|xsxt|2s(\forall s,t\in\mathbb{N})(t\geq s\implies|x_{s}-x_{t}|\leq 2^{-s}).

This paper, together with [RZ06] and other papers by the same authors, investigate an interesting hierarchy of narrower and broader classes of computable numbers, in the abstract sense of real numbers that are computable. The various definitions of computable numbers are equivalent to Turing’s original definition [Rob51, Sha55, Myh53]. All the definitions refer to real numbers, i.e., they assume the existence of the abstract concept of real numbers, and explore which real numbers have the property of being computable numbers.

2.2 Computable numbers, without reference to real numbers

A definition that does not reference real numbers may be found in Aberth’s book [Abe01] (his final definition 2.1) which defines a real number in the context of computable calculus, thus:

A [computable] real number aa is defined by a program a(K)a(K) that for any value of the positive integer KK supplies a rational approximant mKm_{K} and a nonnegative rational error bound eKe_{K} defining an interval mK±eKm_{K}\pm e_{K} of rational numbers. For any choice of integers K1K_{1} and K2K_{2}, the intervals a(K1)a(K_{1}) and a(K2)a(K_{2}) intersect. Given any positive rational error bound EE, it is certain that an integer K0K_{0} exists such that eK<Ee_{K}<E for K>K0K>K_{0}.

Hence Aberth defines a computable number as a program that outputs a sequence of rational intervals where all of the intervals overlap, and the size of the intervals converges to zero. Here there is a convergence of the study of computable real numbers and constructive real numbers in that this definition of computable real numbers is constructive, providing concrete representations, and nowhere assuming the existence of real numbers in the abstract sense.

However, again the set of computable real numbers satisfying this definition is not decidable. We cannot determine if a program a(K)a(K) has the given properties, as we cannot even determine if a(K)a(K) terminates and outputs any numbers mKm_{K}, eKe_{K}.

Aberth then defines that the programs a(K)a(K) and b(K)b(K) represent the “same computable number” if the intervals a(K1)a(K_{1}) and b(K2)b(K_{2}) overlap for all K1K_{1} and K2K_{2}. However, there is no deterministic way to determine if programs a(K)a(K) and b(K)b(K) have this property (again, we cannot even determine if either one halts for a given value). Hence, the equivalence relation and resulting equivalence classes are not computable or constructively valid. Therefore these computable real numbers, although not referencing the abstract reals, remain abstract in the sense that we cannot always determine if a given program represents a computable number at all, and we cannot necessarily determine if two programs are in the same equivalence class.

Another such approach is found in [Wei00] defining a “name” (i.e. a representation) of a real number xx\in\mathbb{R} to be:

a sequence (I0,I1,I2,)(I_{0},I_{1},I_{2},\ldots) of closed intervals [a;b][a;b] with rational endpoints a<ba<b such that In+1InI_{n+1}\subset I_{n} for all nn\in\mathbb{N} and {x}=nIn\{x\}=\bigcap_{n\in\mathbb{N}}I_{n}.

He goes on to write:

We assume tacitly that intervals are encoded appropriately, such that, strictly speaking, a name of a real number is an infinite sequence of symbols.

Another recent related definition from [Bri19] is:

Given two families of intervals FF and GG, we say FF is consistent with GG if each interval from the family FF intersects each interval from the family GG…  A consistent family of intervals is one that is consistent with itself…  The family FF is fine when, for each positive rational ϵ\epsilon, there is an interval in FF that has length less than ϵ\epsilon…  A [constructive] real number is a fine and consistent family of rational intervals.

Two real numbers are defined to be equal if they are consistent as families of intervals.

Hence, even the most modern approaches to constructive/computable real numbers do not provide decidably constructive real numbers. Further, most authors attempted to define a non-determinable equality relation or equivalence class of the computable/constructive numbers, in an effort to recover the abstract concept of a real number, but at the expense of losing any kind of decidability of the equivalence classes.

3 Seeking a computable set of computable numbers (recursive set of constructive real numbers)

A set is computable (also known as recursive or decidable) if its characteristic function (which maps elements of the set to 11 and non-elements to 0) is computable, that is, if a computer program can determine in a finite time whether a given element belongs to the set [Dav58].

The term computable number is variously use in the literature to refer to specific representations (i.e. the algorithm) or to the underlying abstract real number. Henceforth we will use the term computed number to emphasize that we are referring to the concrete representation (or “name”), i.e., the algorithm or computer program that can compute a convergent sequence of rationals. The term computed number does refer to the abstract concept of a real number, which might be computable, nor to the concept from [Abe01] and others of an equivalence class of computed numbers, since these are non-determinable.

Definition 1.

A Computed Number is a syntactic representation of an algorithm (computer program) in some language that outputs a Cauchy sequence of rational numbers.

This is not an entirely formal definition, as it leaves open the question of the language for algorithms, although per the Church-Turing thesis [Chu36], this may be any Turing-complete language.

There are two desirable properties of a computed number. The first is that every sequence should be infinite, or should declare when it finishes, i.e., we don’t prefer an algorithm which outputs a finite sequence of rational numbers and then fails to halt leaving us in suspense as to whether further rational numbers are forthcoming; rather the algorithm should preferably either output a finite sequence of rational numbers followed by a token representing “finished” (if the represented number is in fact rational) or should output a convergent infinite sequence. We call a computed number with this desirable property a Halting Computed Number, in the sense that each time the program is called upon to produce the next number in the sequence it will halt (not in the sense that the overall sequence halts).

Another desirable property is that every computed number should have an explicit computable modulus of convergence, to enable us to know how long to run the algorithm to reach a given accuracy. We can call this a Modulated Computed Number. Without loss of generality, if we have a constructive method to output a convergent sequence of rationals (qi)(q_{i}), we call it Modulated if it has a modulus of convergence |qiqj|<2i(j>i)|q_{i}-q_{j}|<2^{-i}\,(j>i). In case there is a different modulus of convergence, we can simply adapt the algorithm to skip elements and yield, as the iith element, the first element for which the modulus of convergence gives 2i2^{-i}.

Indeed for many constructive mathematicians, a sequence with an explicit modulus of convergence is the only acceptable Cauchy sequence (this is at least implied by the definition of a Cauchy sequence in [Bis67]).

There are many (Modulated) (Halting) Computed Numbers in the literature quoted above. But our goal in this paper is to explore not individual numbers, but rather classes of computed numbers which are decidably so.

Definition 2.

A Decidable class of (Modulated) (Halting) Computed Numbers is a computable set of syntactic representations of algorithms (computer programs) in some language, (that is, it is decidable if a given algorithm representation is in the set), and where each algorithm in the set is a (Modulated) (Halting) Computed Number.

Generally, we will present two useful approaches to defining a class of computed number algorithms for which we can decide deterministically if an algorithm belongs to the class. The first approach suitable for Modulated Halting Computed Numbers is insisting that the sequence has the form of an exponential power sequence iP(i)2i\sum_{i}P(i)2^{-i} where the P(i)P(i) are in turn given by a well-defined algorithm, guaranteed to halt and output an integer within some bound. This type of Computed Number may be called a Power Series Computed Number.

The second approach, which may produce computed numbers that are not halting or not modulated, is to take any computer program PP that outputs a sequence of rationals, and add a constraint to ensure that it outputs a convergent subsequence. We call this approach a Constrained Computed Number and will return to it later.

4 Primitive Recursive Computed Numbers (PRCNs)

The most obvious approach to the goal of constructing a decidable class of Modulated Halting Computed Numbers is to represent numbers as a power series with bounded coefficients given by primitive recursive functions. Thus, the Primitive Recursive Computed Numbers are specified using an integer and then a fraction, specified with a power series with the coefficients given by a primitive recursive function. This ensures that the computation to any accuracy will terminate. A naive definition, inspired by Turing’s original definition of a computable number, would be that the primitive recursive function takes an argument nn and returns 0 or 11 for the nnth digit of the binary expansion.

Definition 3.

The class of Primitive Recursive Computed Numbers (PRCN) are the pairs (I,P(n))(I,P(n)) where II is an integer and P:Z+{0,1}P:Z^{+}\to\{0,1\} is a primitive recursive function representing the rational series I+i=1P(i)2iI+\sum_{i=1}P(i)2^{-i} or equivalently the rational sequence (I+i=1nP(i)2i)n(I+\sum_{i=1}^{n}P(i)2^{-i})_{n}.

Primitive recursive functions are typically defined to be P:P^{\prime}:\mathbb{N}\to\mathbb{N}. But we can simply ignore P(0)P^{\prime}(0) and interpret any value P(i)1P^{\prime}(i)\geq 1 as a 11m thereby giving us a function P:+{0,1}P:\mathbb{Z}^{+}\to\{0,1\}.

By limiting ourselves to primitive recursive functions (which have a decidable syntax and are always total), we can easily validate by means of a simple terminating algorithm whether any given (I,P(n))(I,P(n)) is a PRCN. Hence, this definition realizes the goal of this paper of mathematical objects that are decidably constructive.

It should be clear that the PRCNs are a decidable class of Computed Numbers, indeed of Modulated Halting Computed Numbers. If we wish to be very strict regarding representing the elements as words in a language, à la Markov, we may write each PRCN as:

II + Σ\Sigma |sgn( P(i)P(i) )|*2\uparrow(-i)

where for II we substitute any integer O11…or -O11…and for P(i)P(i) we substitute the syntactic representation of any primitive recursive function. Note the use of |sgn()| wherein sgn is the sign function and |||| the absolute value, to constrain the value to 0 or 11. The summation implicitly ranges over i=1,2,3i=1,2,3\ldots. A computer program could determine in finite time if a given string of symbols is in this class.

Indeed, using what is now known as a Markov Algorithm (which Markov called a Normal Algorithm), we can build all the PRCNs with string rewriting rules, beginning with 0+ Σ\Sigma |sgn(i)|*2\uparrow(-i) and applying the rules 0\rightarrow10, 0\rightarrow-0 and rules to repeatedly substitute for (i) syntactic representations of the various primitive recursive functions: constant, successor, projection, composition, and primitive recursion.

Unfortunately, this definition leaves no flexibility. Every real number has a unique binary expansion (except for numbers of the form I/2nI/2^{n} which have a finite expansion and classically also have a second representation with infinite trailing 11’s).

Using this specific definition, it is therefore difficult to provide a Primitive Recursive Computed Number representing a real number as basic as say π\pi. The reason again is the Table Maker’s Dilemma, namely in order to calculate the nnth digit in the binary expansion of π\pi, it is necessary to calculate not an accuracy of 2n2^{-n} but rather an accuracy of 2(n+k)2^{-(n+k)} where kk is the number of consecutive 0s or 11s following the nnth digit (or 99’s in decimal). Given that kk is not known in advance, there is no obvious primitive recursive function to calculate the nnth digit, as primitive recursive functions allow only loops with a pre-determined bounded number of iterations.

(For π\pi specifically we can leverage the property |πpq|q42\lvert\pi-\frac{p}{q}\rvert\geq q^{-42} [Mah53] or better |π3pq|q4.6016\lvert\frac{\pi}{\sqrt{3}}-\frac{p}{q}\rvert\geq q^{-4.6016} [Hat92] to provide an upper bound on the number of consecutive 11s (or 99s) following the nnth digit and use this bound to create a primitive recursive function which calculates the nnth digit. But this would not be obvious a priori, and for other transcendental numbers there may not be such a bound.)

Hence the motivation to generalize the definition in the following section.

5 Signed Primitive Recursive Computed Numbers (SPRCNs)

Definition 4.

The Signed Primitive Recursive Computed Numbers (SPRCN) are the pairs (I,P(n))(I,P(n)) where II is an integer and P:+{1,0,1}{P}:\mathbb{Z}^{+}\to\{-1,0,1\} is a primitive recursive function representing the coefficients in the rational series I+i=1P(i)2iI+\sum_{i=1}P(i)2^{-i}, or equivalently the rational sequence (I+i=1nP(i)2i)n(I+\sum_{i=1}^{n}P(i)2^{-i})_{n}.

Again if P:P^{\prime}:\mathbb{N}\to\mathbb{N} is a primitive recursive function with the traditional domain and co-domain, we interpret the numbers {P(i)}\{P(i)\} (i>1i>1) as representing the coefficients 1,0,1-1,0,1 respectively depending if P(i)>1P(i)>1, P(i)=0P(i)=0, P(i)=1P(i)=1 respectively.

This generalized definition also gives us computed numbers as recognizable constructive objects in line with the goals of the paper. Syntactically we can write each SPRCN as:

II + Σ+\Sigma^{+} sgn( P(x)P(x) )*2\uparrow(-i)

where again II is the syntatic representation of an integer and P(x)P(x) a syntactic representation of a primitive recursive function, and we use the special summation Σ+\Sigma^{+} which always takes the absolute value of the first non-zero summand if any.

Although in the abstract sense you could express any number using only the coefficients 0 and 11 as a PRCN, by allowing the P(i)P(i) to have the value 1-1 we solve the Table Maker’s Dilemma, as we can make corrections. For example if at first we have an estimate 212^{-1} or 0.10.1 we can later correct it to 0.01110.0111 by subtracting 242^{-4}. We will see in a theorem below that this enables us to express most known power series as SPRCNs.

We find SPRCNs to be the most natural and useful decidable class of Computed Numbers, indeed SPRCN is a Decidable class of Modulated Halting Computed Numbers.

It is a apparent that every Signed Primitive Computed Number converges to an abstract computable number in the classical sense, although we will see that the converse is not true. Of course, primitive recursive functions could be substituted with another class of total functions, although primitive recursive functions are widely considered to be the most natural class of functions that are obviously total.

Now we must prove that we can find Signed Primitive Computed Numbers to represent useful irrationals such as 2\sqrt{2}, π\pi.

For 2\sqrt{2} we can easily formulate a signed primitive recursive function that initially guesses 2+122+\frac{1}{2} and then seeing that (2+12)2>2(2+\frac{1}{2})^{2}>2 guesses 2+12142+\frac{1}{2}-\frac{1}{4}, etc., fluctuating above and below 2\sqrt{2} converging exponentially.

For π\pi we can use the Madhava–Leibniz sequence πn=443+4547+49±42n1\pi_{n}=4\,-\,{\frac{4}{3}}\,+\,{\frac{4}{5}}\,-\,{\frac{4}{7}}\,+\,{\frac{4}{9}}\,-\,\cdots\pm\,{\frac{4}{2n-1}} which we can rewrite as 3+71547+493+\frac{7}{15}\,\,\,-\,{\frac{4}{7}}+\,\frac{4}{9}\cdots. Now we will show that in order to recursively choose P(i)P(i) we need to find an nn such that m>n:|πmπn|2i1\forall m>n:|\pi_{m}-\pi_{n}|\leq 2^{-i-1}. In this case n=2in=2^{i} would work. We then choose P(i)P(i) so that |(I+i=1P(i)2i)πn|<2i1|(I+\sum_{i=1}P(i)2^{-i})-\pi_{n}|<2^{-i-1}.

(Of course in practice we may choose a faster converging series such as the Nilakantha series π=3+42×3×444×5×6+46×7×848×9×10+\pi=3+{\frac{4}{2\times 3\times 4}}-{\frac{4}{4\times 5\times 6}}+{\frac{4}{6\times 7\times 8}}-{\frac{4}{8\times 9\times 10}}+\cdots)

We will now formalize this and prove more generally that we have a Signed Primitive Recursive Computed Number (SPRCN) representation for any series of rationals with summands given by primitive recursive functions and with an explicit modulus of Cauchy convergence.

Theorem 5.1.

Let (qn)(q_{n}) by any primitive recursive rational sequence in the sense that the nnth element is given by A(n)/B(n)A(n)/B(n) where AA and BB are primitive recursive functions with AA any integer and BB positive. Let the sequence have a primitive recursive Cauchy modulus of convergence CC so that for every natural number ee representing the order of magnitude of a desired error, we have i,jC(e):|qiqj|<2e\forall i,j\geq C(e):|q_{i}-q_{j}|<2^{-e}). Then there is a Signed Primitive Recursive Computed Number with the same limit as (qn)(q_{n}).

Proof.

Let an=i=0max(C(1)C(n+1))A(n)/B(n)a_{n}=\sum_{i=0}^{\max(C(1)\ldots C(n+1))}A(n)/B(n) which is clearly a primitive recursive rational function of nn and defines a subsequence of (qn)(q_{n}) which converges exponentially. We show by induction that we can choose II and P(i){1,0,1}(i=1n)P(i)\in\{-1,0,1\}\,(i=1\ldots n) to make p0=Ip_{0}=I and pn=I+i=1nP(i) 2ip_{n}=I+\sum_{i=1}^{n}P(i)\,2^{-i} so that |pnan+1|2(n+1)|p_{n}-a_{n+1}|\leq 2^{-(n+1)}.

The base case of the induction is trivial by choosing the integer II with |Ia1|12|I-a_{1}|\leq\frac{1}{2} which can be done by a primitive recursive function.

Now assuming |pn1an|2n|p_{n-1}-a_{n}|\leq 2^{-n} and we know by definition of the modulus of convergence CC that |an+1an|2(n+1)|a_{n+1}-a_{n}|\leq 2^{-(n+1)} then by the triangle inequality |pn1an+1|2(n+1)+2n=32(n+1)|p_{n-1}-a_{n+1}|\leq 2^{-(n+1)}+2^{-n}=3*2^{-(n+1)}. Now a primitive recursive function can choose P(n)=1,0,1P(n)=-1,0,1 according to whether an+1pn1a_{n+1}-p_{n-1} is in the interval [32n+1,12n+1)\left[-\frac{3}{2^{n+1}},-\frac{1}{2^{n+1}}\right) or [12n+1,12n+1)\left[-\frac{1}{2^{n+1}},\frac{1}{2^{n+1}}\right) or [12n+1,32n+1)\left[\frac{1}{2^{n+1}},\frac{3}{2^{n+1}}\right) respectively, so that an+1pn=an+1pn1P(n)/2na_{n+1}-p_{n}=a_{n+1}-p_{n-1}-P(n)/2^{n} will always be in the middle interval and will therefore satisfy |pnan+1|2(n+1)|p_{n}-a_{n+1}|\leq 2^{-(n+1)}, completing the recursion. ∎

The SPRCN are our most natural decidable class of Computed Numbers. They are well behaved in that they always produce an infinite exponentially convergent sequence of rationals. Moreover as we have seen, the class includes representations of most popular irrationals like the algebraic numbers, π\pi, ee etc. However, they cannot necessarily represent all abstract computable numbers, as our next result shows.

5.1 PRCN and SPRCN are proper subsets of the computable numbers

Let CN be the classical abstract set of computable real numbers as defined by Turing. Let SPRCN¯\overline{\text{SPRCN}} represent the abstract real numbers which may be represented by SPRCN computed numbers.

Theorem 5.2.

SPRCN¯CN\overline{\text{SPRCN}}\subset\text{CN}

Proof.

SPRCN¯CN\overline{\text{SPRCN}}\subseteq\text{CN} is clear since every PRCN number can be computed by a computer program which sums the sequence.

To find a CN number NN that is not represented by any SPRCN computed number we use the classical diagonal argument. Consider for simplicity only numbers between 0 and 11. Let fif_{i} be the iith primitive recursive function in a lexicographical enumeration of primitive recursive function, giving the power expansion of the SPRCN number sis_{i}.

The approximation j=12f1(j)2j\sum_{j=1}^{2}\frac{f_{1}(j)}{2^{-j}} gives s1s_{1} to within ±14\pm\frac{1}{4}. Hence, we can pick the first two digits of the binary expansion of NN (which fixed NN to an interval of width 14\frac{1}{4}) to ensure that it does not overlap with this interval. We can then calculate s2j=14f2(j)2js_{2}\approx\sum_{j=1}^{4}\frac{f_{2}(j)}{2^{-j}} to within 116\frac{1}{16} and pick the next two binary digits of NN to ensure that NN will be in an interval of width ±116\pm\frac{1}{16} (within the interval of width 14\frac{1}{4} which we have already fixed by the first two digits) not overlapping with the interval that contains s2s_{2}. We continue in that manner to construct a computable number NN that cannot be equal to any SPRCN number sis_{i}. ∎

5.2 PRCN¯SPRCN¯\overline{\text{PRCN}}\subset\overline{\text{SPRCN}}

There is no direct means of converting an SPRCN computed number into a PRCN computed number. An interesting example is the SPRCN number defined by P(1)=1P(1)=1, with P(i)P(i) (i>1)i>1) equal to 0 if 2i2i can be expressed as the sum of two primes, otherwise P(i)P(i) is 1-1 if ii is divisible by 1313 or 11 otherwise. Clearly this PP is a primitive recursive function. But we do not know even the first digit of the decimal expansion so cannot express it as a PRCN. Specifically, if the Goldbach Conjecture[Gol42] is true then the number is simply 0.10.1 which can be expressed easily enough as a PRCN with either binary expansion 0.100000.10000\dots or 0.011110.01111\dots. But in case the Goldbach Conjecture is false we cannot determine even the first digit of the binary expansion without knowing whether the smallest even number which cannot be expressed as the sum of two primes is divisible by 1313.

Accordingly, there is definitely no trivial transformation of SPRCNs to PRCN as solving the Goldbach Conjecture is not trivial, but that leaves open the question whether all abstract computable numbers that have a SPRCN representation also have a PRCN representation, or whether PRCN¯SPRCN¯\overline{\text{PRCN}}\subset\overline{\text{SPRCN}}. Based on an idea from an anonymous reviewer whom I thank, we can construct an SPRCN number which has no possible PRCN representation.

Theorem 5.3.

PRCN¯SPRCN¯\overline{\text{PRCN}}\subset\overline{\text{SPRCN}}

Proof.

It’s known that the primitive recursive functions are recursively enumerable, and we start with enumeration G1,G2,G_{1},G_{2},\dots of the primitive recursive functions {1,1}\mathbb{N}\rightarrow\{-1,1\} and define the nullary primitive recursive functions gi=Gi[i]g_{i}=G_{i}[i]. We construct an SPRCN number SS which outputs a digit 11, then “executes” g1g_{1} and outputs a binary digit of 0 for every computation step of g1g_{1} until it terminates, then outputs the final output of the program |g1||g_{1}|. It then outputs another digit 11, does the same for g2g_{2}. So we get an SPRCN number whose signed binary expansion is:

S=0 . 1 0T[g1]|g1| 1 0T[g2]|g2|S=0\ .\ 1\ 0^{T[g_{1}]}\ |g_{1}|\ 1\ 0^{T[g_{2}]}\ |g_{2}|\ \dots (1)

where T[gi]T[g_{i}] is the number of computation steps till gig_{i} terminates and 0T[g1]0^{T[g_{1}]} means that many digits 0 and |gi||g_{i}| is the output of program gig_{i}.

To see that this is primitive recursive, i.e. computable using only bounded loops we calculate the iith digit of the signed binary expansion as follows:

LOOP THROUGH THE PROGRAMS g_1... g_i FOR EACH:
COMPUTE UP TO A MAX OF i STEPS OR UNTIL TERMINATED
WHEN TOTAL NUMBER OF STEPS COMPUTED ACROSS THE PROGRAMS CONSIDERED SO FAR IS i:
IF A PROGRAM IS IN MIDDLE OF EXECUTION HALT WITH OUTPUT 0
ELSE HALT WITH OUTPUT OF THE PROGRAM WHICH JUST TERMINATED

The fact that a primitive recursive function is able to compute a bounded number of computation steps of the nnth primitive recursive function is established in Kleene’s recursion theorem.

However in the equivalent unsigned binary expansion, each block of digits is replaced e.g. 100001100001100001\rightarrow 100001 and 10000(1)01111110000(-1)\rightarrow 011111 so

S=0.(1+|g1|2)(1|g1|2)T[g1] 1(1+|g2|2)(1|g2|2)T[g2] 1S=0\ .\ (\tfrac{1+|g_{1}|}{2})\ (\tfrac{1-|g_{1}|}{2})^{T[g_{1}]}\ 1\ (\tfrac{1+|g_{2}|}{2})\ (\tfrac{1-|g_{2}|}{2})^{T[g_{2}]}\ 1\ \dots (2)

To see that this sequence is not primitive recursive, note that a function which outputs the nnth digit must be able to determine the final output |gi||g_{i}|. For example the first digit is (1+|g1|2)(\tfrac{1+|g_{1}|}{2}). There is a well known argument by contradiction that a primitive recursive function cannot determine the final output of the nnth primitive recursive function. Suppose Q:{1,1}Q:\mathbb{N}\rightarrow\{-1,1\} is a primtiive recursive function such that Q[i]=gi=Gi[i]Q[i]=g_{i}=G_{i}[i]. We can also construct Q[i]=Q[i]Q^{\prime}[i]=-Q[i]. Now QQ^{\prime} must be in the enumeration so for some jj we have Q=GjQ^{\prime}=G_{j}. But then Q[j]=Gj[j]=Q[j]Q^{\prime}[j]=-G_{j}[j]=-Q^{\prime}[j] providing the contradiction. ∎

5.3 Equality of SPRCN numbers

As is well known regarding computable numbers (e.g. [Abe01]), there is no general way to determine if two numbers are equal in the sense that the difference between their sequences converges to zero.

Signed Primitive Recursive Computed Numbers (I1,P1(n))(I_{1},P_{1}(n)) and (I2,P2(n))(I_{2},P_{2}(n)) could converge to the same abstract computable real number if I1=I2I_{1}=I_{2} and i:P1(i)=P2(i)\forall i:P_{1}(i)=P_{2}(i). They can also converge to the same abstract number without these conditions since we allow negative coefficients, the expansion is not unique. Even in the first case there is no general way to compute in finite time whether i:P1(i)=P2(i)\forall i:P_{1}(i)=P_{2}(i). So in general we cannot determine equality, although in some specific cases we would be able to.

This lack of equality is frustrating but reflects the reality that when we describe two real numbers we cannot always determine if we are describing the same number.

5.4 Addition and subtraction of Signed Primitive Recursive Computed Numbers

A corollary of Theorem 5.1 is that we can follow the procedure in the proof to define addition of Signed Primitive Recursive Computed Numbers. For two Signed Primitive Recursive Computed Numbers (I1,P1(n))(I_{1},P_{1}(n)), (I2,P2(n))(I_{2},P_{2}(n)) we define the sum to be (I1+I2,(P1+P2)(n))(I_{1}+I_{2},(P_{1}+P_{2})(n)). Unfortunately we cannot add (P1+P2)(P_{1}+P_{2}) in the obvious pointwise manner as we want the parameters pip_{i} to always be 1,0,1-1,0,1.

So to compute addition (P1+P2)(P_{1}+P_{2}) we take the primitive recursive rational sequence A(n)/B(n)A(n)/B(n) created by adding A(n)=P1(n)+P2(n)A(n)=P_{1}(n)+P_{2}(n) and B(n)=2nB(n)=2^{n}. There is an obvious primitive recursive Cauchy modulus of convergence C(e)=e+1C(e)=e+1. Then we apply Theorem 5.1.

Subtraction is achieved by adding the negation (I,P)(-I,-P).

5.5 Multiplication of Signed Primitive Recursive Computed Numbers

For multiplication of two Signed Primitive Recursive Computed Numbers (I1,P1(n))(I_{1},P_{1}(n)), (I2,P2(n))(I_{2},P_{2}(n)) we can again define a primitive recursive sequence of rationals A(n)/B(n)=(I1+i=1nP1(i)2i)(I2+i=1nP2(i)2i)A(n)/B(n)=(I_{1}+\sum_{i=1}^{n}P_{1}(i)2^{-i})(I_{2}+\sum_{i=1}^{n}P_{2}(i)2^{-i}) and define the primitive recursive Cauchy modulus of convergence E(n)=n+log¯(I1+1)+log¯(I2+1)E(n)=n+\overline{log}(I_{1}+1)+\overline{log}(I_{2}+1) where log¯(x)\overline{log}(x) gives log2(x)log_{2}(x) rounded up to an integer, and we again use Theorem 5.1.

These arithmetic definitions have the desired property that the traditional abstract limits will be added/multiplied in the classical sense.

5.6 Division of Signed Primitive Recursive Computed Numbers

As is known in the field of computable analysis, it is not possible in general to calculate a multiplicative inverse, and we therefore cannot perform division. This is because given a computed sequence, we cannot determine in general if it converges to zero.

6 Recursive Computed Numbers

A natural extension (but one that turns out to be of limited use) is to drop the requirement for the function PP to be primitive recursive. Thus a Recursive Computed Number is a pair (I,P(n))(I,P(n)) where II is an integer and P(n)P(n) is a recursive function which takes a positive integer and can only return the values 0,10,1 where (I,P(n))(I,P(n)) represents the rational series I+i=1P(i)2iI+\sum_{i=1}P(i)2^{-i} or equivalently the rational sequence (I+i=1nP(i)2i)n(I+\sum_{i=1}^{n}P(i)2^{-i})_{n} which may terminate as a finite sequence in case some P(m)P(m) doesn’t terminate.

Definition 5.

The Recursive Computed Numbers are the pairs (I,P(n))(I,P(n)) where II is an integer and P(n)P(n) is a recursive function which takes a positive integer and which is syntactically structured to only ever return one of the values 0,10,1 where (I,P(n))(I,P(n)) represents the rational sequence (I+i=1nP(i)2i)n(I+\sum_{i=1}^{n}P(i)2^{-i})_{n}.

In other words, in computing terms, we have an arbitrary computer program constructed to output a sequences of 0,10,1 providing the coefficients of a power series. This definition is equivalent to that of the classical computable numbers, restated to be a Modulated Decidable class of Computed Numbers by focusing on the algorithm and removing any reference to the abstract real numbers. That is, we can determine by syntactic inspection if we have a recursive computed number.

However, clearly these recursive computed numbers are not in general Halting and therefore do not provide a satisfying foundation of constructive real numbers, as we may try to output successive rational approximations and be left hanging forever wondering if another approximation is forthcoming.

We could again allow coefficients of 1-1, although a recursive function can calculated ahead an arbitrary number of places so is able to calculate power series without this relaxation.

6.1 Arithmetic with Recursive Computed Numbers

The limited usefulness of Recursive Computed Numbers becomes apparent when we try to do something as simple as adding two of them together, the challenge being that we never know if any one of the programs will ever output another number in the sequence.

Given two programs PP, QQ it would be natural to alternately perform operations of programs PP and QQ, and whenever there is a new number available from either output, the sum of the last two known numbers is output, so e.g. if the last outputs are pip_{i} and qjq_{j} and then qj+1q_{j+1} becomes available, we can output pip_{i} + qj+1q_{j+1}. However, this sum is not a Recursive Computed Number, as we may for example reach p1+q100p_{1}+q_{100} after which p2p_{2} suddenly becomes available but we cannot output p2+q100p_{2}+q_{100} as this would involve a big jump out of turn. We would obtain a better behavior if we output p2+q2p_{2}+q_{2} and then wait for p3+q3p_{3}+q_{3}. This would be exponentially convergent but we can’t do this either since we don’t know and may never know whether p2p_{2} actually exists, so we may get stuck with an empty output representing zero, which does not accurately represent the sum since QQ is non-zero.

Interestingly, the abstract computable numbers are a field, but there is no good way to perform arithmetic operations on the concrete representations. That is if pp and qq are computable real numbers then we know there is a computer program which outputs a sequence converging to p+qp+q but there is no direct way to add programs PP and QQ to P+QP+Q.

We will therefore not dwell on the Recursive Computed Numbers but rather move on to a more general class of Computed Numbers which has preferable properties.

7 Generalized Computed Numbers

7.1 Naive GCNs

It is well known that some Cauchy Sequences (indeed monotone bounded sequences) of rational numbers have limits that are not computable. We will investigate whether there are decidable classes of computed numbers which admit numbers that are not classically computable.

For convenience we define a version of the Specker sequence [Spe49] (Si)(S_{i}) as follows. Let P1,P2,P_{1},P_{2},... be an enumeration of computer programs in some programming language, lexicographically ordered.

Then define rational number S1S_{1} as binary 0.10.1 (i.e. 12\frac{1}{2}) if program P1P_{1} halts after 1 step, 0.00.0 otherwise. More generally SiS_{i} is 0.bi1bi2bii0.b_{i1}b_{i2}...b_{ii} where bijb_{ij} is a binary digit which is 11 if PiP_{i} halts in jj execution steps. Thus each SiS_{i} adds one digit to the end of the binary expansion of Si1S_{i-1}, but may also have some earlier digit flip from 0 to 11, that is the jjth digit will flip from 0 to 11 if program PjP_{j} (j<i)(j<i) terminates after exactly ii steps.

For example we might have

0.0
0.00
0.010
0.0101
0.01110

where the iith digit flips from 0 to 11 in the jjth number if program PiP_{i} halts after jj steps.

Clearly this sequence is Cauchy in the abstract sense, as every digit in the binary expansion will either stay 0 forever or flip to 11 and then remain the same, so the sequence is monotone increasing with an upper bound of 0.1111=10.1111\ldots=1. But we cannot estimate it to a given error range, as we do not know in general if and when P1P_{1} will terminate and the first digit might flip to 11 creating a jump or 12\frac{1}{2}.

So the sequence is not Cauchy in the sense often used in constructive mathematics, since it does not have a computable modulus of Cauchy convergence.

However there is another means to constructively force a sequence to be Cauchy. If we can be sure that the sequence only has a specific finite number of jumps of each order of magnitude, then we can be certain it is Cauchy, even if we do not know exactly when it will reach a certain range of convergence.

This idea is presented in Rettinger and Zheng’s [RZ06] definition of dbc computable numbers:

We call an index pair (i,j)(i,j) a 2n2^{-n}-jump if |xixj|2n|x_{i}-x_{j}|\geq 2^{-n}. A sequence (xs)(x_{s}) converges ff-bounded effectively if it has at most f(n)f(n) non-overlapping 2n2^{-n}-jumps for all nn\in\mathbb{N}.

A real number xx is ff-bounded computable (f-bc, for short) if there is a computable sequence (xS)(x_{S}) of rational numbers which converges to xx f-bounded effectively. If a real number is ff-bc for a computable function ff, then it is also called divergence bounded computable (dbc, for short)

We might call the ff function a modulus of Cauchy divergence. Their idea is that even if we do not have a modulus of Cauchy convergence i.e. we cannot predict when the sequence will settle down to a given error range, we can still ensure it’s Cauchy if we instead limit the number of divergent jumps of every order of magnitude.

Clearly a sequence with such a modulus of Cauchy divergence is Cauchy since for every nn there is a finite number of points xix_{i} such that there exists a point xj(j>i)x_{j}\,(j>i) with |xjxi|>2n|x_{j}-x_{i}|>2^{-n}. Therefore, the tail of the sequence after the last such point satisfies the Cauchy condition.

Now [RZ06]’s definition is not a constructive definition as it depends on the abstract concept of a real number. Moreover, there is no deterministic way to decide if a given sequence represents a dbc number. But this approach to defining a Cauchy sequence without a modulus of convergence but with an explicit bound on the number of jumps of each order of magnitude is useful in our constructive approach.

We will use the term Generalized Computed Numbers (GCN) for Unmodulated Decidable Classes of Computed Numbers which use a modulus of divergence instead of a modulus of convergence, so that they are known to converge conceptually but we do not know their rate of convergence.

Definition 6.

A naïve definition of Generalized Computed Numbers (NGCN) are the triples (I,P(n,m),J(N))(I,P(n,m),J(N)) where II is an integer and P:×{0,1}{P}:\mathbb{Z}\times\mathbb{Z}\to\{0,1\} is a primitive recursive function with P(n,m)P(n,m) giving the mm’th version of the nnth coefficient of the binary power series, while J(n)J(n) is a primitive recursive function limiting how many times the nnth coefficient P(n,i)P(n,i) may change as ii increases.

The triple (I,P(n,m),J(N))(I,P(n,m),J(N)) represents the rational sequence

(I+i=0n𝕁j=1n[P(i,j),J(n)]2i)n\left(I+\sum_{i=0}^{n}\mathbb{J}_{j=1}^{n}[P(i,j),J(n)]2^{-i}\right)_{n}

Where 𝕁j=1n[P(i,j),J(n)]\mathbb{J}_{j=1}^{n}[P(i,j),J(n)] means we take the J(n)J(n)th element (or the last element if there are fewer than J(n)J(n) elements) of the subsequence {P(i,j=2n)|P(i,j)P(i,j1)}\{P(i,j=2\ldots n)\,|\,P(i,j)\neq P(i,j-1)\}. That is we take the last value, or the value which represent the J(n)J(n)th change, whichever is first.

Thus in the NGCNs, as the power series is expanded, coefficients that have already been calculated may change, provided there is a computable bound on how often they change. Here we do not need negative coefficients as we are able to correct coefficients.

Again, it should be clear that NGCN elements can be written in a formal syntax so it forms a decidable/computable set. Every NGCN represents a computable convergent rational sequence, albeit in general not modulated, i.e. we do cannot know how far in the sequence we need to advance to achieve a specific level of approximation. Thus NGCN is a Decidable class of (Unmodulated) Halting Computed Numbers.

Clearly the Specker sequence can be represented here with J(n)=1J(n)=1, so in that sense the GCNs can represent numbers which are not classical computable numbers, hence the name Generalized.

Unfortunately this definition gives too much weight to the binary expansions and does not conveniently support operations such as multiplication. An alternative approach may by provided by constraining a general program rather than constructing a power series.

7.2 Constrained GCNs

Definition 7.

A Generalized Computed Number (GCN) is a triple (P,M,j)(P,M,j) where MM\in\mathbb{N} is an integer bound on the output, jj is a primitive recursive function giving a bound on the number of jumps of any order of magnitude, and PP is a program which outputs rational numbers which we will run within a specific wrapper program GG which ensures that

  • PP outputs at least one rational number (say it starts by outputting 0)

  • Every output satisfies |qi|M|q_{i}|\leq M (if not the program will repeat the previous output instead)

  • The nnth output is a rational number qnq_{n} such that for every knk\leq n there does not exist j(k)j(k) non-overlapping pairs 1a1<b1<a2<b2<<aj(k)<bj(k)n1\leq a_{1}<b_{1}<a_{2}<b_{2}<\ldots<a_{j(k)}<b_{j(k)}\leq n with |qaiqbi|>2n|q_{a_{i}}-q_{b_{i}}|>2^{-n} (if not the program will repeat the previous output instead).

With this definition we have a very flexible Decidable Class of Generalized Halting Computed Numbers. They are however Unmodulated.

PP is not Halting as a general computer program PP may get stuck in a loop. If PP is limited to be primitive recursive algorithms, then the GCN is Halting in the weak sense that it will always output an infinite sequence, but the sequence may get stuck repeating the same number while PP outputs numbers that are censored by GG.

7.3 GCN arithmetic operations

7.3.1 Addition

Given two GCNs X=(PX,MX,jX)X=(P_{X},M_{X},j_{X}) and Y=(PY,MY,jY)Y=(P_{Y},M_{Y},j_{Y}) we define the addition X+Y=(PX+Y,MX+MY,JX+JY)X+Y=(P_{X+Y},M_{X}+M_{Y},J_{X}+J_{Y}) where PX+YP_{X+Y} outputs zero and then executes PXP_{X} and PYP_{Y} in parallel (or alternatively executes a step of each); whenever a new rational number is output from PXP_{X} (or PYP_{Y} respectively) PX+YP_{X+Y} outputs the new value added to the last known value from PYP_{Y} (PXP_{X}) or zero if none.

7.4 Additive inverse

This is obtained trivially by X=(PX,MX,jX)-X=(-P_{X},M_{X},j_{X}) where PX-P_{X} is the program PXP_{X} with an extra wrapper that negates each rational number coming out of PXP_{X}.

7.5 Multiplication

Given two GCNs X=(PX,MX,jX)X=(P_{X},M_{X},j_{X}) and Y=(PY,MY,jY)Y=(P_{Y},M_{Y},j_{Y}) we define the multiplication XY=(PXY,MXMY,jXY)X*Y=(P_{X*Y},M_{X}*M_{Y},j_{X*Y}) as follows:

  • PXYP_{X*Y} is a computer program which wraps PXP_{X} and PYP_{Y} and outputs zero and then executes PXP_{X} and PYP_{Y} in parallel (or alternately executes a step of each); whenever a new rational number is output from PXP_{X} (or PYP_{Y}) PXYP_{X*Y} outputs the new value multiplied by the most recent value from PYP_{Y} (PXP_{X}) or zero if none.

  • To construct JXYJ_{X*Y} first pick the smallest mxm_{x} and mym_{y} such that MX2mxM_{X}\leq 2^{m_{x}}, MY2myM_{Y}\leq 2^{m_{y}}.

    • JXY(1)=1imyJX(i)+1imxJY(i)J_{X*Y}(1)=\sum_{1\leq i\leq m_{y}}J_{X}(i)+\sum_{1\leq i\leq m_{x}}J_{Y}(i)

    • JXY(k)=JX(k+my)+JY(k+mx)(k>1)J_{X*Y}(k)=J_{X}(k+m_{y})+J_{Y}(k+m_{x})\,\,(k>1).

We see here the need for having a bound MM. Having a bound on the numbers being output by XX allows us to limit the impact of the jumps in YY after multiplying by numbers in XX, and vice versa.

8 Conclusion

We suggested an approach of epi-constructionism and explored computable sets of computable numbers, or, equivalently, decidable constructive real numbers. We were able to define Computed Numbers as fundamental objects without relying on the abstraction of real numbers. The Computed Numbers are algorithms which output convergent sequences of rational numbers. This much was well known in the literature. Here we studied Decidable classes of Computed Numbers.

The best behaved class are the Signed Primitive Recursive Computed Numbers given by a binary power series with coefficients yielded by primitive recursive functions, allowing for negative coefficients. This means we can obtain an approximation of the limit to any accuracy in finite time. The class is closed under addition, subtracting and multiplication but there is no division and we cannot in general determine equality of the limit.

A more general class, the Recursive Computed Numbers, corresponds to the concrete representations of the classical computable numbers, but this class is not closed under arithmetic operations and is not “halting” - the algorithm outputting a sequence might become stuck in an infinite loop.

Finally we introduced the Generalized Computed Numbers which admit decidable representations of non-computable numbers such as the Specker limit, and still satisfy the requirement that each Generalized Computed Number has a concrete decidable syntactic representation. However these sequences are not modulated - we do not know when an output sequence will settle down to within a given error range. GCNs might be considered curiosities, they show that the concept of a computable set of computable numbers can stretch to include represent the Specker limit which is not classically a computable number. But GCNs are not a particularly natural set and being unmodulated, are not suitable for computation in practice.

It is the signed primitive recursive computed numbers which are the most likely foundation for a decidably constructive mathematics.

9 Acknowledgments

My thanks to Frank Waaldijk, Nachi Avraham Reem, Joshua Fox, Ziv Hellman, Benjamin Fox, Thorsten Altenkirch for their constructive feedback.

10 Disclosure

No funding was received. The author has no conflicts of interest.

References

  • [Abe01] Oliver Aberth. Computable Calculus. Elsevier Science, 2001.
  • [Bis67] Errett Bishop. Foundations of constructive analysis. McGraw-Hill series in higher mathematics. McGraw-Hill, 1967.
  • [Bri06] Mark Bridger. Real Analysis: A Constructive Approach 1st Edition. Wiley-Interscience, 2006.
  • [Bri19] Mark Bridger. Real Analysis: A Constructive Approach Through Interval Arithmetic. American Math Society, 2019.
  • [Bro23] Luitzen E. J. Brouwer. Über Definitionsbereiche von Funktionen [on the significance of the principle of excluded middle in mathematics, especially in function theory]. Mathematische Annalen, 97:60–75, 1923.
  • [Chu36] Alonzo Church. A note on the entscheidungsproblem. J. Symbolic Logic, 1(1):40–41, 03 1936.
  • [Coh66] Paul Joseph Cohen. Set theory and the continuum hypothesis. Dover Publications, 1966.
  • [CSH08] A. D. Taylor C. S. Hardin. An.lntroduction to Infinite Hat Problems. Springer Science+Business Media, 30(4), 2008.
  • [Dav58] Martin Davis. Computability & Unsolvability. McGraw-Hill, 1958.
  • [DSB06] Luminita Simona Vita Douglas S. Bridges. Techniques of Constructive Analysis. 2006.
  • [Gol42] Christian Goldbach. letter to Euler. 1742.
  • [Hat92] Masayoshi Hata. Improvement in the irrationality measures of π\pi and π2\pi^{2}. Proc. Japan Acad. Ser. A Math. Sci., 68(9):283–286, 1992.
  • [Kah04] William Kahan. A logarithm too clever by half. 2004.
  • [Kus06] Boris A. Kushner. The constructive mathematics of A. A. Markov. The American Mathematical Monthly, 113(6):559–566, 2006.
  • [LMT98] Vincent Lefèvre, Jean-Michel Muller, and Arnaud Tisserand. Toward correctly rounded transcendentals. IEEE Transactions on Computers, 47:1235 – 1243, November 1998.
  • [Mah53] Kurt Mahler. On the approximation of π\pi. 1953.
  • [Mar62] Andrey A. Markov. On constructive mathematics. Trudy Mat. Inst. Steklov, Problems of the constructive direction in mathematics. Part 2., 67:8–14, 1962.
  • [Mar71] Andrey A. Markov. On constructive mathematics (translation from russian paper of 1962. Amer. Math. Soc. Translations, 2(98), 1971.
  • [Myh53] John Myhill. Criteria of constructibility for real numbers. J. Symbolic Logic, 18(1):7–10, 03 1953.
  • [Pea89] G. Peano. Arithmetices principia: nova methodo. Fratres Bocca, 1889.
  • [Ric54] H Gordon Rice. Recursive real numbers. Proceedings of the American Mathematical Society, 5(5):784–791, 1954.
  • [Rob51] R. M. Robinson. Review of “R. Peter: Rekursive Funktionen”. J. Symbolic Logic, 16:280 – 282, 1951.
  • [RZ06] Robert Rettinger and Xizhong Zheng. A hierarchy of turing degrees of divergence bounded computable real numbers. Journal of Complexity, 22(6):818 – 826, 2006. Computability and Complexity in Analysis.
  • [Sha55] Norman Shapiro. H. g. rice. recursive real numbers. proceedings of the american mathematical society, vol. 5 (1954), pp. 784–791. Journal of Symbolic Logic, 20(2):177–177, 1955.
  • [Spe49] Ernst Specker. Nicht konstruktiv beweisbare Sätze der Analysis [nonconstructive theorems of analysis]. J. Symb. Log., 14(3):145–158, 1949.
  • [Tur36] Alan M. Turing. On computable numbers, with an application to the Entscheidungsproblem. Proc. Lond. Math. Soc. (2), 42:230–265, 1936.
  • [Tur37] Alan M. Turing. On Computable Numbers, with an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society, s2-42(1):230–265, 01 1937.
  • [Wei00] Klaus Weihrauch. Computable Analysis: An Introduction. Springer-Verlag, Berlin, Heidelberg, 2000.
  • [ZR04] Xizhong Zheng and Robert Rettinger. Weak computability and representation of reals. Mathematical Logic Quarterly, 50(0):431–442, 2004.