Some existing systems for supporting reasoning about functional programs have been constructed without first formalising the semantics of the language. This paper discusses how a reasoning system can be built, within the HOL theorem proving environment, based on an operational semantics for the language and using a fully definitional approach. The theoretical structure of the system is based on work by Andrew Gordon, where applicative bisimulation is used to define program equivalence. We discuss how this theory can be embedded in HOL and the type of tools which can be built on top of this theoretical framework to make reasoning possible in practice.