<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Constructible_function</id>
	<title>Constructible function - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Constructible_function"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Constructible_function&amp;action=history"/>
	<updated>2026-04-20T15:38:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Constructible_function&amp;diff=540997&amp;oldid=prev</id>
		<title>imported&gt;Bquozon at 09:30, 19 November 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Constructible_function&amp;diff=540997&amp;oldid=prev"/>
		<updated>2025-11-19T09:30:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Concept in complexity theory}}&lt;br /&gt;
In [[computational complexity theory|complexity theory]], a &amp;#039;&amp;#039;&amp;#039;time-constructible function&amp;#039;&amp;#039;&amp;#039; is a function &amp;#039;&amp;#039;f&amp;#039;&amp;#039; from [[natural numbers]] to natural numbers with the property that &amp;#039;&amp;#039;f&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) can be constructed from &amp;#039;&amp;#039;n&amp;#039;&amp;#039; by a [[Turing machine]] in the time of order &amp;#039;&amp;#039;f&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;). The purpose of such a definition is to exclude functions that do not provide an upper bound on the runtime of some Turing machine.&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{Cite book|title=Computational Complexity: A Conceptual Perspective|last=Goldreich|first=Oded|publisher=Cambridge University Press|year=2008|isbn=978-0-521-88473-0|pages=130, 139}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Time-constructible==&lt;br /&gt;
Let the Turing machine be defined in the standard way, with an alphabet that includes the symbols &amp;lt;math&amp;gt;0, 1&amp;lt;/math&amp;gt;. It has a standard input tape containing zeros except for an input string. Let &amp;lt;math&amp;gt;1^n&amp;lt;/math&amp;gt; denote a string composed of &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ones. That is, it&amp;#039;s the [[Unary numeral system|unary representation]]. Let &amp;lt;math&amp;gt;|n|&amp;lt;/math&amp;gt; be the binary representation.&lt;br /&gt;
&lt;br /&gt;
There are two different definitions of a &amp;#039;&amp;#039;&amp;#039;time-constructible function&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
In the first definition, a function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is called time-constructible if there exists a Turing machine &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, such that for all but finitely many &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;M(1^n)&amp;lt;/math&amp;gt; halts in &amp;lt;math&amp;gt;O(f(n))&amp;lt;/math&amp;gt; steps.&lt;br /&gt;
&lt;br /&gt;
In the second definition, a function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is called time-constructible if there exists a Turing machine &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, such that for all but finitely many &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;M(1^n) = |f(n)|&amp;lt;/math&amp;gt; and halts in &amp;lt;math&amp;gt;O(f(n))&amp;lt;/math&amp;gt; steps.&lt;br /&gt;
&lt;br /&gt;
The second definition may use &amp;lt;math&amp;gt;M(1^n) = 1^{f(n)}&amp;lt;/math&amp;gt; instead, since the two can be interconverted in &amp;lt;math&amp;gt;O(f(n))&amp;lt;/math&amp;gt; steps.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fully time-constructable ===&lt;br /&gt;
There is also a notion of a &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;fully&amp;#039;&amp;#039; time-constructible function&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
A function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is called fully time-constructible if there exists a Turing machine &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, such that for all but finitely many &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;M(1^n)&amp;lt;/math&amp;gt; halts in &amp;#039;&amp;#039;exactly&amp;#039;&amp;#039; &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; steps.&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;{{Cite book |last1=Homer |first1=Steven |title=Computability and Complexity Theory |last2=Selman |first2=Alan L. |publisher=Springer |year=2011 |isbn=978-1-4614-0681-5 |edition=Second}}&amp;lt;/ref&amp;gt; This definition is slightly less general than the first two but, for most applications, either definition can be used.&amp;lt;ref name=&amp;quot;:1&amp;quot;&amp;gt;{{Cite book&lt;br /&gt;
|title=Structural Complexity I&lt;br /&gt;
|last1=Balcázar&lt;br /&gt;
|first1=José Luis&lt;br /&gt;
|last2=Díaz&lt;br /&gt;
|first2=Josep&lt;br /&gt;
|last3=Gabarró&lt;br /&gt;
|first3=Joaquim&lt;br /&gt;
|isbn=3-540-18622-0&lt;br /&gt;
|publisher=Springer-Verlag&lt;br /&gt;
|year=1988}}&amp;lt;/ref&amp;gt; The following equivalence theorem shows that these two concepts are equivalent for most functions used in practice:&lt;br /&gt;
&lt;br /&gt;
Theorem.&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;{{Pg|location=Theorem 2.6}} If &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is a function such that there exists &amp;lt;math&amp;gt;\epsilon &amp;gt; 0&amp;lt;/math&amp;gt; such that, for all but finitely many &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;f(n) \geq (1+ \epsilon) n&amp;lt;/math&amp;gt;, then &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is time-constructible iff it is fully time-constructible. &lt;br /&gt;
&lt;br /&gt;
More succinctly, the condition states that &amp;lt;math&amp;gt;f(n) - n = \Omega(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Space-constructible==&lt;br /&gt;
Function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is called space-constructible, if there exists a Turing machine &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, such that for all but finitely many &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;M(1^n) = |f(n)|&amp;lt;/math&amp;gt; (or equivalently &amp;lt;math&amp;gt;1^{f(n)}&amp;lt;/math&amp;gt;), while using &amp;lt;math&amp;gt;O(f(n))&amp;lt;/math&amp;gt; space.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalently, if there exists a Turing machine &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, such that for all but finitely many &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; given &amp;lt;math&amp;gt;1^n&amp;lt;/math&amp;gt;, halts in a configuration in which exactly &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; cells are not blank, and no other cell has been written to during its operation.&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;{{Pg|location=Definition 2.4}} This is sometimes called &amp;quot;fully space-constructible&amp;quot;. However, the two definitions are equivalent.&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;{{Pg|location=Theorem 2.7}}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
All the commonly used functions (such as &amp;lt;math&amp;gt;n, n^2, 2^n, n!&amp;lt;/math&amp;gt;) are time- and space-constructible, as long as &amp;lt;math&amp;gt;f(n) = \Omega(n)&amp;lt;/math&amp;gt;. The construction is straightforward. For example, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; is constructed by one nested for-loop, while &amp;lt;math&amp;gt;n^3&amp;lt;/math&amp;gt; is constructed by two nested for-loops, etc.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;f(n) = o(n)&amp;lt;/math&amp;gt; is time-constructible, then it is eventually constant, since otherwise there is insufficient time to read the entire input.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\ln n&amp;lt;/math&amp;gt; is space-constructible even though &amp;lt;math&amp;gt;\ln n = o(n)&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For every recursive function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;, there is a recursive function &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; which is time constructible and &amp;lt;math&amp;gt;\forall n, g(n) &amp;gt; f(n)&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;:1&amp;quot; /&amp;gt;{{Pg|location=Lemma 2.3}}&lt;br /&gt;
&lt;br /&gt;
==Applications==&lt;br /&gt;
Time-constructible functions are used in results from complexity theory such as the [[time hierarchy theorem]]. They are important because the time hierarchy theorem relies on Turing machines that must determine in &amp;#039;&amp;#039;[[big-O notation|O]]&amp;#039;&amp;#039;(&amp;#039;&amp;#039;f&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;)) time whether an algorithm has taken more than &amp;#039;&amp;#039;f&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) steps.  This is, of course, impossible without being able to calculate &amp;#039;&amp;#039;f&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) in that time.  Such results are typically true for all natural functions &amp;#039;&amp;#039;f&amp;#039;&amp;#039; but not necessarily true for artificially constructed &amp;#039;&amp;#039;f&amp;#039;&amp;#039;. To formulate them precisely, it is necessary to have a precise definition for &amp;#039;&amp;#039;a natural function f&amp;#039;&amp;#039; for which the theorem is true. Time-constructible functions are often used to provide such a definition.&lt;br /&gt;
&lt;br /&gt;
Space-constructible functions are used similarly, for example in the [[space hierarchy theorem]].&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{PlanetMath attribution|id=3461|title=constructible}}&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Computational complexity theory]]&lt;br /&gt;
[[Category:Types of functions]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Bquozon</name></author>
	</entry>
</feed>