abstract strMatch = { cat S ; fun f : S -> S ; z : S ; }