diff --git a/src/subsequences.v b/src/subsequences.v index b6861f1..79788fc 100644 --- a/src/subsequences.v +++ b/src/subsequences.v @@ -361,6 +361,36 @@ Qed. + + + + + +Theorem subsequence2_app {X: Type} : + forall l1 s1 l2 s2 : list X, + subsequence2 l1 s1 -> subsequence2 l2 s2 -> subsequence2 (l1++l2) (s1++s2). +Proof. + intros l1 s1 l2 s2. intros H I. + destruct H. destruct I. exists (x++x0). destruct H. destruct H0. + split. rewrite app_length. rewrite app_length. + rewrite H. rewrite H0. reflexivity. + rewrite H1. rewrite H2. + + assert (J: forall (t : list bool) (u : list X) (v: list bool) (w : list X), + length t = length u + -> combine (t++v) (u++w) = (combine t u) ++ (combine v w)). + intros t u v w. generalize u. induction t; intro u0; intro K. + replace u0 with (nil : list X). reflexivity. + destruct u0. reflexivity. apply O_S in K. contradiction K. + destruct u0. symmetry in K. apply O_S in K. contradiction K. + simpl. rewrite IHt. reflexivity. inversion K. reflexivity. + + rewrite J. rewrite filter_app. rewrite map_app. reflexivity. + assumption. +Qed. + + + Example test1: subsequence [1;2;3;4;5] [1;3;5]. Proof. unfold subsequence.