<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://michaelnielsen.org/polymath/index.php?action=history&amp;feed=atom&amp;title=Pseudo-random_generators_%28PRG%29</id>
	<title>Pseudo-random generators (PRG) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://michaelnielsen.org/polymath/index.php?action=history&amp;feed=atom&amp;title=Pseudo-random_generators_%28PRG%29"/>
	<link rel="alternate" type="text/html" href="https://michaelnielsen.org/polymath/index.php?title=Pseudo-random_generators_(PRG)&amp;action=history"/>
	<updated>2026-06-25T02:12:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://michaelnielsen.org/polymath/index.php?title=Pseudo-random_generators_(PRG)&amp;diff=2150&amp;oldid=prev</id>
		<title>Martin Schwarz: siscussion of existence of PRG relative to restricted models of computation</title>
		<link rel="alternate" type="text/html" href="https://michaelnielsen.org/polymath/index.php?title=Pseudo-random_generators_(PRG)&amp;diff=2150&amp;oldid=prev"/>
		<updated>2009-08-01T06:21:55Z</updated>

		<summary type="html">&lt;p&gt;siscussion of existence of PRG relative to restricted models of computation&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:21, 31 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note that there is a slight issue in the above, which is that the probabilities we obtain from this derandomization will be multiples of &amp;lt;math&amp;gt;2^{-m}&amp;lt;/math&amp;gt;, so we cannot expect them to be accurate to within less than this amount. So we cannot get accuracy that is better than 1/poly(n) if m is only around Clogn. However, we can fix the degree of the polynomial that we allow when we are testing for randomness and then choose C to be large enough to defeat all tests that run in time bounded above by a polynomial of that degree.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note that there is a slight issue in the above, which is that the probabilities we obtain from this derandomization will be multiples of &amp;lt;math&amp;gt;2^{-m}&amp;lt;/math&amp;gt;, so we cannot expect them to be accurate to within less than this amount. So we cannot get accuracy that is better than 1/poly(n) if m is only around Clogn. However, we can fix the degree of the polynomial that we allow when we are testing for randomness and then choose C to be large enough to defeat all tests that run in time bounded above by a polynomial of that degree.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Generic PRGs fooling polynomial-time probabilistic Turing machines are not proven to exist (see P=BPP conjecture).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nevertheless, for weaker models of computation unconditional pseudorandom generators are known. For example, there exist [http://en.wikipedia.org/wiki/Pseudorandom_generators_for_polynomials PRGs for mutlivariate polynomials over finite fields].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martin Schwarz</name></author>
	</entry>
	<entry>
		<id>https://michaelnielsen.org/polymath/index.php?title=Pseudo-random_generators_(PRG)&amp;diff=2085&amp;oldid=prev</id>
		<title>Gowers: New page: Loosely speaking, a pseudorandom generator is a deterministic and efficiently computable function that cannot be distinguished in polynomial time from a random function.  To see how to mak...</title>
		<link rel="alternate" type="text/html" href="https://michaelnielsen.org/polymath/index.php?title=Pseudo-random_generators_(PRG)&amp;diff=2085&amp;oldid=prev"/>
		<updated>2009-07-29T08:46:17Z</updated>

		<summary type="html">&lt;p&gt;New page: Loosely speaking, a pseudorandom generator is a deterministic and efficiently computable function that cannot be distinguished in polynomial time from a random function.  To see how to mak...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Loosely speaking, a pseudorandom generator is a deterministic and efficiently computable function that cannot be distinguished in polynomial time from a random function.&lt;br /&gt;
&lt;br /&gt;
To see how to make this idea precise, consider the following set-up. Let m and n be integers with m considerably less than n, and let &amp;lt;math&amp;gt;\phi:\{0,1\}^m\rightarrow\{0,1\}^n&amp;lt;/math&amp;gt;. Now consider the following two ways of producing random n-bit sequences. The first way is simply to choose a sequence uniformly at random from &amp;lt;math&amp;gt;\{0,1\}^n&amp;lt;/math&amp;gt;. This needs n &amp;quot;units of randomness&amp;quot; -- if we were using a coin, we would have to toss it n times. The second way is to choose a sequence x uniformly at random from &amp;lt;math&amp;gt;\{0,1\}^m&amp;lt;/math&amp;gt; and then to evaluate &amp;lt;math&amp;gt;\phi(x)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Obviously, the second method needs only m random bits, so if we regard randomness as a resource, then the second method is a lot cheaper. But will it actually work for us? That is, if we wanted to run a randomized algorithm that needed n random bits, could we get away with using n bits produced by the second method rather than by the first method?&lt;br /&gt;
&lt;br /&gt;
Well, for such an idea to work, we would need the random bits produced by the second method to behave, for all practical purposes, as though they were chosen uniformly from &amp;lt;math&amp;gt;\{0,1\}^n&amp;lt;/math&amp;gt;. What this means is that they should &amp;quot;fool&amp;quot; all efficient algorithms. More precisely still, we require the following. Let x be a random string chosen uniformly from &amp;lt;math&amp;gt;\{0,1\}^n&amp;lt;/math&amp;gt;, let y be a random string chosen uniformly from &amp;lt;math&amp;gt;\{0,1\}^m&amp;lt;/math&amp;gt; and let f be any Boolean function that can be computed in polynomial time. Then the probability that f(x)=1 should differ from the probability that &amp;lt;math&amp;gt;f(\phi(y))=1&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;\epsilon(n)&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;\epsilon(n)&amp;lt;/math&amp;gt; tends to zero faster than any polynomial. If that is the case, then we cannot use f as a test for distinguishing between the random bits and the pseudorandom bits, even if we independently repeat the test polynomially many times.&lt;br /&gt;
&lt;br /&gt;
If m is sufficiently small, then a pseudorandom generator can be used to derandomize algorithms. All you have to do is this. Let r be about the same size as n (the precise condition is that n should be bounded above by a polynomial in r). We can think of an efficient randomized algorithm for computing a Boolean function &amp;lt;math&amp;gt;g:\{0,1\}^r\rightarrow\{0,1\}&amp;lt;/math&amp;gt; as a polynomial-time-computable Boolean function &amp;lt;math&amp;gt;f:\{0,1\}^n\times\{0,1\}^r\rightarrow\{0,1\}&amp;lt;/math&amp;gt;, where f(x,z) is the output when x is the string of random bits and z is the input. If we fix z, then this becomes a function of x. Now suppose we calculated &amp;lt;math&amp;gt;f(\phi(y),z)&amp;lt;/math&amp;gt; instead. If this did not output 1 with almost exactly the same probability, then we would have an efficiently computable function on &amp;lt;math&amp;gt;\{0,1\}^n&amp;lt;/math&amp;gt;, namely the function &amp;lt;math&amp;gt;u\mapsto f(u,z)&amp;lt;/math&amp;gt;, that behaved differently when you presented it with n truly random bits from how it behaved if you presented it with a random output of &amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt;. From this it would follow that &amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt; was not a pseudorandom generator. &lt;br /&gt;
&lt;br /&gt;
So if &amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt; &amp;lt;em&amp;gt;is&amp;lt;/em&amp;gt; a pseudorandom generator, then any efficient randomized algorithm will behave in almost exactly the same way if you use a random &amp;lt;math&amp;gt;\phi(y)&amp;lt;/math&amp;gt; instead of a random x. And if m is &amp;lt;em&amp;gt;really&amp;lt;/em&amp;gt; small, like &amp;lt;math&amp;gt;C\log n&amp;lt;/math&amp;gt;, then you can find out exactly how the algorithm behaves for &amp;lt;math&amp;gt;\phi(y)&amp;lt;/math&amp;gt; by simply running it for every possible y, since that requires &amp;lt;math&amp;gt;2^{C\log n}&amp;lt;/math&amp;gt; runs, which is polynomial in n. Then you simply add up the number of times that you got 1 and divide by the total number of runs, to get a very good estimate for the probability that a truly randomized algorithm would give 1. In this way, the algorithm has been derandomized.&lt;br /&gt;
&lt;br /&gt;
Note that there is a slight issue in the above, which is that the probabilities we obtain from this derandomization will be multiples of &amp;lt;math&amp;gt;2^{-m}&amp;lt;/math&amp;gt;, so we cannot expect them to be accurate to within less than this amount. So we cannot get accuracy that is better than 1/poly(n) if m is only around Clogn. However, we can fix the degree of the polynomial that we allow when we are testing for randomness and then choose C to be large enough to defeat all tests that run in time bounded above by a polynomial of that degree.&lt;/div&gt;</summary>
		<author><name>Gowers</name></author>
	</entry>
</feed>