In the first example, we perform a normal match operation
   - match_typel [] (alpha --> beta --> gamma)
                    (bool --> ind --> delta);
   > val it = [{redex = `:'c`, residue = `:'d`}, 
               {redex = `:'b`, residue = `:ind`},
               {redex = `:'a`, residue = `:bool`}] : ...
 
Now we require that gamma, although a type variable in the
pattern, not be instantiable. In the first try, the match succeeds because
'c is mapped only to itself. In the second, it fails because an
association is made between 'c and 'd.
   - match_typel [gamma] (alpha --> beta --> gamma)
                         (bool --> ind --> gamma);
   > val it = [{redex = `:'b`, residue = `:ind`},
               {redex = `:'a`, residue = `:bool`}] : ...
   - match_typel [gamma] (alpha --> beta --> gamma)
                         (bool --> ind --> delta);
   ! Uncaught exception: 
   ! HOL_ERR