Commit 08b69a69 authored by Ralf Jung's avatar Ralf Jung

add tactic aliases: trans -> transitivity; etrans -> etransitivity

parent 709da735
......@@ -40,8 +40,8 @@ Proof.
+ by split.
+ by intros x y Hxy; split; intros; symmetry; apply Hxy; auto; apply Hxy.
+ intros x y z Hxy Hyz; split; intros n'; intros.
* transitivity (agree_is_valid y n'). by apply Hxy. by apply Hyz.
* transitivity (y n'). by apply Hxy. by apply Hyz, Hxy.
* trans (agree_is_valid y n'). by apply Hxy. by apply Hyz.
* trans (y n'). by apply Hxy. by apply Hyz, Hxy.
- intros n x y Hxy; split; intros; apply Hxy; auto.
- intros n c; apply and_wlog_r; intros;
symmetry; apply (chain_cauchy c); naive_solver.
......@@ -74,8 +74,8 @@ Proof.
intros n x y1 y2 [Hy' Hy]; split; [|done].
split; intros (?&?&Hxy); repeat (intro || split);
try apply Hy'; eauto using agree_valid_le.
- etransitivity; [apply Hxy|apply Hy]; eauto using agree_valid_le.
- etransitivity; [apply Hxy|symmetry; apply Hy, Hy'];
- etrans; [apply Hxy|apply Hy]; eauto using agree_valid_le.
- etrans; [apply Hxy|symmetry; apply Hy, Hy'];
eauto using agree_valid_le.
Qed.
Instance: Proper (dist n ==> dist n ==> dist n) (@op (agree A) _).
......
......@@ -44,7 +44,7 @@ Proof.
- intros n; split.
+ by intros ?; split.
+ by intros ?? [??]; split; symmetry.
+ intros ??? [??] [??]; split; etransitivity; eauto.
+ intros ??? [??] [??]; split; etrans; eauto.
- by intros ? [??] [??] [??]; split; apply dist_S.
- intros n c; split. apply (conv_compl n (chain_map authoritative c)).
apply (conv_compl n (chain_map own c)).
......
......@@ -250,7 +250,7 @@ Qed.
Global Instance cmra_included_preorder: PreOrder (@included A _ _).
Proof.
split; red; intros until 0; rewrite !cmra_included_includedN; first done.
intros; etransitivity; eauto.
intros; etrans; eauto.
Qed.
Lemma cmra_validN_includedN n x y : {n} y x {n} y {n} x.
Proof. intros Hyv [z ?]; cofe_subst y; eauto using cmra_validN_op_l. Qed.
......@@ -391,7 +391,7 @@ Section identity_updates.
Lemma cmra_update_empty x : x ~~> .
Proof. intros n z; rewrite left_id; apply cmra_validN_op_r. Qed.
Lemma cmra_update_empty_alt y : ~~> y x, x ~~> y.
Proof. split; [intros; transitivity |]; auto using cmra_update_empty. Qed.
Proof. split; [intros; trans |]; auto using cmra_update_empty. Qed.
End identity_updates.
End cmra.
......
......@@ -23,7 +23,7 @@ Proof.
induction 1 as [|x xs1 xs2 ? IH|x y xs|xs1 xs2 xs3]; simpl; auto.
- by rewrite IH.
- by rewrite !assoc (comm _ x).
- by transitivity (big_op xs2).
- by trans (big_op xs2).
Qed.
Global Instance big_op_proper : Proper (() ==> ()) big_op.
Proof. by induction 1; simpl; repeat apply (_ : Proper (_ ==> _ ==> _) op). Qed.
......
......@@ -99,13 +99,13 @@ Section cofe.
split.
- by intros x; rewrite equiv_dist.
- by intros x y; rewrite !equiv_dist.
- by intros x y z; rewrite !equiv_dist; intros; transitivity y.
- by intros x y z; rewrite !equiv_dist; intros; trans y.
Qed.
Global Instance dist_ne n : Proper (dist n ==> dist n ==> iff) (@dist A _ n).
Proof.
intros x1 x2 ? y1 y2 ?; split; intros.
- by transitivity x1; [|transitivity y1].
- by transitivity x2; [|transitivity y2].
- by trans x1; [|trans y1].
- by trans x2; [|trans y2].
Qed.
Global Instance dist_proper n : Proper (() ==> () ==> iff) (@dist A _ n).
Proof.
......@@ -217,7 +217,7 @@ Section cofe_mor.
- intros n; split.
+ by intros f x.
+ by intros f g ? x.
+ by intros f g h ?? x; transitivity (g x).
+ by intros f g h ?? x; trans (g x).
- by intros n f g ? x; apply dist_S.
- intros n c x; simpl.
by rewrite (conv_compl n (fun_chain c x)) /=.
......@@ -352,7 +352,7 @@ Section later.
- intros [|n]; [by split|split]; unfold dist, later_dist.
+ by intros [x].
+ by intros [x] [y].
+ by intros [x] [y] [z] ??; transitivity y.
+ by intros [x] [y] [z] ??; trans y.
- intros [|n] [x] [y] ?; [done|]; unfold dist, later_dist; by apply dist_S.
- intros [|n] c; [done|by apply (conv_compl n (later_chain c))].
Qed.
......
......@@ -71,7 +71,7 @@ Proof.
- intros k; split.
+ by intros X n.
+ by intros X Y ? n.
+ by intros X Y Z ?? n; transitivity (Y n).
+ by intros X Y Z ?? n; trans (Y n).
- intros k X Y HXY n; apply dist_S.
by rewrite -(g_tower X) (HXY (S n)) g_tower.
- intros n c k; rewrite /= (conv_compl n (tower_chain c k)).
......@@ -209,7 +209,7 @@ Proof.
- move=> X /=.
rewrite equiv_dist; intros n k; unfold unfold, fold; simpl.
rewrite -g_tower -(gg_tower _ n); apply (_ : Proper (_ ==> _) (g _)).
transitivity (map (ff n, gg n) (X (S (n + k)))).
trans (map (ff n, gg n) (X (S (n + k)))).
{ rewrite /unfold (conv_compl n (unfold_chain X)).
rewrite -(chain_cauchy (unfold_chain X) n (S (n + k))) /=; last lia.
rewrite -(dist_le _ _ _ _ (f_tower (n + k) _)); last lia.
......@@ -234,6 +234,6 @@ Proof.
apply (contractive_ne map); split => Y /=.
+ apply dist_le with n; last omega.
rewrite f_tower. apply dist_S. by rewrite embed_tower.
+ etransitivity; [apply embed_ne, equiv_dist, g_tower|apply embed_tower].
+ etrans; [apply embed_ne, equiv_dist, g_tower|apply embed_tower].
Qed.
End solver. End solver.
......@@ -60,7 +60,7 @@ Proof.
- by intros [x px ?]; simpl.
- intros [x px ?] [y py ?]; naive_solver.
- intros [x px ?] [y py ?] [z pz ?] [? Hxy] [? Hyz]; simpl in *.
split; [|intros; transitivity y]; tauto.
split; [|intros; trans y]; tauto.
Qed.
Instance dra_valid_proper' : Proper (() ==> iff) (valid : A Prop).
Proof. by split; apply dra_valid_proper. Qed.
......
......@@ -56,7 +56,7 @@ Proof.
- intros n; split.
+ by intros [x| |]; constructor.
+ by destruct 1; constructor.
+ destruct 1; inversion_clear 1; constructor; etransitivity; eauto.
+ destruct 1; inversion_clear 1; constructor; etrans; eauto.
- by inversion_clear 1; constructor; apply dist_S.
- intros n c; unfold compl, excl_compl.
destruct (Some_dec (maybe Excl (c 1))) as [[x Hx]|].
......
......@@ -22,7 +22,7 @@ Proof.
- intros n; split.
+ by intros m k.
+ by intros m1 m2 ? k.
+ by intros m1 m2 m3 ?? k; transitivity (m2 !! k).
+ by intros m1 m2 m3 ?? k; trans (m2 !! k).
- by intros n m1 m2 ? k; apply dist_S.
- intros n c k; rewrite /compl /map_compl lookup_imap.
feed inversion (λ H, chain_cauchy c 0 (S n) H k); simpl; auto with lia.
......
......@@ -35,7 +35,7 @@ Section iprod_cofe.
- intros n; split.
+ by intros f x.
+ by intros f g ? x.
+ by intros f g h ?? x; transitivity (g x).
+ by intros f g h ?? x; trans (g x).
- intros n f g Hfg x; apply dist_S, Hfg.
- intros n c x.
rewrite /compl /iprod_compl (conv_compl n (iprod_chain c x)).
......
......@@ -29,7 +29,7 @@ Proof.
- intros n; split.
+ by intros [x|]; constructor.
+ by destruct 1; constructor.
+ destruct 1; inversion_clear 1; constructor; etransitivity; eauto.
+ destruct 1; inversion_clear 1; constructor; etrans; eauto.
- by inversion_clear 1; constructor; apply dist_S.
- intros n c; unfold compl, option_compl.
destruct (Some_dec (c 1)) as [[x Hx]|].
......
......@@ -224,7 +224,7 @@ Proof.
split.
- by intros []; constructor.
- by destruct 1; constructor.
- destruct 1; inversion_clear 1; constructor; etransitivity; eauto.
- destruct 1; inversion_clear 1; constructor; etrans; eauto.
Qed.
Global Instance sts_dra : DRA (car sts).
Proof.
......@@ -366,7 +366,7 @@ Lemma sts_op_frag S1 S2 T1 T2 :
Proof.
intros HT HS1 HS2. rewrite /sts_frag.
(* FIXME why does rewrite not work?? *)
etransitivity; last eapply to_validity_op; try done; [].
etrans; last eapply to_validity_op; try done; [].
intros Hval. constructor; last set_solver. eapply closed_ne, Hval.
Qed.
......
From algebra Require Export cmra.
Local Hint Extern 1 (_ _) => etransitivity; [eassumption|].
Local Hint Extern 1 (_ _) => etransitivity; [|eassumption].
Local Hint Extern 1 (_ _) => etrans; [eassumption|].
Local Hint Extern 1 (_ _) => etrans; [|eassumption].
Local Hint Extern 10 (_ _) => omega.
Record uPred (M : cmraT) : Type := IProp {
......@@ -40,7 +40,7 @@ Section cofe.
- intros n; split.
+ by intros P x i.
+ by intros P Q HPQ x i ??; symmetry; apply HPQ.
+ by intros P Q Q' HP HQ i x ??; transitivity (Q i x);[apply HP|apply HQ].
+ by intros P Q Q' HP HQ i x ??; trans (Q i x);[apply HP|apply HQ].
- intros n P Q HPQ i x ??; apply HPQ; auto.
- intros n c i x ??; symmetry; apply (chain_cauchy c i (S n)); auto.
Qed.
......@@ -243,8 +243,8 @@ Global Instance entails_proper :
Proper (() ==> () ==> iff) (() : relation (uPred M)).
Proof.
move => P1 P2 /equiv_spec [HP1 HP2] Q1 Q2 /equiv_spec [HQ1 HQ2]; split; intros.
- by transitivity P1; [|transitivity Q1].
- by transitivity P2; [|transitivity Q2].
- by trans P1; [|trans Q1].
- by trans P2; [|trans Q2].
Qed.
(** Non-expansiveness and setoid morphisms *)
......@@ -734,7 +734,7 @@ Proof. by rewrite /uPred_iff later_and !later_impl. Qed.
Lemma löb_strong P Q : (P Q) Q P Q.
Proof.
intros Hlöb. apply impl_entails.
etransitivity; last by eapply löb.
etrans; last by eapply löb.
apply impl_intro_l, impl_intro_l. rewrite right_id -{2}Hlöb.
apply and_intro; first by eauto.
by rewrite {1}(later_intro P) later_impl impl_elim_r.
......
......@@ -61,14 +61,14 @@ Proof.
induction 1 as [|P Ps Qs ? IH|P Q Ps|]; simpl; auto.
- by rewrite IH.
- by rewrite !assoc (comm _ P).
- etransitivity; eauto.
- etrans; eauto.
Qed.
Global Instance big_sep_perm : Proper ((≡ₚ) ==> ()) (@uPred_big_sep M).
Proof.
induction 1 as [|P Ps Qs ? IH|P Q Ps|]; simpl; auto.
- by rewrite IH.
- by rewrite !assoc (comm _ P).
- etransitivity; eauto.
- etrans; eauto.
Qed.
Lemma big_and_app Ps Qs : (Π∧ (Ps ++ Qs))%I (Π∧ Ps Π∧ Qs)%I.
......@@ -103,7 +103,7 @@ Section gmap.
m2 m1 ( x k, m2 !! k = Some x Φ k x Ψ k x)
(Π★{map m1} Φ) (Π★{map m2} Ψ).
Proof.
intros HX HΦ. transitivity (Π★{map m2} Φ)%I.
intros HX HΦ. trans (Π★{map m2} Φ)%I.
- by apply big_sep_contains, fmap_contains, map_to_list_contains.
- apply big_sep_mono', Forall2_fmap, Forall2_Forall.
apply Forall_forall=> -[i x] ? /=. by apply HΦ, elem_of_map_to_list.
......@@ -163,7 +163,7 @@ Section gset.
Lemma big_sepS_mono Φ Ψ X Y :
Y X ( x, x Y Φ x Ψ x) (Π★{set X} Φ) (Π★{set Y} Ψ).
Proof.
intros HX HΦ. transitivity (Π★{set Y} Φ)%I.
intros HX HΦ. trans (Π★{set Y} Φ)%I.
- by apply big_sep_contains, fmap_contains, elements_contains.
- apply big_sep_mono', Forall2_fmap, Forall2_Forall.
apply Forall_forall=> x ? /=. by apply HΦ, elem_of_elements.
......
......@@ -157,7 +157,7 @@ Section proof.
{ by eapply (saved_prop_alloc _ P). }
rewrite pvs_frame_l. apply pvs_strip_pvs. rewrite sep_exist_l.
apply exist_elim=>i.
transitivity (pvs (heap_ctx heapN (barrier_inv l P (State Low {[ i ]})) saved_prop_own i P)).
trans (pvs (heap_ctx heapN (barrier_inv l P (State Low {[ i ]})) saved_prop_own i P)).
- rewrite -pvs_intro. rewrite [(_ heap_ctx _)%I]comm -!assoc. apply sep_mono_r.
rewrite {1}[saved_prop_own _ _]always_sep_dup !assoc. apply sep_mono_l.
rewrite /barrier_inv /waiting -later_intro. apply sep_mono_r.
......@@ -215,7 +215,7 @@ Section proof.
apply const_elim_sep_l=>Hs. destruct p; last done.
rewrite {1}/barrier_inv =>/={Hs}. rewrite later_sep.
eapply wp_store; eauto with I ndisj.
rewrite -!assoc. apply sep_mono_r. etransitivity; last eapply later_mono.
rewrite -!assoc. apply sep_mono_r. etrans; last eapply later_mono.
{ (* Is this really the best way to strip the later? *)
erewrite later_sep. apply sep_mono_r. apply later_intro. }
apply wand_intro_l. rewrite -(exist_intro (State High I)).
......@@ -256,7 +256,7 @@ Section proof.
apply const_elim_sep_l=>Hs.
rewrite {1}/barrier_inv =>/=. rewrite later_sep.
eapply wp_load; eauto with I ndisj.
rewrite -!assoc. apply sep_mono_r. etransitivity; last eapply later_mono.
rewrite -!assoc. apply sep_mono_r. etrans; last eapply later_mono.
{ (* Is this really the best way to strip the later? *)
erewrite later_sep. apply sep_mono_r. rewrite !assoc. erewrite later_sep.
apply sep_mono_l, later_intro. }
......@@ -294,7 +294,7 @@ Section proof.
rewrite [(sts_own _ _ _ _)%I]sep_elim_r [(sts_ctx _ _ _ _)%I]sep_elim_r.
rewrite !assoc [(_ saved_prop_own i Q)%I]comm !assoc saved_prop_agree.
wp_op>; last done. intros _.
etransitivity; last eapply later_mono.
etrans; last eapply later_mono.
{ (* Is this really the best way to strip the later? *)
erewrite later_sep. apply sep_mono; last apply later_intro.
rewrite ->later_sep. apply sep_mono_l. rewrite ->later_sep. done. }
......
......@@ -67,7 +67,7 @@ Section heap.
authG heap_lang Σ heapRA nclose N E
ownP σ (|={E}=> _ : heapG Σ, heap_ctx N Π★{map σ} heap_mapsto).
Proof.
intros. rewrite -{1}(from_to_heap σ). etransitivity.
intros. rewrite -{1}(from_to_heap σ). etrans.
{ rewrite [ownP _]later_intro.
apply (auth_alloc (ownP of_heap) E N (to_heap σ)); last done.
apply to_heap_valid. }
......@@ -103,7 +103,7 @@ Section heap.
P || Alloc e @ E {{ Φ }}.
Proof.
rewrite /heap_ctx /heap_inv /heap_mapsto=> ?? Hctx HP.
transitivity (|={E}=> auth_own heap_name P)%I.
trans (|={E}=> auth_own heap_name P)%I.
{ by rewrite -pvs_frame_r -(auth_empty _ E) left_id. }
apply wp_strip_pvs, (auth_fsa heap_inv (wp_fsa (Alloc e)))
with N heap_name ; simpl; eauto with I.
......
......@@ -13,19 +13,19 @@ Ltac wp_strip_later :=
| |- _ _ => apply later_intro
| |- _ _ => reflexivity
end
in revert_intros ltac:(etransitivity; [|go]).
in revert_intros ltac:(etrans; [|go]).
Ltac wp_bind K :=
lazymatch eval hnf in K with
| [] => idtac
| _ => etransitivity; [|solve [ apply (wp_bind K) ]]; simpl
| _ => etrans; [|solve [ apply (wp_bind K) ]]; simpl
end.
Ltac wp_finish :=
let rec go :=
match goal with
| |- _ _ => etransitivity; [|apply later_mono; go; reflexivity]
| |- _ _ => etrans; [|apply later_mono; go; reflexivity]
| |- _ wp _ _ _ =>
etransitivity; [|eapply wp_value_pvs; reflexivity];
etrans; [|eapply wp_value_pvs; reflexivity];
(* sometimes, we will have to do a final view shift, so only apply
wp_value if we obtain a consecutive wp *)
try (eapply pvs_intro;
......@@ -38,7 +38,7 @@ Tactic Notation "wp_rec" ">" :=
| |- _ wp ?E ?e ?Q => reshape_expr e ltac:(fun K e' =>
match eval cbv in e' with
| App (Rec _ _ _) _ =>
wp_bind K; etransitivity; [|eapply wp_rec; reflexivity]; wp_finish
wp_bind K; etrans; [|eapply wp_rec; reflexivity]; wp_finish
end)
end.
Tactic Notation "wp_rec" := wp_rec>; wp_strip_later.
......@@ -48,7 +48,7 @@ Tactic Notation "wp_lam" ">" :=
| |- _ wp ?E ?e ?Q => reshape_expr e ltac:(fun K e' =>
match eval cbv in e' with
| App (Rec "" _ _) _ =>
wp_bind K; etransitivity; [|eapply wp_lam; reflexivity]; wp_finish
wp_bind K; etrans; [|eapply wp_lam; reflexivity]; wp_finish
end)
end.
Tactic Notation "wp_lam" := wp_lam>; wp_strip_later.
......@@ -66,9 +66,9 @@ Tactic Notation "wp_op" ">" :=
| BinOp LeOp _ _ => wp_bind K; apply wp_le; wp_finish
| BinOp EqOp _ _ => wp_bind K; apply wp_eq; wp_finish
| BinOp _ _ _ =>
wp_bind K; etransitivity; [|eapply wp_bin_op; reflexivity]; wp_finish
wp_bind K; etrans; [|eapply wp_bin_op; reflexivity]; wp_finish
| UnOp _ _ =>
wp_bind K; etransitivity; [|eapply wp_un_op; reflexivity]; wp_finish
wp_bind K; etrans; [|eapply wp_un_op; reflexivity]; wp_finish
end)
end.
Tactic Notation "wp_op" := wp_op>; wp_strip_later.
......@@ -79,7 +79,7 @@ Tactic Notation "wp_if" ">" :=
match eval cbv in e' with
| If _ _ _ =>
wp_bind K;
etransitivity; [|apply wp_if_true || apply wp_if_false]; wp_finish
etrans; [|apply wp_if_true || apply wp_if_false]; wp_finish
end)
end.
Tactic Notation "wp_if" := wp_if>; wp_strip_later.
......@@ -97,5 +97,5 @@ Tactic Notation "wp" ">" tactic(tac) :=
Tactic Notation "wp" tactic(tac) := (wp> tac); wp_strip_later.
(* In case the precondition does not match *)
Tactic Notation "ewp" tactic(tac) := wp (etransitivity; [|tac]).
Tactic Notation "ewp" ">" tactic(tac) := wp> (etransitivity; [|tac]).
Tactic Notation "ewp" tactic(tac) := wp (etrans; [|tac]).
Tactic Notation "ewp" ">" tactic(tac) := wp> (etrans; [|tac]).
......@@ -60,7 +60,7 @@ Lemma dom_insert_subseteq {A} (m : M A) i x : dom D m ⊆ dom D (<[i:=x]>m).
Proof. rewrite (dom_insert _). set_solver. Qed.
Lemma dom_insert_subseteq_compat_l {A} (m : M A) i x X :
X dom D m X dom D (<[i:=x]>m).
Proof. intros. transitivity (dom D m); eauto using dom_insert_subseteq. Qed.
Proof. intros. trans (dom D m); eauto using dom_insert_subseteq. Qed.
Lemma dom_singleton {A} (i : K) (x : A) : dom D {[i := x]} {[ i ]}.
Proof. rewrite <-insert_empty, dom_insert, dom_empty; set_solver. Qed.
Lemma dom_delete {A} (m : M A) i : dom D (delete i m) dom D m {[ i ]}.
......
......@@ -123,7 +123,7 @@ Section setoid.
split.
- by intros m i.
- by intros m1 m2 ? i.
- by intros m1 m2 m3 ?? i; transitivity (m2 !! i).
- by intros m1 m2 m3 ?? i; trans (m2 !! i).
Qed.
Global Instance lookup_proper (i : K) :
Proper (() ==> ()) (lookup (M:=M A) i).
......@@ -199,7 +199,7 @@ Proof.
split; [intros m i; by destruct (m !! i); simpl|].
intros m1 m2 m3 Hm12 Hm23 i; specialize (Hm12 i); specialize (Hm23 i).
destruct (m1 !! i), (m2 !! i), (m3 !! i); simplify_eq/=;
done || etransitivity; eauto.
done || etrans; eauto.
Qed.
Global Instance: PartialOrder (() : relation (M A)).
Proof.
......@@ -1182,10 +1182,10 @@ Proof.
intros. rewrite map_union_comm by done. by apply map_union_subseteq_l.
Qed.
Lemma map_union_subseteq_l_alt {A} (m1 m2 m3 : M A) : m1 m2 m1 m2 m3.
Proof. intros. transitivity m2; auto using map_union_subseteq_l. Qed.
Proof. intros. trans m2; auto using map_union_subseteq_l. Qed.
Lemma map_union_subseteq_r_alt {A} (m1 m2 m3 : M A) :
m2 ⊥ₘ m3 m1 m3 m1 m2 m3.
Proof. intros. transitivity m3; auto using map_union_subseteq_r. Qed.
Proof. intros. trans m3; auto using map_union_subseteq_r. Qed.
Lemma map_union_preserving_l {A} (m1 m2 m3 : M A) : m1 m2 m3 m1 m3 m2.
Proof.
rewrite !map_subseteq_spec. intros ???.
......
......@@ -42,7 +42,7 @@ Lemma prod_lexico_transitive `{Lexico A, Lexico B, !Transitive (@lexico A _)}
Proof.
intros Hx12 Hx23 ?; revert Hx12 Hx23. unfold lexico, prod_lexico.
intros [|[??]] [?|[??]]; simplify_eq/=; auto.
by left; transitivity x2.
by left; trans x2.
Qed.
Instance prod_lexico_po `{Lexico A, Lexico B, !StrictOrder (@lexico A _)}
......@@ -52,7 +52,7 @@ Proof.
- intros [x y]. apply prod_lexico_irreflexive.
by apply (irreflexivity lexico y).
- intros [??] [??] [??] ??.
eapply prod_lexico_transitive; eauto. apply transitivity.
eapply prod_lexico_transitive; eauto. apply trans.
Qed.
Instance prod_lexico_trichotomyT `{Lexico A, tA : !TrichotomyT (@lexico A _)}
`{Lexico B, tB : !TrichotomyT (@lexico B _)}: TrichotomyT (@lexico (A * B) _).
......@@ -143,7 +143,7 @@ Instance sig_lexico_po `{Lexico A, !StrictOrder (@lexico A _)}
Proof.
unfold lexico, sig_lexico. split.
- intros [x ?] ?. by apply (irreflexivity lexico x).
- intros [x1 ?] [x2 ?] [x3 ?] ??. by transitivity x2.
- intros [x1 ?] [x2 ?] [x3 ?] ??. by trans x2.
Qed.
Instance sig_lexico_trichotomy `{Lexico A, tA : !TrichotomyT (@lexico A _)}
(P : A Prop) `{ x, ProofIrrel (P x)} : TrichotomyT (@lexico (sig P) _).
......
......@@ -371,7 +371,7 @@ Section setoid.
- intros l; induction l; constructor; auto.
- induction 1; constructor; auto.
- intros l1 l2 l3 Hl; revert l3.
induction Hl; inversion_clear 1; constructor; try etransitivity; eauto.
induction Hl; inversion_clear 1; constructor; try etrans; eauto.
Qed.
Global Instance cons_proper : Proper (() ==> () ==> ()) (@cons A).
Proof. by constructor. Qed.
......@@ -1719,7 +1719,7 @@ Proof. revert i. by induction l; intros [|?]; simpl; constructor. Qed.
Lemma sublist_foldr_delete l is : foldr delete l is `sublist` l.
Proof.
induction is as [|i is IH]; simpl; [done |].
transitivity (foldr delete l is); auto using sublist_delete.
trans (foldr delete l is); auto using sublist_delete.
Qed.
Lemma sublist_alt l1 l2 : l1 `sublist` l2 is, l1 = foldr delete l2 is.
Proof.
......@@ -1749,7 +1749,7 @@ Proof.
+ by rewrite !Permutation_middle, Permutation_swap.
- intros l3 ?. destruct (IH2 l3) as (l3'&?&?); trivial.
destruct (IH1 l3') as (l3'' &?&?); trivial. exists l3''.
split. done. etransitivity; eauto.
split. done. etrans; eauto.
Qed.
Lemma sublist_Permutation l1 l2 l3 :
l1 `sublist` l2 l2 ≡ₚ l3 l4, l1 ≡ₚ l4 l4 `sublist` l3.
......@@ -1770,7 +1770,7 @@ Proof.
+ exists (x :: y :: l1''). by repeat constructor.
- intros l1 ?. destruct (IH1 l1) as (l3'&?&?); trivial.
destruct (IH2 l3') as (l3'' &?&?); trivial. exists l3''.
split; [|done]. etransitivity; eauto.
split; [|done]. etrans; eauto.
Qed.
(** Properties of the [contains] predicate *)
......@@ -1816,10 +1816,10 @@ Proof. intro. apply contains_Permutation_length_le. lia. Qed.
Global Instance: Proper ((≡ₚ) ==> (≡ₚ) ==> iff) (@contains A).
Proof.
intros l1 l2 ? k1 k2 ?. split; intros.
- transitivity l1. by apply Permutation_contains.
transitivity k1. done. by apply Permutation_contains.
- transitivity l2. by apply Permutation_contains.
transitivity k2. done. by apply Permutation_contains.
- trans l1. by apply Permutation_contains.
trans k1. done. by apply Permutation_contains.
- trans l2. by apply Permutation_contains.
trans k2. done. by apply Permutation_contains.
Qed.
Global Instance: AntiSymm (≡ₚ) (@contains A).
Proof. red. auto using contains_Permutation_length_le, contains_length. Qed.
......@@ -1842,9 +1842,9 @@ Proof.
- intros x l1 l3 ? (l2&?&?). exists (x :: l2). by repeat constructor.
- intros l1 l3 l5 ? (l2&?&?) ? (l4&?&?).
destruct (Permutation_sublist l2 l3 l4) as (l3'&?&?); trivial.
exists l3'. split; etransitivity; eauto. }
exists l3'. split; etrans; eauto. }
intros (l2&?&?).
transitivity l2; auto using sublist_contains, Permutation_contains.
trans l2; auto using sublist_contains, Permutation_contains.
Qed.
Lemma contains_sublist_r l1 l3 :
l1 `contains` l3 l2, l1 ≡ₚ l2 l2 `sublist` l3.
......@@ -1863,7 +1863,7 @@ Proof. rewrite !(comm (++) _ k). apply contains_skips_l. Qed.
Lemma contains_app l1 l2 k1 k2 :
l1 `contains` l2 k1 `contains` k2 l1 ++ k1 `contains` l2 ++ k2.
Proof.
transitivity (l1 ++ k2); auto using contains_skips_l, contains_skips_r.
trans (l1 ++ k2); auto using contains_skips_l, contains_skips_r.
Qed.
Lemma contains_cons_r x l k :
l `contains` x :: k l `contains` k l', l ≡ₚ x :: l' l' `contains` k.
......@@ -1975,7 +1975,7 @@ Section contains_dec.
- simplify_option_eq; eauto using Permutation_swap.
- destruct (IH1 k1) as (k2&?&?); trivial.
destruct (IH2 k2) as (k3&?&?); trivial.
exists k3. split; eauto. by transitivity k2.
exists k3. split; eauto. by trans k2.
Qed.
Lemma list_remove_Some l k x : list_remove x l = Some k l ≡ₚ x :: k.
Proof.
......@@ -2493,7 +2493,7 @@ Section Forall2_order.
Global Instance: Symmetric R Symmetric (Forall2 R).
Proof. intros. induction 1; constructor; auto. Qed.
Global Instance: Transitive R Transitive (Forall2 R).
Proof. intros ????. apply Forall2_transitive. by apply @transitivity. Qed.
Proof. intros ????. apply Forall2_transitive. by apply @trans. Qed.
Global Instance: Equivalence R Equivalence (Forall2 R).
Proof. split; apply _. Qed.
Global Instance: PreOrder R PreOrder (Forall2 R).
......@@ -2768,14 +2768,14 @@ Section bind.
- by apply contains_app.
- by rewrite !(assoc_L (++)), (comm (++) (f _)).
- by apply contains_inserts_l.
- etransitivity; eauto.
- etrans; eauto.
Qed.
Global Instance bind_Permutation: Proper ((≡ₚ) ==> (≡ₚ)) (mbind f).
Proof.
induction 1; csimpl; auto.
- by f_equiv.
- by rewrite !(assoc_L (++)), (comm (++) (f _)).
- etransitivity; eauto.
- etrans; eauto.
Qed.
Lemma bind_cons x l : (x :: l) = f = f x ++ l = f.
Proof. done. Qed.
......@@ -2998,7 +2998,7 @@ Lemma foldr_permutation {A B} (R : relation B) `{!Equivalence R}
(f : A B B) (b : B) `{!Proper ((=) ==> R ==> R) f}
(Hf : a1 a2 b, R (f a1 (f a2 b)) (f a2 (f a1 b))) :
Proper ((≡ₚ) ==> R) (foldr f b).
Proof. induction 1; simpl; [done|by f_equiv|apply Hf|etransitivity; eauto]. Qed.
Proof. induction 1; simpl; [done|by f_equiv|apply Hf|etrans; eauto]. Qed.
(** ** Properties of the [zip_with] and [zip] functions *)
Section zip_with.
......
......@@ -243,7 +243,7 @@ Proof.
intros [??] ?.
destruct (decide (y = 1)); subst; [rewrite Z.quot_1_r; auto |].
destruct (decide (x = 0)); subst; [rewrite Z.quot_0_l; auto with lia |].
split. apply Z.quot_pos; lia. transitivity x; auto. apply Z.quot_lt; lia.
split. apply Z.quot_pos; lia. trans x; auto. apply Z.quot_lt; lia.
Qed.
(* Note that we cannot disable simpl for [Z.of_nat] as that would break
......@@ -396,7 +396,7 @@ Lemma Qcplus_pos_pos (x y : Qc) : 0 < x → 0 < y → 0 < x + y.
Proof. auto using Qcplus_pos_nonneg, Qclt_le_weak. Qed.
Lemma Qcplus_nonneg_nonneg (x y : Qc) : 0 x 0 y 0 x + y.
Proof.
intros. transitivity (x + 0); [by rewrite Qcplus_0_r|].
intros. trans (x + 0); [by rewrite Qcplus_0_r|].
by apply Qcplus_le_mono_l.
Qed.
Lemma Qcplus_neg_nonpos (x y : Qc) : x < 0 y 0 x + y < 0.
......@@ -410,7 +410,7 @@ Lemma Qcplus_neg_neg (x y : Qc) : x < 0 → y < 0 → x + y < 0.
Proof. auto using Qcplus_nonpos_neg, Qclt_le_weak. Qed.
Lemma Qcplus_nonpos_nonpos (x y : Qc) : x 0 y 0 x + y 0.
Proof.
intros. transitivity (x + 0); [|by rewrite Qcplus_0_r].
intros. trans (x + 0); [|by rewrite Qcplus_0_r].
by apply Qcplus_le_mono_l.
Qed.
Lemma Qcmult_le_mono_nonneg_l x y z : 0 z x y z * x z * y.
......@@ -436,7 +436,7 @@ Proof.
Qed.
Lemma Qcmult_nonneg_nonneg x y : 0 x 0 y 0 x * y.
Proof.
intros. transitivity (0 * y); [by rewrite Qcmult_0_l|].
intros. trans (0 * y); [by rewrite Qcmult_0_l|].
by apply Qcmult_le_mono_nonneg_r.
Qed.
......
......@@ -96,7 +96,7 @@ Section setoids.
split.
- by intros []; constructor.
- by destruct 1; constructor.
- destruct 1; inversion 1; constructor; etransitivity; eauto.
- destruct 1; inversion 1; constructor; etrans; eauto.
Qed.
Global Instance Some_proper : Proper (() ==> ()) (@Some A).
Proof. by constructor. Qed.
......
......@@ -29,13 +29,13 @@ Section orders.
Proof. by intros [??] <-. Qed.
Lemma strict_transitive_l `{!Transitive R} X Y Z : X Y Y Z X Z.
Proof.
intros [? HXY] ?. split; [by transitivity Y|].
contradict HXY. by transitivity Z.
intros [? HXY] ?. split; [by trans Y|].
contradict HXY. by trans Z.
Qed.
Lemma strict_transitive_r `{!Transitive R} X Y Z : X Y Y Z X Z.
Proof.
intros ? [? HYZ]. split; [by transitivity Y|].
contradict HYZ. by transitivity X.
intros ? [? HYZ]. split; [by trans