This work is about proving safety properties on programs. Such proof can be done by showing that "forbidden" program states, violating the property, are unreachable. For proving this kind of properties, we propose a semi-automatic verification technique which attempts to combine some of the advantages of model-checking, abstract interpretation and interactive proof. This technique is based on so-called tree automata completion. Like model-checking, this technique automatically proves safety of finite systems and of some classes of infinite systems having a regular representation. Outside of those classes and like abstract interpretation, tree automata completion permits to safely and finitely over-approximate the behavior of infinite state ...