I don't think this formalization does a great job of what we intuitively mean by expressive power.<p>For one thing, there is no real way to use this definition to compare different languages, only the same language with one extra feature.<p>For another, even for individual features, it is too coarse. The very fact that it doesn't consider syntactic sugar expressive is wrong - most people would agree that a language with more syntax sugar is more expressive, since it allows you to avoid writing boilerplate. By this definition, list comprehensions and switch expressions for example don't add expressive power to a language.<p>Even if we ignore syntax sugar, the comments point out another counterintuitive property of this definiton: any language which includes a facility to convert expressions to ASTs is maximally expressive, since that facility can be used to distinguish any two expressions. This includes things like Lisp's `quote' special form or C's # macro, but also built-in code parsers. So, C++ for example added no expressive power to C by this definition, since C was already maximally expressive:<p><pre><code> #define quote(x) #x
if (strcmp("3 + 3", quote(3 + 3)) {return 1;}</code></pre>