Formal Techniques for Safety-Critical Systems