(******************************************************************************)
(* Summary of the tactics exported by this file:                              *)
(*                                                                            *)
(* begin defer [assuming a b...] [in g]                                       *)
(* defer [in g]                                                               *)
(* defer [H] : E [in g]                                                       *)
(* end defer                                                                  *)
(*                                                                            *)
(* deferred [in g]                                                            *)
(* deferred [H] : E [in g]                                                    *)
(*                                                                            *)
(* deferred exploit tac [in g]                                                *)
(******************************************************************************)
(* The comments below describe the various tricks used for implementing the library. For a higher-level description of what it does, and how to use it, one should rather refer to the manual in `manual/manual.pdf`, and the `examples/` directory. For a reference of the tactics, see `TacticsReference.md`. *)
(* We define a couple "marker" definitions. These are equivalent to the identity, but are useful to mark subterms to be used with tactics or notation. *)
Module Marker.
(* This marker is used in combination with a notation (see the end of the file), in order to hide the exact expression of a subgoal, and to indicate that faced with this subgoal, the user always has to call the [end defer] tactic. *)
Definition end_defer (P : Type) := P.
(* This marker is used to keep track of "group" assumptions in the context (introduced by [begin procrastination]). This is useful so that tactics can omit specifying a group: in that case, the first group of the context is used. *)
Definition group (P : Prop) := P.

Lemma group_fold : forall (P: Prop), P -> group P.
Goal True.