Context {P: ProgrammingLanguage}
{Res: Resource}
{CPP: ConcurrentProgrammingLanguage_Sparallel P}
{CPR: ConcurrentProgrammingLanguage_Sresource P Res}
{MD: Model} {TLBSS: ThreadLocalBigStepSemantics P model (list (resource * (model -> Prop)))} {J: Join model} {R: Relation model} {po_R: PreOrder Krelation} {R_BSS: Resource_BigStepSemantics P model TLBSS}.
Context {L: Language} {minL: MinimunLanguage L} {pL: PropositionalLanguage L} {SL: SeparationLanguage L} {SM: Semantics L MD} {kiSM: KripkeIntuitionisticSemantics L MD (tt: @Kmodel MD (unit_kMD _)) SM} {fsSM: FlatSemantics.SeparatingSemantics L MD (tt: @Kmodel MD (unit_kMD _)) SM}.

(* Specifications: *)
Lemma hoare_resource_partial_sound: forall
(r: resource)
(I: expr)
(Inv Inv': list (resource * (model -> Prop)))
c P Q,
guarded_triple_partial_valid Inv (I * P) c (I * Q) ->
Inv_cons r (fun s: model => s |= I) Inv Inv' ->
sem_precise I ->
guarded_triple_partial_valid Inv' P (Sresource r c) Q.
Lemma hoare_parallel_partial_sound: forall
(Inv: list (resource * (model -> Prop)))
c1 c2 P1 P2 Q1 Q2,
guarded_triple_partial_valid Inv P1 c1 Q1 ->
guarded_triple_partial_valid Inv P2 c2 Q2 ->
guarded_triple_partial_valid Inv (P1 * P2) (Sparallel c1 c2) (Q1 * Q2).