System identification is one of the most important research directions. It is a diverse field which can be employed in many different areas. One of them is the model-based fault diagnosis. Thus, the problems of system identification and fault diagnosis are closely related. Unfortunately, in both cases, the research is strongly oriented towards linear systems, while the problem of identification and fault diagnosis of non-linear dynamic systems still remains open. There are, of course, many more or less sophisticated approaches to this problem, although they are not as reliable and universal as those related to linear systems, and the choice of the method to be used depends on the application. The purpose of this paper is to provide a new system identification framework based on a genetic programming technique. Moreover, a fault diagnosis scheme for non-linear systems is proposed. In particular, a new fault detection observer is presented, and the Lyapunov approach is used to show that the proposed observer is convergent under certain conditions. It is also shown how to use the genetic programming technique to increase the convergence rate of the observer. The final part of this paper contains numerical examples concerning identification of chosen parts of the evaporation station at the Lublin Sugar Factory S.A., as well as state estimation and fault diagnosis of an induction motor.