The functionality and complexity of software and hardware systems are steadily growing. Consequently, the probability of delicate faults existence in these systems is also rising. Some of these faults may result in a destructive loss of money and time. However, one major goal of designing those systems is to construct improved and more reliable systems, regardless of the level of their complexity. Automated reasoning techniques and formal proving methods seems to be a promising approach to specify such systems and be automated to verify them.