Definition Pred := E.Env -> Prop.
Definition wlp: ImpProg -> Pred -> Pred
:= fun prog post e => (forall e', (exec e prog e') -> (post e')).
Definition wp: ImpProg -> Pred -> Pred
:= fun prog post e => exists e', (exec e prog e') /\ (post e').
Notation "p |= q" := (forall e, (p e) -> (q e)) (at level 80, no associativity).
Notation "p {= post =}" := (wlp p post) (at level 70).
Notation "p [= post =]" := (wp p post) (at level 70).
End HLD.
Export HLD.
Module PHL<: HoareProofSystem := PartialHoareLogic(HLD).
Module THL<: HoareProofSystem := TotalHoareLogic(HLD).

(* Specifications: *)
Lemma wp_entails_wlp: forall prog post, prog [= post =] |= prog {= post =}.
End HoareLogic.