We present a logic, called Synchronization Tree Logic (STL), for the specification and proof of programs described in a simple term language obtained from a constant Nil by using a set A of unary operators, a binary operator + and recursion. The elements of A represent names of actions, + represents non-deterministic choice, and Nil is the program preforming no action. The language of formulas of the logic proposed, contains the term language used for the description of programs, i.e., programs are formulas of the logic. This provides a uniform frame to deal with programs and their properties as the verification of anassertion t ⊨ f (t is a program, f is a formula) is reduced to the proof of the validity of the formula t ⊃ f. We propose a s...