Local Open Scope logic_base.
Local Open Scope syntax.
Local Open Scope kripke_model.
Section soundness.
Existing Instance unit_kMD.
Context {P: ProgrammingLanguage}
{MD: Model}
{BSS: BigStepSemantics P model}.
Context {L: Language} {minL: MinimunLanguage L} {pL: PropositionalLanguage L} {sL: SeparationLanguage L} {SM: Semantics L MD} {R: Relation model} {po_R: PreOrder Krelation} {kiSM: KripkeIntuitionisticSemantics L MD (tt: @Kmodel MD (unit_kMD _)) SM} {kminSM: KripkeMinimunSemantics L MD (tt: @Kmodel MD (unit_kMD _)) SM} {kpSM: KripkePropositionalSemantics L MD (tt: @Kmodel MD (unit_kMD _)) SM}.

(* Specifications: *)
Lemma hoare_consequence_partial_sound: forall c P1 P2 Q1 Q2,
valid (AllModel _) (P2 --> P1) ->
valid (AllModel _) (Q1 --> Q2) ->
triple_partial_valid P1 c Q1 ->
triple_partial_valid P2 c Q2.
Lemma hoare_consequence_total_sound: forall c P1 P2 Q1 Q2,
valid (AllModel _) (P2 --> P1) ->
valid (AllModel _) (Q1 --> Q2) ->
triple_total_valid P1 c Q1 ->
triple_total_valid P2 c Q2.
Lemma hoare_conjunction_partial_sound: forall c P1 P2 Q1 Q2,
triple_partial_valid P1 c Q1 ->
triple_partial_valid P2 c Q2 ->
triple_partial_valid (P1 && P2) c (Q1 && Q2).
Lemma hoare_conjuntion_total_sound: forall c P1 P2 Q1 Q2,
triple_total_valid P1 c Q1 ->
triple_total_valid P2 c Q2 ->
triple_total_valid (P1 && P2) c (Q1 && Q2).
Lemma hoare_disjunction_parial_sound: forall c P1 P2 Q1 Q2,
triple_partial_valid P1 c Q1 ->
triple_partial_valid P2 c Q2 ->
triple_partial_valid (P1 || P2) c (Q1 || Q2).
Lemma hoare_disjunction_total_sound: forall c P1 P2 Q1 Q2,
triple_total_valid P1 c Q1 ->
triple_total_valid P2 c Q2 ->
triple_total_valid (P1 || P2) c (Q1 || Q2).