aboutsummaryrefslogtreecommitdiff
path: root/src/Util/Tuple.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2016-11-06 16:33:16 -0500
committerGravatar Jason Gross <jgross@mit.edu>2016-11-06 16:33:16 -0500
commit58f22878e0c1f455c3cfd419ef3251cc31785c6e (patch)
tree2a074ec108008930e3526f3d2dcc0afa1ffa5529 /src/Util/Tuple.v
parent54bb7895d16c719400c7730a3049f2295aec9d91 (diff)
Add Tuple lift push
Diffstat (limited to 'src/Util/Tuple.v')
-rw-r--r--src/Util/Tuple.v8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/Util/Tuple.v b/src/Util/Tuple.v
index 3dfa2c13e..7af4dfe96 100644
--- a/src/Util/Tuple.v
+++ b/src/Util/Tuple.v
@@ -183,6 +183,14 @@ Definition lift_option {n A} (xs : tuple (option A) n) : option (tuple A n)
Definition push_option {n A} (xs : option (tuple A n)) : tuple (option A) n
:= push_monad option option_bind (@Some) xs.
+Lemma lift_push_option {n A} (xs : option (tuple A (S n))) : lift_option (push_option xs) = xs.
+Proof.
+ simpl in *.
+ induction n; [ reflexivity | ].
+ simpl in *; rewrite IHn; clear IHn.
+ destruct xs as [ [? ?] | ]; reflexivity.
+Qed.
+
Fixpoint fieldwise' {A B} (n:nat) (R:A->B->Prop) (a:tuple' A n) (b:tuple' B n) {struct n} : Prop.
destruct n; simpl @tuple' in *.
{ exact (R a b). }