Using regular expressions, prove that if $L$ is a regular language then the \emph{reversal} of $L$, $L^R=\{w^R: w\in L\}$, is also regular. In particular, given a regular expression that describes $L$, show by induction how to convert it into a regular expression that describes $L^R$. Your proof should not make recourse to NFAs.
We will assume that we are given a regular expression that describes $L$. Let us first look at the concatination operator ($\circ$), and then we can move onto more advanced operators. So our cases of concatenation deal with the length of what is being concatenated. So first we will break all concatenations from $ab$ to $a\circ b$. When dealing with these break the components up as much as possible: $(ab \cup a)b \rightarrow (ab \cup a) \circ b$, but you cannot break associative order between different comprehensions of course.
When $\emptyset^R \rightarrow \emptyset$
When $s = \epsilon$, we have the empty string which is already reversed thus the mechanism does not change
When $s$ is just a letter, as in $s \in \Sigma$, the reversal is just that letter, $s$
When $s = \sigma$, we have a single constituent so we just reverse that constituent and thus $\sigma^R$
When $s = (\sigma_0\sigma_1...\sigma_{k-1}\sigma_k)$ where k is odd, we have a regular expression which can be written as $(\sigma_0\circ\sigma_1...\sigma_{k-1}\circ\sigma_k)$. The reversal of these even length strings is simple. Merely switch the 0 index with the k index. Then Switch the 1 index with k-1 index. Continue till the each element was switched once. Thus the last element is now the first in the reg ex, and the first is the last. The second to last is the second and the second is the second to last. Thus we have a reversed reg ex which will accept the reversed string (first letter is the last etc.) And of course we reverse each constituent. Thus we would get $(\sigma_k^R\sigma_{k-1}^R...\sigma_{1}^R\sigma_0^R)$
When $s = (\sigma_0\sigma_1...\sigma_{k/2}...\sigma_{k-1}\sigma_k)$ where k is even, we have a regular expression generally which can be written as $(\sigma_0\circ\sigma_1...\sigma_{k-1}\circ\sigma_k)$. The reversal of these even length strings is simple. Merely switch the 0 index with the k index. Then Switch the 1 index with k-1 index. Continue till the each element was switched once, but the k/2 element (an integer because k is even). Thus the last element is now the first in the reg ex, and the first is the last. The second to last is the second and the second is the second to last. Thus we have a reversed reg ex which will accept the reversed string (first letter is the last etc.). And that middle letter. And of course we reverse each constituent. Thus we would get $(\sigma_k^R\sigma_{k-1}^R...\sigma_{k/2}^R...\sigma_{1}^R\sigma_0^R)$
Okay the hard part is done. Let us look to the $\cup$ operator. This is merely a union of sets. So given two strings, $s_1, s_2$, the reverse of $s_1 \cup s_2$ is only $s_1^R \cup s_2^R$. The union will not change. And this makes sense. This will only add strings to a set. It does not matter which order they are added to the set, all that matters is that they are.
The kleene star operator is the same. It is merely adding strings to a set, not telling us how we should construt the string persay. So to reverse a kleene star of a string $s$, is only $((s^R)^*)$. Reversal can just move through them.
Thus to reverse this $(((a\cup b) \circ (a))^* \cup ((a\cup b) \circ (b))^*)^R$ we simply follow the rules. To reverse the outer union we simply reverse its two components. To reverse this: $((a\cup b) \circ (a))^*$ kleene star, we simply reverse what is inside it $\rightarrow (((a\cup b) \circ (a))^R)^*$. Then to reverse a concatenation, we index and then switch greatest with least. So we start with $((a\cup b) \circ (a))^R$ and get $((a)^R \circ (a\cup b)^R)$. To reverse that single letter, we reach our base case and get $(a)^R \rightarrow (a)$. This process outlined above describes an inductive description of this change.