We consider inference for the expression lambda f. lambda x. f (f x). We assume that {} represents the empty environment. W({} | lambda f. lambda x. f (f x)) = (a->b->c | a=d->c /\ a=b->d) where a new W(f:a | lambda x.f (f x)) = (b->c | a=d->c /\ a=b->d) where b new W(f:a,x:b | f (f x)) = (c | a=d->c /\ a=b->d) where c new W(f:a,x:b | f) = (a | True) W(f:a,x:b | f x) = (d | a=b->d) where d new W(f:a,x:b | f) = (a | True) W(f:a,x:b | x) = (b | True) Consider a=d->c /\ a=b->d We find phi=[a |-> b->b, c |-> b, d |-> b] is a most general unifier That is, phi(a->b->c) = (b->b)->b->b is the principal type of ({},lambda f. lambda x. f (f x))