In our first meeting we observed the possibility of more complex kind declarations. The type of lists, for example, behaves as though it was defined as follows: kind list type -> type. type nil list A. type :: A -> list A -> list A. The symbol :: is declared to be infix. Therefore you can specify a list of integers as an expression like this: (1::2::4::3::nil) A good way to practice lambda prolog programming is to describe a relationship sort type sort list int -> list int -> o. sort L1 L2 should be true when L2 contains exactly the same elements as L1 but in increasing order. The easiest specification to write is for what's called "insertion" sort in computer science. In logic programming, this algorithm represents the following reasoning: The empty list is sorted. The list H2::R2 that begins with element H2 and continues with list R2 is a sorted version of L1 if L1 has smallest element H2 and other elements R1. R2 is a sorted version of R1. To implement this, you need another relationship: type smallestAndOthers list int -> int -> list int -> o. And you should know about the builtin comparison operators on integers >, <, <= and >=.