From mathcomp.ssreflect
From mathcomp
From fcsl
From DiSeL
From DiSeL
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
(* 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
}.
Section Programs.
Variable this : nid.
Variable W : world.
Variable A : Type.
Notation coherent := (Coh W).
Arguments Prog [W A].
Arguments Prog [W A this].
Coercion set_of : prog >-> Funclass.
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.