modus ponens (provable with a "search depth" of 8, and a "maximum number
of goals" of 2)
!a:#. !b:#.
!proofOfA:a. !aImpliesB: (a -> b).
b
"(a and b) implies a" (provable with a "search depth" of 12, and a "maximum
number of goals" of 2)
!a: # .
!b: # .
!a_and_b: (!t: # . (a -> (b -> t)) -> t).
a
a first-order example, the first example from Dowek's paper (provable
with a "search depth" of 21, and a "maximum number of goals" of 2.)
(I modified this slightly, so that the variables to be bound didn't occur
in the same order as in the context.)
!T: # .
!R: (T -> (T -> #)) .
!Eq: (T -> (T -> #)) .
!Antisym: !x:T. !y:T. ((R x y) -> ((R y x) -> (Eq x y))) .
!a: T .
!b: T .
!v: R b a .
!u: R a b .
Eq a b
This algorithm replaces this final equality constraint
with a constraint of the form
?h : !Q[y_1:=Q_1 . . . y_n:=Q_n]. P
This means there don't have to be any equality constraints
in the search context.
This algorithm doesn't implement splitting, and
what Dowek calls "product substitutions" don't seem to work either, so
this seems limited to first-order proofs.
[2] Dowek, G., Felty, A., Herbelin, H., Huet, G., Paulin-Mohring, P., Werner, B. The Coq Proof Assistant User's Guide, INRIA-Rochuencourt, CNRS-ENS Lyon, 1991.
[3] Dowek, G. A complete proof synthesis method for the cube of type systems. Journal of Logic and Computation, 3(3):287-315, June 1993.
[4] Strecker, M. Construction and Deduction in Type Theories. Ph.D. thesis. Universitat Ulm, 1999.
[5] Zwanenburg, J. Object-Oriented Concepts and Proof Rules: Formalization in Type Theory and Implementation in Yarrow. Ph.D. thesis. Eindhoven University of Technology, 1999.