Simple types allow only rudimentary specification of programs, but they
can be checked and inferred automatically. Now we move to constructive
predicate logic as a richer formalism to express program properties.
The presentation of logic will be in the form of a system of natural
deduction which can be concisely specified in LF and implemented in Elf.