aboutsummaryrefslogtreecommitdiffhomepage
path: root/theories/Logic/FunctionalExtensionality.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2014-07-31 16:35:52 -0400
committerGravatar Pierre Boutillier <pierre.boutillier@ens-lyon.org>2014-08-26 17:59:24 +0200
commit99861d4ba6cd07025bd2117c0539ffc113833b67 (patch)
tree21e09513b39095d59504415edec4d88ff9d71557 /theories/Logic/FunctionalExtensionality.v
parent154f6b0043ce525c448d894fc35ff0255d99aec2 (diff)
Prove forall extensionality
Diffstat (limited to 'theories/Logic/FunctionalExtensionality.v')
-rw-r--r--theories/Logic/FunctionalExtensionality.v24
1 files changed, 23 insertions, 1 deletions
diff --git a/theories/Logic/FunctionalExtensionality.v b/theories/Logic/FunctionalExtensionality.v
index a5894fc1e..14d38c7fb 100644
--- a/theories/Logic/FunctionalExtensionality.v
+++ b/theories/Logic/FunctionalExtensionality.v
@@ -37,13 +37,35 @@ Proof.
intros ; eauto using @functional_extensionality_dep.
Qed.
+(** Extensionality of [forall]s follows from functional extensionality. *)
+Lemma forall_extensionality {A} {B C : A -> Type} (H : forall x : A, B x = C x)
+: (forall x, B x) = (forall x, C x).
+Proof.
+ apply functional_extensionality in H. destruct H. reflexivity.
+Defined.
+
+Lemma forall_extensionalityP {A} {B C : A -> Prop} (H : forall x : A, B x = C x)
+: (forall x, B x) = (forall x, C x).
+Proof.
+ apply functional_extensionality in H. destruct H. reflexivity.
+Defined.
+
+Lemma forall_extensionalityS {A} {B C : A -> Set} (H : forall x : A, B x = C x)
+: (forall x, B x) = (forall x, C x).
+Proof.
+ apply functional_extensionality in H. destruct H. reflexivity.
+Defined.
+
(** Apply [functional_extensionality], introducing variable x. *)
Tactic Notation "extensionality" ident(x) :=
match goal with
[ |- ?X = ?Y ] =>
(apply (@functional_extensionality _ _ X Y) ||
- apply (@functional_extensionality_dep _ _ X Y)) ; intro x
+ apply (@functional_extensionality_dep _ _ X Y) ||
+ apply forall_extensionalityP ||
+ apply forall_extensionalityS ||
+ apply forall_extensionality) ; intro x
end.
(** Eta expansion follows from extensionality. *)