Notation prog A := (@prog W A this).(* Program is a set of processes *)
Structure prog (W : world) A (this : nid) :=
  Prog {
      set_of : proc this W A -> Prop; 
      (* Unifinshed is a bottom element that should be present *)
      _ : set_of Unfinished
  }.(* Program is a set of processes *)
Structure prog (W : world) A (this : nid) :=
  Prog {
      set_of : proc this W A -> Prop; 
      (* Unifinshed is a bottom element that should be present *)
      _ : set_of Unfinished
  }.Notation coherent := (Coh W).Canonical prog_PredType W A := mkPredType (fun p => @set_of W A this p).

Lemma progE (T1 T2 : prog W A this) : T1 = T2 <-> set_of T1 = set_of T2.