diff --git a/theories/numbers.v b/theories/numbers.v index 4694aaf73f08d9ec875a94bb1d5cef6d6ba4282c..8c7da83aa2126956eff0b4f2afab9a3cb213719d 100644 --- a/theories/numbers.v +++ b/theories/numbers.v @@ -144,24 +144,18 @@ Proof. intros ?? p. by induction p; intros; f_equal'. Qed. Global Instance: ∀ p : positive, Injective (=) (=) (++ p). Proof. intros p ???. induction p; simplify_equality; auto. Qed. -Lemma Preverse_go_app_cont p1 p2 p3 : - Preverse_go (p2 ++ p1) p3 = p2 ++ Preverse_go p1 p3. -Proof. - revert p1. induction p3; simpl; intros. - * apply (IHp3 (_~1)). - * apply (IHp3 (_~0)). - * done. -Qed. Lemma Preverse_go_app p1 p2 p3 : Preverse_go p1 (p2 ++ p3) = Preverse_go p1 p3 ++ Preverse_go 1 p2. Proof. - revert p1. induction p3; intros p1; simpl; auto. - by rewrite <-Preverse_go_app_cont. + revert p3 p1 p2. + cut (∀ p1 p2 p3, Preverse_go (p2 ++ p3) p1 = p2 ++ Preverse_go p3 p1). + { by intros go p3; induction p3; intros p1 p2; simpl; auto; rewrite <-?go. } + intros p1; induction p1 as [p1 IH|p1 IH|]; intros p2 p3; simpl; auto. + * apply (IH _ (_~1)). + * apply (IH _ (_~0)). Qed. -Lemma Preverse_app p1 p2 : - Preverse (p1 ++ p2) = Preverse p2 ++ Preverse p1. +Lemma Preverse_app p1 p2 : Preverse (p1 ++ p2) = Preverse p2 ++ Preverse p1. Proof. unfold Preverse. by rewrite Preverse_go_app. Qed. - Lemma Preverse_xO p : Preverse (p~0) = (1~0) ++ Preverse p. Proof Preverse_app p (1~0). Lemma Preverse_xI p : Preverse (p~1) = (1~1) ++ Preverse p. @@ -169,8 +163,7 @@ Proof Preverse_app p (1~1). Fixpoint Plength (p : positive) : nat := match p with 1 => 0%nat | p~0 | p~1 => S (Plength p) end. -Lemma Papp_length p1 p2 : - Plength (p1 ++ p2) = (Plength p2 + Plength p1)%nat. +Lemma Papp_length p1 p2 : Plength (p1 ++ p2) = (Plength p2 + Plength p1)%nat. Proof. by induction p2; f_equal'. Qed. Close Scope positive_scope.