The problem of automatically improving functional programs using Darlington’s unfold/fold technique is addressed. Transformation tactics are formalized as methods consisting of pre- and post-conditions, expressed within a sorted meta-logic. Predicates and functions of this logic induce an abstract program property space within which conventional monotonic planning techniques are used to automatically compose methods (hence tactics) into a program improving strategy. This meta-program reasoning casts the undirected search of the transformation space as a goal-directed search of the more abstract space. Tactics are only weakly specified by methods. This flexibility is required if they are to be applicable to the class of generalized programs that satisfy the pre-conditions of their methods. This is achieved by allowing the tactics to generate degenerate scripts that may require refinement. Examples of tactics and methods are given, with illustrations of their use in automatic program improvement.