Definition make_predecessors : PTree.t (list positive) :=
PTree.fold (fun pred pc instr => add_successors pred pc (successors instr))
code (PTree.empty (list positive)).

(* Specifications: *)
Lemma make_predecessors_correct_1:
forall n instr s,
code!n = Some instr -> In s (successors instr) ->
In n make_predecessors!!!s.
Lemma make_predecessors_correct_2:
forall n instr s,
code!n = Some instr -> In s (successors instr) ->
exists l, make_predecessors!s = Some l /\ In n l.
Lemma reachable_predecessors:
forall p q,
reachable code successors p q ->
reachable make_predecessors (fun l => l) q p.