Local Ltac t := solve [right; intros []; intros; breakhyps].Ltac t' i cnti :=
      right; intros [i']; intros [cnti']; intros ?; breakhyps;
      try (assert (i' = i) by congruence; subst i');
      try (assert (cnti' = cnti) by apply proof_irr; subst cnti');
      breakhyps.

Lemma tp_bupd_mono : forall (P Q : jstate (globalenv prog) -> Prop) tp, (forall phi tp' phi', tp_update tp phi tp' phi' -> P tp' -> Q tp') -> tp_bupd P tp -> tp_bupd Q tp.