aboutsummaryrefslogtreecommitdiff
path: root/src/Util
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2018-10-09 20:33:29 -0400
committerGravatar Jason Gross <jgross@mit.edu>2018-10-09 20:33:29 -0400
commit88548627b9776f0f05754ef35ca54199af567e30 (patch)
tree74ee120134ef518a14a06d6cb13c66e1e6e14712 /src/Util
parent2f836e6ca8e0f431f38d6342e10d979594de7e3e (diff)
Add map_update_nth_ext
Diffstat (limited to 'src/Util')
-rw-r--r--src/Util/ListUtil.v10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Util/ListUtil.v b/src/Util/ListUtil.v
index 8211d1ab7..1713d22ab 100644
--- a/src/Util/ListUtil.v
+++ b/src/Util/ListUtil.v
@@ -2165,3 +2165,13 @@ Qed.
Lemma concat_fold_right_app A ls
: @List.concat A ls = List.fold_right (@List.app A) nil ls.
Proof. induction ls; cbn; eauto. Qed.
+
+Lemma map_update_nth_ext {A B n} f1 f2 f3 ls1 ls2
+ : map f3 ls1 = ls2
+ -> (forall x, List.In x ls1 -> f3 (f2 x) = f1 (f3 x))
+ -> map f3 (@update_nth A n f2 ls1) = @update_nth B n f1 ls2.
+Proof.
+ revert ls1 ls2; induction n as [|n IHn], ls1 as [|x1 xs1], ls2 as [|x2 xs2]; cbn; intros H0 H1; try discriminate; try reflexivity.
+ all: inversion H0; clear H0; subst.
+ all: f_equal; eauto using or_introl.
+Qed.