@@ -61,7 +61,7 @@ Lemma max_list_incl A B :
6161Proof .
6262 induction A.
6363 - cbn. lia.
64- - cbn. intros H. eapply Max .max_lub.
64+ - cbn. intros H. eapply Nat .max_lub.
6565 2: firstorder. eapply max_list_spec, H. firstorder.
6666Qed .
6767
8989
9090 specialize (H (map f_N (seq 0 n))).
9191 rewrite map_length seq_length in H.
92- specialize (H (le_refl _)).
92+ specialize (H (Nat. le_refl _)).
9393 edestruct (listable_exists_dec (p := fun i => 0 < i <= n) ( q := fun i => ~ Exists (le i) (M (extend (take i (map f_N (seq 0 n)))) 0))).
9494 + exists (seq 1 n). clear. intros. rewrite in_seq. lia.
9595 + intros x. eapply not_dec. eapply Exists_dec. intros. eapply le_dec.
@@ -125,31 +125,31 @@ Proof.
125125 exists N. intros H.
126126 enough (N < N) by lia.
127127
128- eapply lt_le_trans with (m := 1 + max_list (M (extend (map f (seq 0 N))) 0)).
128+ eapply Nat. lt_le_trans with (m := 1 + max_list (M (extend (map f (seq 0 N))) 0)).
129129 + specialize (H N). setoid_rewrite List.Exists_exists in H.
130130 destruct H as [i Hi].
131131 * split. unfold N. cbn. lia. now rewrite map_length seq_length.
132- * eapply le_lt_trans. eapply Hi.
132+ * eapply Nat. le_lt_trans. eapply Hi.
133133 enough (max_list [i] <= max_list (M (extend (map f (seq 0 N))) 0)) as H0.
134- unfold max_list in H0 at 1. rewrite Max .max_0_r in H0. unfold id in H0 at 1. lia.
134+ unfold max_list in H0 at 1. rewrite Nat .max_0_r in H0. unfold id in H0 at 1. lia.
135135 eapply max_list_incl. intros ? [-> | []].
136136 replace N with (length (map f (seq 0 N))) in Hi at 1.
137137 rewrite firstn_all in Hi. eapply Hi.
138138 now rewrite map_length seq_length.
139139 + unfold N. rewrite <- HL.
140- eapply plus_le_compat_l .
140+ enough (max_list (M f 0) ≤ max_list (1 + length L :: L ++ M f 0)). lia .
141141 eapply max_list_incl, incl_tl, incl_appr, incl_refl.
142142 eapply map_ext_in.
143143 intros a Ha. unfold extend.
144144 erewrite nth_indep.
145145 erewrite map_nth, seq_nth.
146146 * reflexivity.
147147 * enough (max_list [a] <= max_list (1 + length L :: L ++ M f 0)) as H0.
148- unfold max_list in H0 at 1. rewrite Max .max_0_r in H0. unfold id in H0 at 1. lia.
148+ unfold max_list in H0 at 1. rewrite Nat .max_0_r in H0. unfold id in H0 at 1. lia.
149149 eapply max_list_incl. intros ? [-> | []]. eapply in_cons, in_app_iff. eauto.
150150 * rewrite map_length seq_length.
151151 enough (max_list [a] <= max_list (1 + length L :: L ++ M f 0)) as H0.
152- unfold max_list in H0 at 1. rewrite Max .max_0_r in H0. unfold id in H0 at 1. lia.
152+ unfold max_list in H0 at 1. rewrite Nat .max_0_r in H0. unfold id in H0 at 1. lia.
153153 eapply max_list_incl. intros ? [-> | []]. eapply in_cons, in_app_iff. eauto.
154154 Unshelve. all:econstructor.
155155Qed .
@@ -239,9 +239,15 @@ Proof.
239239 rewrite <- app_assoc in Heq.
240240 destruct (lt_eq_lt_dec (length l2') (length l1')) as [[Hlt|e] | Hgt].
241241 - eapply (f_equal (take (length l1'))) in Heq.
242- rewrite take_app take_ge in Heq.
243- rewrite app_length. cbn. lia.
244- subst. exfalso. eauto.
242+ rewrite take_app in Heq.
243+ rewrite take_app_ge in Heq. lia.
244+ cbn in Heq.
245+ exfalso. destruct (length l1' - length l2') eqn:E. lia.
246+ cbn in *. subst.
247+ eapply nH2, tree_p. eapply (Kleene_T T_K). 2:exact H1.
248+ rewrite Nat.sub_diag in Heq. cbn in Heq.
249+ rewrite app_nil_r in Heq. rewrite <- Heq.
250+ rewrite take_ge. lia. destruct n; cbn; eauto.
245251 - eapply app_inj_1 in Heq as [-> Heq]; eauto.
246252 destruct l3; cbn in *; congruence.
247253 - eapply (f_equal (take (length l2'))) in Heq.
@@ -251,6 +257,8 @@ Proof.
251257 exfalso. destruct (length l2' - length l1') eqn:E. lia.
252258 cbn in *. subst.
253259 eapply nH1, tree_p. eapply (Kleene_T T_K). 2:exact H2.
260+ rewrite Nat.sub_diag in Heq. cbn in Heq.
261+ rewrite app_nil_r in Heq. rewrite firstn_all in Heq. subst.
254262 eexists. now rewrite <- app_assoc.
255263Qed .
256264
@@ -311,12 +319,12 @@ Proof.
311319 rewrite IHk. f_equal.
312320 destruct (drop k (F' f 0 k ++ ℓ (f k))) eqn:E1.
313321 + eapply (f_equal length) in E1.
314- rewrite drop_length in E1. cbn in E1.
322+ rewrite skipn_length in E1. cbn in E1.
315323 pose proof (F'_length f 0 (S k)). cbn in H2. rewrite app_length in H2, E1.
316324 lia.
317325 + destruct (drop k (F' g 0 k ++ ℓ (g k))) eqn:E2.
318326 * eapply (f_equal length) in E2.
319- rewrite drop_length in E2. cbn in E2.
327+ rewrite skipn_length in E2. cbn in E2.
320328 pose proof (F'_length g 0 (S k)). cbn in H2. rewrite app_length in H2, E2.
321329 lia.
322330 * cbn. rewrite !firstn_O. f_equal.
@@ -405,16 +413,16 @@ Proof.
405413 assert (k''' <= k''). {
406414 subst k''' k'' k.
407415 cbn. rewrite app_length. lia.
408- }
416+ }
409417 rewrite !take_take in Heq; eauto.
410418 rewrite firstn_app in Heq.
411419 rewrite !Nat.add_0_r in Heq.
412420 unfold k''' in Heq at 3.
413- rewrite take_app in Heq.
421+ rewrite take_app_length in Heq.
414422 setoid_rewrite take_ge in Heq at 1. 2:eassumption.
415423 eapply leaf_prefix. eauto. eauto.
416424 eapply prefix_take_iff. rewrite <- Heq.
417- now rewrite take_app .
425+ now rewrite take_app_length .
418426 * pose (k := (length (F' f 0 (S (S n))))).
419427 pose proof (F_inj_help H k) as Heq.
420428 pose proof (F'_eq_lt (o := 0) IH) as Hpref.
@@ -443,13 +451,13 @@ Proof.
443451 rewrite firstn_app in Heq.
444452 rewrite !Nat.add_0_r in Heq.
445453 unfold k''' in Heq at 3.
446- rewrite take_app in Heq.
454+ rewrite take_app_length in Heq.
447455 setoid_rewrite take_ge in Heq at 1. 2:eassumption.
448456 symmetry.
449457 eapply leaf_prefix. eauto. eauto.
450458 eapply prefix_take_iff. rewrite <- Heq.
451- now rewrite take_app .
452- Qed .
459+ now rewrite take_app_length .
460+ Qed .
453461
454462Lemma exists_leaf l2 :
455463 ~ T_K l2 -> exists l1, l1 `prefix_of` l2 /\ leaf l1.
@@ -767,7 +775,7 @@ Proof.
767775 - reflexivity.
768776 - cbn. rewrite app_length seq_app map_app.
769777 cbn. rewrite app_nth2. lia.
770- rewrite minus_diag . cbn. f_equal.
778+ rewrite Nat.sub_diag . cbn. f_equal.
771779 rewrite <- IHl at 2.
772780 eapply map_ext_in.
773781 intros ? [_ ?] % in_seq. cbn in *.
0 commit comments