Sipser Exercise 2.23
Theorem: The language is context-free.
Proof: is the language of binary strings that can be split into unequal halves. We will show the context-free grammar, and then prove that it is correct, since the construction is not very intuitive. Let be:
First, it is a relatively simple observation that a CFG with starting variable generates the language of binary strings symmetric about where is 1 or 0. Now, we show that is the language generated by :
Claim: Every string generated by is in .
We can see from the observation above that every string generated by is the concatenation of two strings, one symmetric about 0 and the other symmetric about 1. WLOG let the first one by symmetric about 0 and the second about 1 (that is, the first derivation step is ). Then the word will be of the form , with and .
If then clearly, can be split in two halves, one containing the 0 at the middle index, and one with the 1 at the middle index, and . If not, suppose they are unequal and WLOG that . The length of is , so its even and we have that where . Note the following indices:
- The index of the 0 in is
- The index of the is
- The index of the start of is .
So the index of the with respect to is . So and differ in the ‘th spot, and .
Claim: Every word in can be generated by :
Consider some word . We can write , where and (note the length of is even). Then there is some index such that the corresponding positions in and are unequal, that is, . Let and with . There are characters in before , so label and , note . At this point can be written .
Note we have . Therefore, we have characters left in the string, an odd number. This odd-length remainder is symmetric about . So we can split the remaining odd length string around the middle again. That is, let and .
Now we can write where and . This is the concatenation of two binary strings symmetric about and , one of which is 1 and the other 0. Then, this string can be generated by .