2.1 Coding

of course, c, d are meta-variables, and also some other notations are changed slightly.

2.2 Decoding

Having seen this, decoding is rather straightforward.
Let us describe the seen language with a LL(1) grammar, and let us make use of the lack of backtracking and look-ahead, when deciding which parser approach to use.

Some notes about the used parser library: of course, we can choose more sophisticated parser libraries (Parsec, arrow parsers) than shown below. A pro for this simpler parser: it may be easier to augment it with other monad transformers. But, I think, the task does not require such ability. So the real pro for it is that it looks more didactical for me. Of couse, it is inefficient, but I hope, the LL(1) grammar will not raise huge problems.

should denote the set of syntactically correct bit sequences (semantically, they may either terminate or diverge), i.e. the domain of the decoding function, i.e. the range of the coding function. Thus,

3 Related concepts

4 To do

Writing a program in Haskell -- or in combinatory logic:-) -- which could help in making conjectures on combinatory logic-based Chaitin's constructions. It would make only approximations, in a similar way that most Mandelbrot plotting softwares work: it would ask for a maximum limit of iterations.