Abstract
This lecture completes the previous one by ending the presentation of general methods for proving programs with one based on higher-order logics (those where we can also quantify on predicates) and on the lambda-calculus already presented in detail in the 2009-2010 lecture. First, we show why higher-order logic is more expressive than first-order logic. For example, to prove a property by recurrence, in predicate calculus we need a recurrence axiom scheme that generates a particular axiom for each predicate to be studied, and therefore an infinite number of axioms; in higher order, a single standard axiom suffices, since we can universally quantify the working predicate. Other advantages will become apparent as the lecture continues. One disadvantage, of course, is the greater complexity of the logic and of some of the algorithms used to process it.