theory Barf imports Main begin definition graph :: "'a set \ 'a set \ ('a \ 'a) \ 'a \ 'a \ bool" (* * With the more general type "'a set \ ' b set \ ('a \ 'b) \ 'a \ 'b \ bool" * the proof by fastforce succeeds below. *) where "graph A B f a b = (a \ A \ b \ B \ f a = b)" lemma "a \ A \ b \ B \ c \ C \ f a = b \ g b = c \ graph A C (g o f) a c" using graph_def (* try0 (* Says: 'Try this: by fastforce' *) *) by fastforce (* Fails to prove lemma -- unification bound exceeded, etc. *) end