Software is ubiquitous in modern day life. Software is used in
all personal computing devices, but it also supports the
Internet and all existing communication networks. Software is
also ubiquitous in all forms of transportation, including
avionics, automotive, railways and shipping. Software is also
extensively used in safety-critical systems, e.g. in embedded
medical devices and in transportation systems, but also in
applications where high confidence must be ensured, e.g.
handling of financial records. The development of large-scale
dependable software is extremely hard. One of the reasons is
that the development of dependable software requires solutions
for certifying the correctness of a software system.
Certification of correctness can be achieved with formal
methods, and two main solutions can be envisioned. One solution
consists in formally specifying the software system and, by
iterative refinement steps, a working system is eventually
derived. Theorem provers are used at each iteration, to
guarantee