Proof using.
intros a b c H H0.
apply plus_minus.
rewrite (fun x y => plus_comm (x - y)).
rewrite plus_assoc.
rewrite <- le_plus_minus; auto.
rewrite <- le_plus_minus; auto.
Qed.
End Minus.
Hint Resolve le_minus: arith.
(* Equality test on boolean *)
Section EqBool.
Definition eq_bool_dec : forall a b : bool, {a = b} + {a <> b}.
intros a b; case a; case b; simpl in |- *; auto.
right; red in |- *; intros; discriminate.
Defined.
End EqBool.
(*A function to compare naturals *)
Section LeBool.
Fixpoint le_bool (a b : nat) {struct b} : bool :=
match a, b with
| O, _ => true
| S a1, S b1 => le_bool a1 b1
| _, _ => false
end.

(* Specifications: *)
Theorem le_bool_correct1 : forall a b : nat, a <= b -> le_bool a b = true.
Proof using.