CS154
Chris Pollett
Mar 4, 2020
We can use the pumping lemma to show there are languages that are not regular. For example, let `C={ w| w \ mbox(has an equal number of 0's and 1's)}`. To prove `C` is not regular:
Let `k: NN -> NN` be a function such that `k(n) > n`. We know by the surjective pigeonhole principle that any function from `f:{0,1}^n -> {0,1}^{k(n)}` where `k(n) > n` must miss some point in `{0,1}^{k(n)}` (i.e., is not onto). Suppose `f:{0,1}^{\star} -> {0,1}^{\star}` maps string of length `n` to one's of length `k(n)`. Such a function `f` is a hard with respect to a class of adversary languages `mathcal{A}` and stretch `k` if there is no `A in mathcal{A}` such that for all `n` and for all `y in {0,1}^{k(n)}`, `y in A` iff there is an `x in {0,1}^n` such that `f(x) = y`. Such an `f` is a pseudo-random number generator with respect to `mathcal{A}` if the odds an `A in mathcal{A}` guesses which strings of length `k(n)` are in the image of `f` cannot be bounded away from a half. In cryptography, one might study techniques for converting hard functions into pseudo random ones.
Consider the function `f:{0, 1}^\star -> {0, 1}^\star` which maps strings `w=w_0... w_n` to `w' = w_0... w_nz` where `z` has the same value as `w_{lfloor n/2 rfloor}`. To make this function defined for all strings we define `f(epsilon) = 1`. Show this function is hard with respect to adversaries which are regular languages.
Post your solution to the Mar 4 In-Class Exercise Thread.