Goal True.
begin defer assuming a b c.
assert (a <= b + 1). defer.
assert (b = c + 2). defer.
exact I.
(* [end defer] gives back the subgoals that have been deferred. *)
end defer.
exists 0, 2, 0. omega.
Qed.
Goal True.
begin defer.
assert (H1: 1 + 1 = 2) by defer.
assert (H2: 1 + 2 = 3) by defer.
(* [defer H: foo in g] is a shorthand for [assert (H: foo) by (defer in g)] *)
defer H3: (1 + 3 = 4).
tauto.
end defer.
repeat split; reflexivity.
Qed.
Goal True.
(* It's also possible to explicitly name and refer to the "procrastination group". *)
begin defer assuming a b c in g.
(* [defer] chooses by default the last group of the context. *)
assert (a = b) by defer.
assert (b = c) by (defer in g).
exact I.
end defer.
exists 0, 0, 0. omega.
Qed.

Lemma dup : forall P, P -> P -> P. auto. Qed.