Program equilibrium—a program reasoning approach