Forward and Goal-directed Proof