Module EqdepTh := EqdepTheory EqdepElim.
Export EqdepTh.
(* Generalize the extensionality tactic from the Coq library. *)
Tactic Notation "extensionality" :=
let x := fresh "x" in extensionality x.
Tactic Notation "extensionality" ident(x0) ident(x1) :=
extensionality x0; extensionality x1.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) :=
extensionality x0; extensionality x1; extensionality x2.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3)
ident(x4) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3;
extensionality x4.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3)
ident(x4) ident(x5) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3;
extensionality x4; extensionality x5.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3)
ident(x4) ident(x5) ident(x6) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3;
extensionality x4; extensionality x5; extensionality x6.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3)
ident(x4) ident(x5) ident(x6) ident(x7) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3;
extensionality x4; extensionality x5; extensionality x6; extensionality x7.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3)
ident(x4) ident(x5) ident(x6) ident(x7) ident(x8) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3;
extensionality x4; extensionality x5; extensionality x6; extensionality x7;
extensionality x8.
Tactic Notation "extensionality" ident(x0) ident(x1) ident(x2) ident(x3)
ident(x4) ident(x5) ident(x6) ident(x7) ident(x8) ident(x9) :=
extensionality x0; extensionality x1; extensionality x2; extensionality x3;
extensionality x4; extensionality x5; extensionality x6; extensionality x7;
extensionality x8; extensionality x9.

Lemma forall_ext: forall (A: Type) (F: A -> Prop) G, (forall x:A, F x = G x) -> (forall x, F x) = (forall x, G x).