Update
This commit is contained in:
parent
af637eaae3
commit
766adbcdd4
102
thue-morse.v
102
thue-morse.v
@ -682,6 +682,8 @@ A010060 Thue-Morse sequence: let A_k denote the first 2^k terms; then A_0 = 0 a
|
|||||||
|
|
||||||
Require Import Coq.Lists.List.
|
Require Import Coq.Lists.List.
|
||||||
Require Import Nat.
|
Require Import Nat.
|
||||||
|
Require Import Bool.
|
||||||
|
|
||||||
Import ListNotations.
|
Import ListNotations.
|
||||||
|
|
||||||
Fixpoint tm_morphism (l:list bool) : list bool :=
|
Fixpoint tm_morphism (l:list bool) : list bool :=
|
||||||
@ -713,7 +715,7 @@ Proof.
|
|||||||
induction l.
|
induction l.
|
||||||
- reflexivity.
|
- reflexivity.
|
||||||
- simpl. rewrite IHl. replace (negb (negb a)) with (a).
|
- simpl. rewrite IHl. replace (negb (negb a)) with (a).
|
||||||
reflexivity. rewrite Bool.negb_involutive. reflexivity.
|
reflexivity. rewrite negb_involutive. reflexivity.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
Lemma tm_morphism_concat : forall (l1 l2 : list bool),
|
Lemma tm_morphism_concat : forall (l1 l2 : list bool),
|
||||||
@ -734,7 +736,7 @@ Proof.
|
|||||||
rewrite IHl. rewrite tm_morphism_concat.
|
rewrite IHl. rewrite tm_morphism_concat.
|
||||||
rewrite <- app_assoc.
|
rewrite <- app_assoc.
|
||||||
replace (map negb [a]) with ([negb a]). simpl.
|
replace (map negb [a]) with ([negb a]). simpl.
|
||||||
rewrite Bool.negb_involutive. reflexivity.
|
rewrite negb_involutive. reflexivity.
|
||||||
reflexivity.
|
reflexivity.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
@ -804,7 +806,7 @@ Proof.
|
|||||||
rewrite IHn. simpl tm_morphism. simpl tl.
|
rewrite IHn. simpl tm_morphism. simpl tl.
|
||||||
rewrite PeanoNat.Nat.even_succ.
|
rewrite PeanoNat.Nat.even_succ.
|
||||||
rewrite PeanoNat.Nat.odd_succ.
|
rewrite PeanoNat.Nat.odd_succ.
|
||||||
rewrite Bool.negb_involutive.
|
rewrite negb_involutive.
|
||||||
reflexivity. reflexivity.
|
reflexivity. reflexivity.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
@ -827,3 +829,97 @@ Proof.
|
|||||||
reflexivity.
|
reflexivity.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Require Import BinPosDef.
|
||||||
|
|
||||||
|
(* utiliser Pos.pred à partir de 2 *)
|
||||||
|
(* donc théorème sur S (S n) *)
|
||||||
|
Compute let b := Pos.of_nat 6 in Pos.lxor b (Pos.pred b).
|
||||||
|
Compute let b := Pos.of_nat 3 in Pos.pred b.
|
||||||
|
Compute let b := Pos.of_nat 7 in
|
||||||
|
Pos.size_nat (
|
||||||
|
match Pos.lxor b (Pos.pred b) with
|
||||||
|
| N0 => BinNums.xH (* arbitrary, never used *)
|
||||||
|
| Npos(p) => p
|
||||||
|
end).
|
||||||
|
|
||||||
|
Compute tm_step 4.
|
||||||
|
(*
|
||||||
|
= [false; true; true; false; true; false; false; true; true; false;
|
||||||
|
false; true; false; true; true; false]
|
||||||
|
*)
|
||||||
|
|
||||||
|
(* on suppose que len est la longueur de la liste qui précède b0 et b1 *)
|
||||||
|
Compute let mylen := 5 in
|
||||||
|
let ind_b1 := Pos.of_nat (S mylen) in (* index of b1 *)
|
||||||
|
let ind_b0 := Pos.pred ind_b1 in (* index of b0 *)
|
||||||
|
even (Pos.size_nat (
|
||||||
|
match Pos.lxor ind_b0 ind_b1 with
|
||||||
|
| N0 => BinNums.xH (* arbitrary, never used *)
|
||||||
|
| Npos(p) => p
|
||||||
|
end)).
|
||||||
|
|
||||||
|
Theorem tm_step_consecutive : forall (n : nat) (l1 l2 : list bool) (b1 b2 : bool),
|
||||||
|
tm_step n = l1 ++ b1 :: b2 :: l2 ->
|
||||||
|
(eqb b1 b2) =
|
||||||
|
let ind_b2 := Pos.of_nat (S (length l1)) in (* index of b2 *)
|
||||||
|
let ind_b1 := Pos.pred ind_b2 in (* index of b1 *)
|
||||||
|
even (Pos.size_nat (
|
||||||
|
match Pos.lxor ind_b1 ind_b2 with
|
||||||
|
| N0 => BinNums.xH (* arbitrary, never used *)
|
||||||
|
| Npos(p) => p
|
||||||
|
end)).
|
||||||
|
Proof.
|
||||||
|
intros n l1 l2 b1 b2.
|
||||||
|
intros H.
|
||||||
|
induction l1.
|
||||||
|
- simpl. destruct n. discriminate.
|
||||||
|
rewrite app_nil_l in H. assert (I := H).
|
||||||
|
rewrite tm_step_head_2 in I. injection I.
|
||||||
|
assert (J: tl (tl (tm_morphism (tm_step n))) = l2).
|
||||||
|
{ replace (tm_morphism (tm_step n)) with (tm_step (S n)).
|
||||||
|
rewrite H. reflexivity. reflexivity. }
|
||||||
|
rewrite J.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
destruct b1 in H.
|
||||||
|
+ destruct b2 in H.
|
||||||
|
(* Case 1: b1 = true, b2 = true (false) *)
|
||||||
|
replace (l2) with (tl (tl (tm_step (S n)))) in H.
|
||||||
|
assert (J : tm_step (S n) = false :: true :: tl (tl (tm_step (S n)))).
|
||||||
|
apply tm_step_head_2. rewrite J in H. discriminate H. rewrite H. reflexivity.
|
||||||
|
(* Case 2: b1 = true, b2 = false (false) *)
|
||||||
|
replace (l2) with (tl (tl (tm_step (S n)))) in H.
|
||||||
|
assert (J : tm_step (S n) = false :: true :: tl (tl (tm_step (S n)))).
|
||||||
|
apply tm_step_head_2. rewrite J in H. discriminate H. rewrite H. reflexivity.
|
||||||
|
+ destruct b2.
|
||||||
|
(* Case 3: b1 = false, b2 = true (TRUE) *)
|
||||||
|
discriminate.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inversion H.
|
||||||
|
discriminate tm_step_head_2.
|
||||||
|
rewrite <- tm_step_head_2 in H.
|
||||||
|
discriminate H.
|
||||||
|
discriminate tm_step_head_2.
|
||||||
|
|
||||||
|
- simpl. simpl. simpl in H.
|
||||||
|
destruct n in H. discriminate H.
|
||||||
|
replace (l2) with (tl (tl (tm_step (S n)))) in H.
|
||||||
|
specialize (H tm_step_head_2).
|
||||||
|
rewrite <- tm_step_head_2 in H.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Lemma tm_step_head_2 : forall (n : nat),
|
||||||
|
tm_step (S n) = false :: true :: tl (tl (tm_step (S n))).
|
||||||
|
Loading…
Reference in New Issue
Block a user