1010(************************************************************************* *)
1111
1212
13- From Coq Require Import Relations List Arith Morphisms.
13+ From Stdlib Require Import Relations List Arith Morphisms.
1414From CoLoR Require Import more_list list_permut list_sort term_spec term_o equational_theory_spec equational_theory.
1515
1616Set Implicit Arguments .
@@ -591,8 +591,8 @@ forall t, (match t with
591591 end ) -> well_formed_cf t.
592592Proof .
593593intro t; destruct t as [v | f l]; trivial.
594- intros [Wl Hl]; split; trivial; clear Hl;
595- induction l as [ | t l]; intuition;
594+ intros [Wl Hl]; split; trivial; clear Hl;
595+ induction l as [ | t l]; intuition auto with *;
596596apply IHl; intros; apply Wl; right; trivial.
597597Qed .
598598
@@ -697,15 +697,15 @@ apply (f_equal (fun l => Term f l)); apply sort_is_unique; trivial.
697697apply quick_sorted.
698698apply permut_sym; apply quick_permut_bis;
699699apply permut_sym; rewrite <- permut_cons_inside.
700- rewrite <- app_nil_end ; apply permut_refl.
700+ rewrite app_nil_r ; apply permut_refl.
701701reflexivity.
702702generalize (F.Symb.eq_bool_ok f g1); case (F.Symb.eq_bool f g1); [intro f_eq_g1 | intro f_diff_g1].
703703absurd (f=g1); trivial.
704704apply (f_equal (fun l => Term f l)); apply sort_is_unique; trivial.
705705apply quick_sorted.
706706apply permut_sym; apply quick_permut_bis;
707707apply permut_sym; rewrite <- permut_cons_inside.
708- rewrite <- app_nil_end ; apply permut_refl.
708+ rewrite app_nil_r ; apply permut_refl.
709709reflexivity.
710710intros; apply Hrec; trivial; right; trivial.
711711intros; apply Wl; right; trivial.
@@ -787,7 +787,7 @@ apply Nat.add_le_mono.
787787assert (Wt : well_formed t). apply Wl; left; trivial.
788788destruct t as [v | g ll]; simpl; auto with arith.
789789generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intro f_eq_g | intro f_diff_g].
790- subst g; rewrite <- app_nil_end ; rewrite Af; rewrite length_quicksort;
790+ subst g; rewrite app_nil_r ; rewrite Af; rewrite length_quicksort;
791791apply Nat.le_trans with (length ll).
792792elim (well_formed_unfold Wt); rewrite Af; intros _ Lll; rewrite Lll; auto with arith.
793793apply IHn; trivial.
@@ -837,7 +837,7 @@ assert (Wt : well_formed_cf t). apply Wl; left; trivial.
837837destruct t as [v | g h].
838838elim In_u; clear In_u; intro In_u; subst; trivial; contradiction.
839839revert In_u; generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g In_u | intros f_diff_g In_u].
840- rewrite <- app_nil_end in In_u; apply (well_formed_cf_subterms Wt); trivial.
840+ rewrite app_nil_r in In_u; apply (well_formed_cf_subterms Wt); trivial.
841841elim In_u; clear In_u; intro In_u; subst; trivial; contradiction.
842842apply IHl; trivial; intros; apply Wl; right; trivial.
843843rewrite length_quicksort; rewrite <- L; unfold ge; apply length_flatten; trivial.
@@ -857,7 +857,7 @@ assert (Wt : well_formed_cf t). apply Wl; left; trivial.
857857destruct t as [ v | g ll ].
858858elim In_u; clear In_u; intro In_u; subst; trivial; contradiction.
859859revert In_u; generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g In_u | intros f_diff_g In_u].
860- subst g; rewrite <- app_nil_end in In_u;
860+ subst g; rewrite app_nil_r in In_u;
861861apply well_formed_cf_alien with ll; trivial.
862862elim In_u; clear In_u; intro In_u; subst; trivial; contradiction.
863863apply (IHm l); trivial.
@@ -884,14 +884,14 @@ intros f t1 t2 Af Wt1 Wt2; destruct t1 as [v1 | f1 l1]; destruct t2 as [v2 | f2
884884simpl; intros; apply permut_length_1; trivial.
885885(* t1 = Var v1; t2 = Term f2 l2 *)
886886simpl; generalize (F.Symb.eq_bool_ok f f2); case (F.Symb.eq_bool f f2); [intros f_eq_f2; subst f2 | intros f_diff_f2].
887- rewrite <- app_nil_end ; intro P; absurd (2 <= 1); auto with arith.
887+ rewrite app_nil_r ; intro P; absurd (2 <= 1); auto with arith.
888888generalize (permut_length P); simpl;
889889intro L; pattern 1 at 2; rewrite L; auto with arith;
890890apply well_formed_cf_length with f; trivial.
891891intro P; apply permut_length_1; trivial.
892892(* t1 = Term f1 l1; t2 = Var v2 *)
893893simpl; generalize (F.Symb.eq_bool_ok f f1); case (F.Symb.eq_bool f f1); [intros f_eq_f1; subst f1 | intros f_diff_f1].
894- rewrite <- app_nil_end ; intro P; absurd (2 <= 1); auto with arith.
894+ rewrite app_nil_r ; intro P; absurd (2 <= 1); auto with arith.
895895generalize (permut_length P); simpl;
896896intro L; pattern 1 at 2; rewrite <- L; auto with arith;
897897apply well_formed_cf_length with f; trivial.
@@ -901,16 +901,16 @@ simpl; generalize (F.Symb.eq_bool_ok f f1); case (F.Symb.eq_bool f f1); [intros
901901(generalize (F.Symb.eq_bool_ok f f2); case (F.Symb.eq_bool f f2); [intros f_eq_f2 P; subst f2 | intros f_diff_f2 P]).
902902(* f = f1; f = f2 *)
903903apply (f_equal (fun l => Term f l));
904- do 2 rewrite <- app_nil_end in P;
904+ do 2 rewrite app_nil_r in P;
905905apply sort_is_unique; trivial; apply well_formed_cf_sorted with f; trivial.
906906(* f = f1; f <> f2 *)
907907absurd (2 <= 1); auto with arith.
908- rewrite <- app_nil_end in P; generalize (permut_length P); simpl;
908+ rewrite app_nil_r in P; generalize (permut_length P); simpl;
909909intro L; pattern 1 at 2; rewrite <- L; auto with arith;
910910apply well_formed_cf_length with f; trivial.
911911(* f <> f1; f = f2 *)
912912absurd (2 <= 1); auto with arith.
913- rewrite <- app_nil_end in P; generalize (permut_length P); simpl;
913+ rewrite app_nil_r in P; generalize (permut_length P); simpl;
914914intro L; pattern 1 at 2; rewrite L; auto with arith;
915915apply well_formed_cf_length with f; trivial.
916916apply permut_length_1; trivial.
@@ -1003,7 +1003,7 @@ generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g |
10031003apply False_rect; apply Al_t1; assumption.
10041004reflexivity.
10051005simpl; generalize (F.Symb.eq_bool_ok f f); case (F.Symb.eq_bool f f); [intros _ | intro f_diff_f; apply False_rect; apply f_diff_f; reflexivity].
1006- rewrite <- app_nil_end ; apply quick_permut_bis; auto.
1006+ rewrite app_nil_r ; apply quick_permut_bis; auto.
10071007Qed .
10081008
10091009Lemma flatten_build_cons :
@@ -1125,7 +1125,7 @@ rewrite Af; repeat rewrite quicksort_equation; simpl; auto.
11251125destruct l as [ | t2 l]; auto.
11261126simpl; rewrite Af;
11271127generalize (F.Symb.eq_bool_ok f f); case (F.Symb.eq_bool f f); [intros _ | intro f_diff_f; apply False_rect; apply f_diff_f; reflexivity].
1128- rewrite <- app_nil_end ; apply permut_sym;
1128+ rewrite app_nil_r ; apply permut_sym;
11291129apply quick_permut_bis;
11301130transitivity (flatten f (map (apply_cf_subst sigma) (t1 :: t2 :: l))); auto;
11311131apply list_permut_flatten.
@@ -1171,7 +1171,7 @@ rewrite <- permut_app1; apply IHl.
11711171rewrite <- permut_app2.
11721172destruct t as [ v | g ll]; simpl; auto.
11731173generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g; subst g | intros f_diff_g].
1174- rewrite Af; do 2 rewrite <- app_nil_end ;
1174+ rewrite Af; do 2 rewrite app_nil_r ;
11751175apply permut_sym; apply quick_permut.
11761176simpl; generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g; subst g | intros _].
11771177apply False_rect; apply f_diff_g; reflexivity.
@@ -1218,7 +1218,7 @@ apply well_formed_cf_apply_subst; trivial; apply Wl; left; trivial.
12181218simpl map;
12191219destruct (apply_cf_subst sigma t) as [ v | g ll ]; simpl; trivial;
12201220simpl; generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g; subst g | intros _]; trivial.
1221- rewrite <- app_nil_end ;
1221+ rewrite app_nil_r ;
12221222apply Nat.le_trans with 2; auto with arith;
12231223apply well_formed_cf_length with f; trivial.
12241224apply IHl; intros; apply Wl; right; trivial.
@@ -1254,7 +1254,7 @@ case (F.Symb.eq_bool f f1);
12541254| apply P12 ].
12551255reflexivity.
12561256case (F.Symb.eq_bool f f1); case (F.Symb.eq_bool f f2).
1257- do 2 rewrite <- app_nil_end ; apply list_permut_app_app.
1257+ do 2 rewrite app_nil_r ; apply list_permut_app_app.
12581258apply permut_sym; rewrite <- permut_cons_inside; auto.
12591259reflexivity.
12601260
@@ -1272,7 +1272,7 @@ apply quick_sorted.
12721272apply quick_sorted.
12731273do 2 (apply quick_permut_bis; apply permut_sym).
12741274generalize (canonical_form t1) (canonical_form t2) (canonical_form t3);
1275- clear t1 t2 t3; intros t1 t2 t3; rewrite <- app_nil_end .
1275+ clear t1 t2 t3; intros t1 t2 t3; rewrite app_nil_r .
12761276transitivity ((flatten f (t1 :: t2 :: nil)) ++ (flatten f (t3 :: nil))).
12771277rewrite <- permut_app2.
12781278apply permut_sym; apply quick_permut.
@@ -1283,7 +1283,7 @@ simpl; rewrite <- permut_cons.
12831283apply quick_permut.
12841284reflexivity.
12851285simpl; case (F.Symb.eq_bool f g1).
1286- rewrite <- app_nil_end ; rewrite <- permut_app1; apply quick_permut.
1286+ rewrite app_nil_r ; rewrite <- permut_app1; apply quick_permut.
12871287simpl; rewrite <- permut_cons.
12881288apply quick_permut.
12891289reflexivity.
@@ -1425,7 +1425,7 @@ apply well_formed_cf_is_well_formed_cf_conv; exists t; split; trivial.
14251425generalize (canonical_form t) Wu; clear t Wt Wu; intros u Wu.
14261426destruct u as [v | g l]; trivial; simpl.
14271427simpl; generalize (F.Symb.eq_bool_ok f g); case (F.Symb.eq_bool f g); [intros f_eq_g; subst g | intros f_diff_g].
1428- rewrite Af; rewrite <- app_nil_end ;
1428+ rewrite Af; rewrite app_nil_r ;
14291429generalize (well_formed_cf_length Af Wu); intro Ll;
14301430destruct (length l) as [ | n].
14311431absurd (2 <= 0); auto with arith.
@@ -1488,7 +1488,7 @@ destruct (canonical_form t1) as [v1 | f1 ll1];
14881488destruct (canonical_form t2) as [v2 | f2 ll2]; trivial.
14891489simpl flatten;
14901490generalize (F.Symb.eq_bool_ok f f2); case (F.Symb.eq_bool f f2); [intros f_eq_f2; subst f2 | intros f_diff_f2].
1491- simpl; rewrite <- app_nil_end ; simpl; rewrite Af.
1491+ simpl; rewrite app_nil_r ; simpl; rewrite Af.
14921492rewrite (list_size_fold ac_size); rewrite Nat.sub_0_r.
14931493generalize (well_formed_cf_length Af W2).
14941494intro Lll2; destruct (length ll2) as [ | n2].
@@ -1510,7 +1510,7 @@ replace (flatten f (Term f1 ll1 :: Term f2 ll2 :: nil)) with
15101510rewrite length_app.
15111511simpl; generalize (F.Symb.eq_bool_ok f f1); case (F.Symb.eq_bool f f1); [intros f_eq_f1; subst f1 | intros f_diff_f1];
15121512(generalize (F.Symb.eq_bool_ok f f2); case (F.Symb.eq_bool f f2); [intros f_eq_f2; subst f2 | intros f_diff_f2]).
1513- do 2 rewrite <- app_nil_end ; rewrite Af;
1513+ do 2 rewrite app_nil_r ; rewrite Af;
15141514do 2 rewrite (list_size_fold ac_size); rewrite list_size_app.
15151515unfold DOS.A in *; generalize (well_formed_cf_length Af W1);
15161516intro Lll1; destruct (length ll1) as [ | n1].
@@ -1524,15 +1524,15 @@ do 2 rewrite <- Nat.add_assoc; apply (f_equal (fun n => S (n1 + n)));
15241524rewrite Nat.add_comm; rewrite <- Nat.add_assoc;
15251525apply (f_equal (fun n => n2 + n)); apply Nat.add_comm.
15261526
1527- rewrite Af; rewrite <- app_nil_end ; rewrite list_size_app; simpl;
1527+ rewrite Af; rewrite app_nil_r ; rewrite list_size_app; simpl;
15281528do 2 rewrite (list_size_fold ac_size); simpl; rewrite Nat.add_0_r;
15291529rewrite (Nat.add_comm (length ll1) 1); simpl; rewrite Nat.sub_0_r;
15301530unfold DOS.A in *; generalize (well_formed_cf_length Af W1);
15311531intro Lll1; destruct (length ll1) as [ | n1].
15321532absurd (2 <= 0); auto with arith.
15331533simpl; rewrite Nat.sub_0_r; rewrite <- Nat.add_assoc; trivial.
15341534
1535- rewrite Af; rewrite <- app_nil_end .
1535+ rewrite Af; rewrite app_nil_r .
15361536do 2 rewrite (list_size_fold ac_size).
15371537unfold DOS.A in *; generalize (well_formed_cf_length Af W2);
15381538intro Lll2; destruct (length ll2) as [ | n2].
0 commit comments