From 5c7bdf2d1eb7889c57e7f1e0abbe15bb970baeae Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Wed, 16 Jun 2021 00:19:40 +0200
Subject: [PATCH] Add lemmas `rtc_nsteps_{1,2}` and `rtc_bsteps_{1,2}`.

---
 theories/relations.v | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/theories/relations.v b/theories/relations.v
index afaf780c..24ecd2e2 100644
--- a/theories/relations.v
+++ b/theories/relations.v
@@ -169,9 +169,6 @@ Section general.
     (∀ x y, R x y → R' (f x) (f y)) → nsteps R n x y → nsteps R' n (f x) (f y).
   Proof. induction 2; econstructor; eauto. Qed.
 
-  Lemma nsteps_rtc n x y : nsteps R n x y → rtc R x y.
-  Proof. induction 1; eauto. Qed.
-
   (** ** Results about [bsteps] *)
   Lemma bsteps_once n x y : R x y → bsteps R (S n) x y.
   Proof. eauto. Qed.
@@ -214,9 +211,6 @@ Section general.
     (∀ x y, R x y → R' (f x) (f y)) → bsteps R n x y → bsteps R' n (f x) (f y).
   Proof. induction 2; econstructor; eauto. Qed.
 
-  Lemma bsteps_rtc n x y : bsteps R n x y → rtc R x y.
-  Proof. induction 1; eauto. Qed.
-
   (** ** Results about the transitive closure [tc] *)
   Lemma tc_transitive x y z : tc R x y → tc R y z → tc R x z.
   Proof. induction 1; eauto. Qed.
@@ -271,18 +265,27 @@ Section general.
 
   Lemma rtc_tc x y : rtc R x y ↔ x = y ∨ tc R x y.
   Proof.
-    split.
-    - induction 1; naive_solver.
-    - naive_solver eauto using tc_rtc.
+    split; [|naive_solver eauto using tc_rtc].
+    induction 1; naive_solver.
   Qed.
+
   Lemma rtc_nsteps x y : rtc R x y ↔ ∃ n, nsteps R n x y.
   Proof.
     split.
-    - induction 1; [exists 0; constructor|]. naive_solver.
-    - intros [n Hstep]. induction Hstep; eauto.
+    - induction 1; naive_solver.
+    - intros [n Hsteps]. induction Hsteps; naive_solver.
   Qed.
+  Lemma rtc_nsteps_1 x y : rtc R x y → ∃ n, nsteps R n x y.
+  Proof. rewrite rtc_nsteps. naive_solver. Qed.
+  Lemma rtc_nsteps_2 n x y : nsteps R n x y → rtc R x y.
+  Proof. rewrite rtc_nsteps. naive_solver. Qed.
+
   Lemma rtc_bsteps x y : rtc R x y ↔ ∃ n, bsteps R n x y.
   Proof. rewrite rtc_nsteps. setoid_rewrite bsteps_nsteps. naive_solver. Qed.
+  Lemma rtc_bsteps_1 x y : rtc R x y → ∃ n, bsteps R n x y.
+  Proof. rewrite rtc_bsteps. naive_solver. Qed.
+  Lemma rtc_bsteps_2 n x y : bsteps R n x y → rtc R x y.
+  Proof. rewrite rtc_bsteps. naive_solver. Qed.
 
   Lemma nsteps_list n x y :
     nsteps R n x y ↔ ∃ l,
-- 
GitLab