Ltac bool_eq_refl_case :=
match goal with
| [ |- true = true ] => reflexivity
| [ |- proj_sumbool _ = true ] => apply proj_sumbool_is_true
| [ |- _ && _ = true ] => apply andb_true_iff; split; bool_eq_refl_case
| _ => auto
end.
Ltac bool_eq_refl :=
let H := fresh "Hrec" in let x := fresh "x" in
fix H 1; intros x; destruct x; simpl; bool_eq_refl_case.

(* Specifications: *)
Lemma false_not_true:
forall (P: Prop), false = true -> P.
Lemma proj_sumbool_true:
forall (A: Type) (x y: A) (a: {x=y} + {x<>y}),
proj_sumbool a = true -> x = y.