Conclusion

This introduction was intended mainly to introduce a cast of characters which will play a more prominent role later in the module. Of particular importance are formal languages, algorithms and computability, zeroeth and first order logic, grammars, quantifiers, variables, parsing, trees and graphs, interpretations, extensions of languages and expressiveness, the hierarchies of languages and idealised machines, satisfiability, tautologies and consequences, integers and sets.

One important thing to take away from this is that formal languages do not emerge fully formed from a vacuum. They are designed by humans. They may be intended to be written and read by humans, by computers, or by both. That design process involves a number of compromises, for example between making it possible to express simple ideas with similarly simple statements on the one hand and making statements easy to parse on the other. Formal languages tend to be annoying to work with. Understanding those design trade-offs doesn’t necessarily make them less annoying, but it may at least make the reasons for those annoying aspects clearer.