aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jade Philipoom <jadep@google.com>2018-03-07 12:04:48 +0100
committerGravatar jadephilipoom <jade.philipoom@gmail.com>2018-04-03 09:00:55 -0400
commite36523f6d8a34ae8b09aeb77a2533eeb15585443 (patch)
tree7a265497f3d8ce6396cd03c2272a350a06f1085e /src
parent502825d2ca27215ae92569df02f82a60c30d9769 (diff)
move some lemmas/hints to ListUtil
Diffstat (limited to 'src')
-rw-r--r--src/Experiments/SimplyTypedArithmetic.v13
-rw-r--r--src/Util/ListUtil.v15
2 files changed, 15 insertions, 13 deletions
diff --git a/src/Experiments/SimplyTypedArithmetic.v b/src/Experiments/SimplyTypedArithmetic.v
index c872360ba..b0855969a 100644
--- a/src/Experiments/SimplyTypedArithmetic.v
+++ b/src/Experiments/SimplyTypedArithmetic.v
@@ -962,14 +962,6 @@ Module Rows.
Hint Rewrite Positional.eval_nil Positional.eval0 @Positional.eval_snoc
Columns.eval_nil Columns.eval_snoc using (auto; solve [distr_length]) : push_eval.
- (* TODO: move to ListUtil *)
- Lemma sum_app x y : sum (x ++ y) = sum x + sum y.
- Proof. induction x; rewrite ?app_nil_l, <-?app_comm_cons, ?sum_nil, ?sum_cons; omega. Qed.
- (* TODO: move to listUtil or wherever push_map is defined *)
- Hint Rewrite @map_app : push_map.
- Hint Rewrite sum_nil sum_cons sum_app : push_sum.
- Hint Rewrite @combine_nil_r @combine_cons : push_combine.
-
Hint Resolve in_eq in_cons.
Definition eval n (inp : rows) :=
@@ -1093,11 +1085,6 @@ Module Rows.
Proof. apply eval_from_columns'_with_length. Qed.
Hint Rewrite eval_from_columns' using (auto; solve [distr_length]) : push_eval.
- (* TODO: move to ListUtil *)
- Lemma length_tl {A} ls : length (@tl A ls) = (length ls - 1)%nat.
- Proof. destruct ls; cbn [tl length]; lia. Qed.
- Hint Rewrite @length_tl : distr_length.
-
Lemma max_column_size_extract_row inp :
max_column_size (fst (extract_row inp)) = (max_column_size inp - 1)%nat.
Proof.
diff --git a/src/Util/ListUtil.v b/src/Util/ListUtil.v
index 68cc6a41f..081ef54b5 100644
--- a/src/Util/ListUtil.v
+++ b/src/Util/ListUtil.v
@@ -30,6 +30,7 @@ Create HintDb simpl_skipn discriminated.
Create HintDb simpl_fold_right discriminated.
Create HintDb simpl_sum_firstn discriminated.
Create HintDb push_map discriminated.
+Create HintDb push_combine discriminated.
Create HintDb push_flat_map discriminated.
Create HintDb push_fold_right discriminated.
Create HintDb push_partition discriminated.
@@ -41,6 +42,7 @@ Create HintDb pull_firstn discriminated.
Create HintDb push_firstn discriminated.
Create HintDb pull_skipn discriminated.
Create HintDb push_skipn discriminated.
+Create HintDb push_sum discriminated.
Create HintDb pull_update_nth discriminated.
Create HintDb push_update_nth discriminated.
Create HintDb znonzero discriminated.
@@ -94,6 +96,7 @@ Module Export List.
Proof. induction n; simpl List.repeat; simpl map; congruence. Qed.
End Map.
Hint Rewrite @map_cons @map_nil @map_repeat : push_map.
+ Hint Rewrite @map_app : push_map.
Section FlatMap.
Lemma flat_map_nil {A B} (f:A->list B) : List.flat_map f (@nil A) = nil.
@@ -923,6 +926,10 @@ Proof.
induction xs; boring; discriminate.
Qed.
+Lemma length_tl {A} ls : length (@tl A ls) = (length ls - 1)%nat.
+Proof. destruct ls; cbn [tl length]; omega. Qed.
+Hint Rewrite @length_tl : distr_length.
+
Lemma length_snoc : forall {T} xs (x:T),
length xs = pred (length (xs++x::nil)).
Proof.
@@ -932,6 +939,7 @@ Qed.
Lemma combine_cons : forall {A B} a b (xs:list A) (ys:list B),
combine (a :: xs) (b :: ys) = (a,b) :: combine xs ys.
Proof. reflexivity. Qed.
+Hint Rewrite @combine_cons : push_combine.
Lemma firstn_combine : forall {A B} n (xs:list A) (ys:list B),
firstn n (combine xs ys) = combine (firstn n xs) (firstn n ys).
@@ -947,6 +955,7 @@ Lemma combine_nil_r : forall {A B} (xs:list A),
Proof.
induction xs; boring.
Qed.
+Hint Rewrite @combine_nil_r : push_combine.
Lemma skipn_combine : forall {A B} n (xs:list A) (ys:list B),
skipn n (combine xs ys) = combine (skipn n xs) (skipn n ys).
@@ -1458,9 +1467,15 @@ Hint Rewrite @sum_firstn_app_sum : simpl_sum_firstn.
Lemma sum_cons xs x : sum (x :: xs) = (x + sum xs)%Z.
Proof. reflexivity. Qed.
+Hint Rewrite sum_cons : push_sum.
Lemma sum_nil : sum nil = 0%Z.
Proof. reflexivity. Qed.
+Hint Rewrite sum_nil : push_sum.
+
+Lemma sum_app x y : sum (x ++ y) = (sum x + sum y)%Z.
+Proof. induction x; rewrite ?app_nil_l, <-?app_comm_cons; autorewrite with push_sum; omega. Qed.
+Hint Rewrite sum_app : push_sum.
Lemma nth_error_skipn : forall {A} n (l : list A) m,
nth_error (skipn n l) m = nth_error l (n + m).