(* The predicates, corresponding to weakest postconditions, necessary for defining safe executions of programs.  *)
Notation alwsafe_sc s p scs := (always_sc s p scs (fun _ _ => True)).
Notation alwsafe s p := (always s p (fun _ _ => True)).

(* Specifications: *)
Lemma alw_imp' A s (p : proc A) scs (P1 P2 : state -> proc A -> Prop) :
(forall s p, s \In coherent -> P1 s p -> P2 s p) ->
always_sc s p scs P1 -> always_sc s p scs P2.
Lemma alw_imp A s (p : proc A) (P1 P2 : state -> proc A -> Prop) :
(forall s p, s \In coherent -> P1 s p -> P2 s p) ->
always s p P1 -> always s p P2.
Lemma alwA A B s (p : proc A) (P : B -> state -> proc A -> Prop) :
alwsafe s p ->
(always s p (fun s' p' => forall x, P x s' p') <->
forall x, always s p (fun s' p' => P x s' p')).