In this web content, the author discusses the concept of “observational equivalence” and its relation to the expressiveness of programming languages. They start by explaining how adding certain features to a language can either increase or maintain its expressive power. They use examples such as unary negation, exceptions, and the “halt” keyword to illustrate how some features require global transformations while others only need local transformations. The author then introduces the concept of observational equivalence, which defines when two programs are considered equivalent based on their behavior in all possible contexts. They also explore the connection between observational equivalence and denotational semantics in briefly addressing the properties of compositionality and adequacy. Finally, the author suggests further reading for those interested in exploring these topics in more depth.
https://langdev.stackexchange.com/questions/2015/how-can-we-compare-expressive-power-between-two-turing-complete-languages