function: it should not be just a generic pair 〈q,r〉 of natural numbers but a specific
pair satisfying the specification of the function. In other words, we need the
possibility to define, for a type A and a property P over A, the subset type
-{a:A|P(a)} of all elements a of type A that satisfy the property P. Subset type are
+{a:A|P(a)} of all elements a of type A that satisfy the property P. Subset types are
just a particular case of the so called dependent types, that is types that can
-depend over arguments (such as arrays of a specified lenght, taken as a parameter).
+depend over arguments (such as arrays of a specified length, taken as a parameter).
These kind of types are quite unusual in traditional programming languages, and their
study is one of the new frontiers of the current research on type systems.