A bisimulation for type abstraction and recursion