This commit is contained in:
Thomas Baruchel 2023-11-23 16:27:04 +01:00
parent 58a834c275
commit 2315f2321e

View File

@ -712,6 +712,16 @@ Proof.
Qed.
Theorem subsequence_single {X: Type} :
forall (u: list X) a, In a u -> subsequence u [a].
Proof.
intro u. induction u; intro x; intro H. apply in_nil in H. contradiction.
destruct H. rewrite H. exists nil. exists [u]. split. reflexivity.
simpl. rewrite app_nil_r. reflexivity. apply subsequence_cons_l.
apply IHu. assumption.
Qed.
Theorem subsequence_filter_2 {X: Type} :
forall (u v: list X) f,
subsequence u v -> subsequence (filter f u) (filter f v).
@ -731,22 +741,21 @@ Proof.
assert (f a = true \/ f a = false).
destruct (f a); [ left | right ]; reflexivity. destruct H0.
simpl. rewrite H0.
replace (a::v) with ([a] ++ v) in H. apply subsequence_split in H.
replace (a::v) with ([a] ++ v) in H. apply subsequence_split_2 in H.
destruct H. destruct H. destruct H. destruct H1.
destruct H. destruct H. destruct x0. destruct H.
apply PeanoNat.Nat.neq_succ_0 in H. contradiction.
destruct H. simpl in H0. rewrite H0.
simpl. destruct (f a).
apply subsequence_cons_r.
assert (subsequence ((filter f x) ++ (filter f x0))
((filter f [a]) ++ (filter f v))).
apply subsequence_app. simpl. rewrite H0.
apply subsequence_incl in H1. apply incl_cons_inv in H1.
destruct H1.
assert (In a (filter f x)). apply filter_In. split; assumption.
apply subsequence_single. assumption. apply IHv. assumption.
rewrite <- filter_app in H3. rewrite <- H in H3. simpl in H3.
rewrite H0 in H3. assumption. reflexivity.
simpl. rewrite H0. apply IHv. apply subsequence_cons_r in H.
assumption.
Qed.