aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Herbelin2019-09-05 08:47:12 +0200
committerHugo Herbelin2019-09-05 08:47:12 +0200
commit110e87a2bee21c112f7fc4291e5a7b7e5180217b (patch)
treeec42c401b0d787cc0b21e882a203b2c12a5f6c08
parent0f5f1b22db69fcb179dbcd656a7cb0e62b24dd6e (diff)
parent4297c81eaa43ae43bc4fc31ca19c695539b26b42 (diff)
Merge PR #10731: Ocfnash/stdlib additions
Ack-by: Zimmi48 Reviewed-by: herbelin
-rw-r--r--doc/changelog/10-standard-library/10651-new-lemmas-for-lists.rst8
-rw-r--r--theories/Lists/List.v24
2 files changed, 27 insertions, 5 deletions
diff --git a/doc/changelog/10-standard-library/10651-new-lemmas-for-lists.rst b/doc/changelog/10-standard-library/10651-new-lemmas-for-lists.rst
index f68b2aaaa2..864c4e6a7e 100644
--- a/doc/changelog/10-standard-library/10651-new-lemmas-for-lists.rst
+++ b/doc/changelog/10-standard-library/10651-new-lemmas-for-lists.rst
@@ -1,4 +1,6 @@
-- New lemmas on :g:`combine`, :g:`filter`, and :g:`nodup` functions on lists. The lemma
- :g:`filter_app` was moved to the :g:`List` module.
+- New lemmas on :g:`combine`, :g:`filter`, :g:`nodup`, :g:`nth`, and
+ :g:`nth_error` functions on lists. The lemma :g:`filter_app` was moved to the
+ :g:`List` module.
- See `#10651 <https://github.com/coq/coq/pull/10651>`_, by Oliver Nash.
+ See `#10651 <https://github.com/coq/coq/pull/10651>`_, and
+ `#10731 <https://github.com/coq/coq/pull/10731>`_, by Oliver Nash.
diff --git a/theories/Lists/List.v b/theories/Lists/List.v
index f45317ba50..38723e291f 100644
--- a/theories/Lists/List.v
+++ b/theories/Lists/List.v
@@ -536,6 +536,26 @@ Section Elts.
simpl in *. apply IHn. auto with arith.
Qed.
+ (** Results directly relating [nth] and [nth_error] *)
+
+ Lemma nth_error_nth : forall (l : list A) (n : nat) (x d : A),
+ nth_error l n = Some x -> nth n l d = x.
+ Proof.
+ intros l n x d H.
+ apply nth_error_split in H. destruct H as [l1 [l2 [H H']]].
+ subst. rewrite app_nth2; [|auto].
+ rewrite Nat.sub_diag. reflexivity.
+ Qed.
+
+ Lemma nth_error_nth' : forall (l : list A) (n : nat) (d : A),
+ n < length l -> nth_error l n = Some (nth n l d).
+ Proof.
+ intros l n d H.
+ apply nth_split with (d:=d) in H. destruct H as [l1 [l2 [H H']]].
+ subst. rewrite H. rewrite nth_error_app2; [|auto].
+ rewrite app_nth2; [| auto]. repeat (rewrite Nat.sub_diag). reflexivity.
+ Qed.
+
(*****************)
(** ** Remove *)
(*****************)
@@ -1234,11 +1254,11 @@ End Fold_Right_Recursor.
destruct (f x); simpl; now rewrite IH.
Qed.
- Lemma concat_filter_map : forall (l : list (list A)) (f : A -> bool),
+ Lemma concat_filter_map : forall (l : list (list A)),
concat (map filter l) = filter (concat l).
Proof.
induction l as [| v l IHl]; [auto|].
- simpl. rewrite (IHl f). rewrite filter_app. reflexivity.
+ simpl. rewrite IHl. rewrite filter_app. reflexivity.
Qed.
(** [find] *)