Ltac bool :=
repeat match goal with
| [ H : ?P && ?Q = true |- _ ] =>
  apply andb_true_iff in H; destruct H
| |- ?P && ?Q = true =>
  apply <- andb_true_iff; split
end.Ltac define t x H :=
set (x := t) in *; assert (H : t = x) by reflexivity; clearbody x.

(* Specifications: *)
Lemma Decidable_sound : forall P (H : Decidable P), decide P = true -> P.
Lemma Decidable_complete : forall P (H : Decidable P), P -> decide P = true.
Lemma Decidable_sound_alt : forall P (H : Decidable P), ~ P -> decide P = false.
Lemma Decidable_complete_alt : forall P (H : Decidable P), decide P = false -> ~ P.