Update
This commit is contained in:
parent
9aa2a2c6cd
commit
f73fe61b34
@ -425,6 +425,15 @@ Proof.
|
|||||||
rewrite rev_involutive. reflexivity.
|
rewrite rev_involutive. reflexivity.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
|
Lemma tm_step_even_step : forall (n : nat),
|
||||||
|
rev (tm_step (Nat.double n)) = tm_step (Nat.double n).
|
||||||
|
Proof.
|
||||||
|
intro n. induction n.
|
||||||
|
- reflexivity.
|
||||||
|
- rewrite Nat.double_S. rewrite <- tm_step_lemma. rewrite <- tm_step_lemma.
|
||||||
|
rewrite tm_morphism_twice_rev. rewrite IHn. reflexivity.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Theorem tm_step_double_index : forall (n k : nat),
|
Theorem tm_step_double_index : forall (n k : nat),
|
||||||
nth_error (tm_step n) k = nth_error (tm_step (S n)) (2*k).
|
nth_error (tm_step n) k = nth_error (tm_step (S n)) (2*k).
|
||||||
Proof.
|
Proof.
|
||||||
|
@ -1624,3 +1624,77 @@ Proof.
|
|||||||
simpl. rewrite Nat.add_0_r. reflexivity.
|
simpl. rewrite Nat.add_0_r. reflexivity.
|
||||||
left. assumption.
|
left. assumption.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
|
Theorem tm_step_square_prefix_not_nil :
|
||||||
|
forall (n : nat) (hd a tl : list bool),
|
||||||
|
tm_step n = hd ++ a ++ a ++ tl -> 0 < length a -> hd <> nil.
|
||||||
|
Proof.
|
||||||
|
intros n hd a tl. intros H I.
|
||||||
|
|
||||||
|
assert (W: {hd=nil} + {~ hd=nil}). apply list_eq_dec. apply bool_dec.
|
||||||
|
destruct W. rewrite e in H. rewrite app_nil_l in H.
|
||||||
|
generalize dependent a.
|
||||||
|
generalize dependent tl.
|
||||||
|
induction n.
|
||||||
|
- intros tl a. intros H I.
|
||||||
|
destruct a. inversion I. inversion H.
|
||||||
|
assert (length (nil : list bool) = length (nil : list bool)).
|
||||||
|
reflexivity. rewrite H2 in H0 at 2. rewrite app_length in H0.
|
||||||
|
rewrite Nat.add_comm in H0. inversion H0.
|
||||||
|
- intros tl a. intros H I.
|
||||||
|
assert (hd <> nil
|
||||||
|
\/ exists a' tl', tm_step (pred (S n)) = a' ++ a' ++ tl' /\ 0 < length a').
|
||||||
|
generalize I. generalize H. replace (a++a++tl) with (hd ++ a ++ a ++ tl).
|
||||||
|
apply tm_step_square_prefix_not_nil0. rewrite e. reflexivity.
|
||||||
|
destruct H0. assumption. destruct H0. destruct H0.
|
||||||
|
rewrite <- pred_Sn in H0.
|
||||||
|
destruct H0.
|
||||||
|
generalize H1. generalize H0. apply IHn.
|
||||||
|
- assumption.
|
||||||
|
Qed.
|
||||||
|
|
||||||
|
Theorem tm_step_square_tail_not_nil :
|
||||||
|
forall (n : nat) (hd a tl : list bool),
|
||||||
|
tm_step n = hd ++ a ++ a ++ tl -> 0 < length a -> tl <> nil.
|
||||||
|
Proof.
|
||||||
|
intros n hd a tl. intros H I.
|
||||||
|
assert (W: {tl=nil} + {~ tl=nil}). apply list_eq_dec. apply bool_dec.
|
||||||
|
destruct W. rewrite e in H. rewrite app_nil_r in H.
|
||||||
|
|
||||||
|
assert (X: n = 2 * Nat.div2 n + Nat.b2n (Nat.odd n)). apply Nat.div2_odd.
|
||||||
|
rewrite <- Nat.double_twice in X.
|
||||||
|
|
||||||
|
assert (Y: rev (hd ++ a ++ a) = rev (hd ++ a ++ a)). reflexivity.
|
||||||
|
rewrite <- H in Y at 1.
|
||||||
|
rewrite rev_app_distr in Y. rewrite rev_app_distr in Y.
|
||||||
|
rewrite <- app_assoc in Y. rewrite X in Y.
|
||||||
|
|
||||||
|
assert (Z : { odd n = true } + {~ odd n = true}). apply bool_dec.
|
||||||
|
destruct Z. rewrite e0 in Y. rewrite Nat.add_1_r in Y.
|
||||||
|
rewrite tm_step_odd_step in Y.
|
||||||
|
|
||||||
|
assert (map negb (rev a ++ rev a ++ rev hd)
|
||||||
|
= map negb (rev a ++ rev a ++ rev hd)). reflexivity.
|
||||||
|
rewrite <- Y in H0 at 1.
|
||||||
|
|
||||||
|
assert (forall l, map negb (map negb l) = l).
|
||||||
|
intro l. induction l. reflexivity. simpl. rewrite negb_involutive.
|
||||||
|
rewrite IHl. reflexivity. rewrite H1 in H0.
|
||||||
|
|
||||||
|
rewrite map_app in H0. rewrite map_app in H0.
|
||||||
|
rewrite <- app_nil_l in H0.
|
||||||
|
assert ((nil : list bool) <> nil).
|
||||||
|
assert (0 < length (map negb (rev a))). rewrite map_length.
|
||||||
|
rewrite rev_length. assumption. generalize H2. generalize H0.
|
||||||
|
apply tm_step_square_prefix_not_nil. contradiction H2.
|
||||||
|
reflexivity.
|
||||||
|
|
||||||
|
apply not_true_is_false in n0. rewrite n0 in Y.
|
||||||
|
rewrite Nat.add_0_r in Y. rewrite tm_step_even_step in Y.
|
||||||
|
rewrite <- app_nil_l in Y.
|
||||||
|
assert ((nil : list bool) <> nil).
|
||||||
|
assert (0 < length (rev a)). rewrite rev_length. assumption.
|
||||||
|
generalize H0. generalize Y.
|
||||||
|
apply tm_step_square_prefix_not_nil. contradiction H0.
|
||||||
|
reflexivity. assumption.
|
||||||
|
Qed.
|
||||||
|
Loading…
Reference in New Issue
Block a user