Section total_soundness.
Existing Instance unit_kMD.
Context {P: ProgrammingLanguage}
{iP: ImperativeProgrammingLanguage P}
{MD: Model}
{R: Relation model}
{po_R: PreOrder Krelation}
{BSS: BigStepSemantics P model}
{iBSS: ImpBigStepSemantics P model BSS}.
Context {L: Language}
{minL: MinimumLanguage L}
{pL: PropositionalLanguage L}
{sepconL: SepconLanguage L}
{wandL: WandLanguage L}
{SM: Semantics L MD}
{kiSM: KripkeIntuitionisticSemantics L MD tt SM}
{kminSM: KripkeMinimumSemantics L MD tt SM}
{kpSM: KripkePropositionalSemantics L MD tt SM}.

Lemma hoare_if_total_sound: forall b c1 c2 B P1 P2,
(forall s, s |= B <-> eval_bool s b) ->
triple_total_valid (P1 && B) c1 P2 ->
triple_total_valid (P1 && ~~ B) c2 P2 ->
triple_total_valid P1 (Sifthenelse b c1 c2) P2.