From 297fa447d9e88433fb5f3a223d8a91f50595b641 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Wed, 13 Jul 2022 15:40:01 +0200
Subject: [PATCH] Fix some very long lines.

---
 iris/bi/lib/fixpoint.v | 111 ++++++++++++++++++++++-------------------
 1 file changed, 59 insertions(+), 52 deletions(-)

diff --git a/iris/bi/lib/fixpoint.v b/iris/bi/lib/fixpoint.v
index fc701ea42..7fc0a394a 100644
--- a/iris/bi/lib/fixpoint.v
+++ b/iris/bi/lib/fixpoint.v
@@ -74,7 +74,8 @@ Section least.
   Qed.
 End least.
 
-Lemma least_fixpoint_strong_mono {PROP : bi} {A : ofe} (F : (A → PROP) → (A → PROP)) `{!BiMonoPred F}
+Lemma least_fixpoint_strong_mono
+    {PROP : bi} {A : ofe} (F : (A → PROP) → (A → PROP)) `{!BiMonoPred F}
     (G : (A → PROP) → (A → PROP)) `{!BiMonoPred G} :
   □ (∀ Φ x, F Φ x -∗ G Φ x) -∗
   ∀ x, bi_least_fixpoint F x -∗ bi_least_fixpoint G x.
@@ -84,23 +85,26 @@ Proof.
   by iApply "Hmon".
 Qed.
 
-(**
-  In addition to [least_fixpoint_iter], we provide two derived, stronger induction principles.
-  - [least_fixpoint_ind] allows to assume [F (λ x, Φ x ∧ bi_least_fixpoint F x) y] when proving
-    the inductive step.
-    Intuitively, it does not only offer the induction hypothesis ([Φ] under an application of [F]),
-    but also the induction predicate [bi_least_fixpoint F] itself (under an application of [F]).
-  - [least_fixpoint_ind_wf] intuitively corresponds to a kind of well-founded induction.
-    It provides the hypothesis [F (bi_least_fixpoint (λ Ψ a, Φ a ∧ F Ψ a)) y] and thus allows
-    to assume the induction hypothesis not just below one application of [F], but below any
-    positive number (by unfolding the least fixpoint).
-    The unfolding lemma [least_fixpoint_unfold] as well as [least_fixpoint_strong_mono] can be useful
-    to work with the hypothesis.
- *)
+(** In addition to [least_fixpoint_iter], we provide two derived, stronger
+induction principles:
+
+- [least_fixpoint_ind] allows to assume [F (λ x, Φ x ∧ bi_least_fixpoint F x) y]
+  when proving the inductive step.
+  Intuitively, it does not only offer the induction hypothesis ([Φ] under an
+  application of [F]), but also the induction predicate [bi_least_fixpoint F]
+  itself (under an application of [F]).
+- [least_fixpoint_ind_wf] intuitively corresponds to a kind of well-founded
+  induction. It provides the hypothesis [F (bi_least_fixpoint (λ Ψ a, Φ a ∧ F Ψ a)) y]
+  and thus allows to assume the induction hypothesis not just below one
+  application of [F], but below any positive number (by unfolding the least
+  fixpoint). The unfolding lemma [least_fixpoint_unfold] as well as
+  [least_fixpoint_strong_mono] can be useful to work with the hypothesis. *)
+
 Section least_ind.
   Context {PROP : bi} {A : ofe} (F : (A → PROP) → (A → PROP)) `{!BiMonoPred F}.
 
-  Let wf_pred_mono `{!NonExpansive Φ} : BiMonoPred (λ (Ψ : A → PROP) (a : A), Φ a ∧ F Ψ a)%I.
+  Let wf_pred_mono `{!NonExpansive Φ} :
+    BiMonoPred (λ (Ψ : A → PROP) (a : A), Φ a ∧ F Ψ a)%I.
   Proof using Type*.
     split; last solve_proper.
     intros Ψ Ψ' Hne Hne'. iIntros "#Mon" (x) "Ha". iSplit; first by iDestruct "Ha" as "[$ _]".
@@ -190,7 +194,8 @@ Section greatest.
   Proof. iIntros "#HΦ" (x) "Hx". iExists (OfeMor Φ). auto. Qed.
 End greatest.
 
-Lemma greatest_fixpoint_strong_mono {PROP : bi} {A : ofe} (F : (A → PROP) → (A → PROP)) `{!BiMonoPred F}
+Lemma greatest_fixpoint_strong_mono {PROP : bi} {A : ofe}
+  (F : (A → PROP) → (A → PROP)) `{!BiMonoPred F}
   (G : (A → PROP) → (A → PROP)) `{!BiMonoPred G} :
   □ (∀ Φ x, F Φ x -∗ G Φ x) -∗
   ∀ x, bi_greatest_fixpoint F x -∗ bi_greatest_fixpoint G x.
@@ -200,42 +205,44 @@ Proof using Type*.
   by iApply "Hmon".
 Qed.
 
-(**
-  In addition to [greatest_fixpoint_coiter], we provide two derived, stronger coinduction principles.
-  - [greatest_fixpoint_coind] requires to prove [F (λ x, Φ x ∨ bi_greatest_fixpoint F x) y]
-    in the coinductive step instead of [F Φ y] and thus instead allows to prove the original
-    fixpoint again, after taking one step.
-  - [greatest_fixpoint_paco] allows for so-called parameterized coinduction, a stronger coinduction
-    principle, where [F (bi_greatest_fixpoint (λ Ψ a, Φ a ∨ F Ψ a)) y] needs to be established in
-    the coinductive step. It allows to prove the hypothesis [Φ] not just after one step,
-    but after any positive number of unfoldings of the greatest fixpoint.
-    This encodes a way of accumulating "knowledge" in the coinduction hypothesis:
-      if you return to the "initial point" [Φ] of the coinduction after some number of
-      unfoldings (not just one), the proof is done.
-    (interestingly, this is the dual to [least_fixpoint_ind_wf]).
-    The unfolding lemma [greatest_fixpoint_unfold] and [greatest_fixpoint_strong_mono] may be useful
-    when using this lemma.
-
-    Example use case:
-      Suppose that [F] defines a coinductive simulation relation, e.g.,
-        [F rec '(e_t, e_s) :=
-          (is_val e_s ∧ is_val e_t ∧ post e_t e_s) ∨
-          (safe e_t ∧ ∀ e_t', step e_t e_t' → ∃ e_s', step e_s e_s' ∧ rec e_t' e_s')],
-      and [sim e_t e_s := bi_greatest_fixpoint F].
-      Suppose you want to show a simulation of two loops,
-        [sim (while ...) (while ...)],
-      i.e. [Φ '(e_t, e_s) := e_t = while ... ∧ e_s = while ...].
-      Then the standard coinduction principle [greatest_fixpoint_iter]
-      requires to establish the coinduction hypothesis [Φ] after precisely
-      one unfolding of [sim], which is clearly not strong enough if the
-      loop takes multiple steps of computation per iteration.
-      But [greatest_fixpoint_paco] allows to establish a fixpoint to which [Φ] has
-      been added as a disjunct.
-      This fixpoint can be unfolded arbitrarily many times, allowing to establish the
-      coinduction hypothesis after any number of steps.
-      This enables to take multiple simulation steps, before closing the coinduction
-      by establishing the hypothesis [Φ] again.
- *)
+(** In addition to [greatest_fixpoint_coiter], we provide two derived, stronger
+coinduction principles:
+
+- [greatest_fixpoint_coind] requires to prove
+  [F (λ x, Φ x ∨ bi_greatest_fixpoint F x) y] in the coinductive step instead of
+  [F Φ y] and thus instead allows to prove the original fixpoint again, after
+  taking one step.
+- [greatest_fixpoint_paco] allows for so-called parameterized coinduction, a
+  stronger coinduction principle, where [F (bi_greatest_fixpoint (λ Ψ a, Φ a ∨ F Ψ a)) y]
+  needs to be established in the coinductive step. It allows to prove the
+  hypothesis [Φ] not just after one step, but after any positive number of
+  unfoldings of the greatest fixpoint. This encodes a way of accumulating
+  "knowledge" in the coinduction hypothesis: if you return to the "initial
+  point" [Φ] of the coinduction after some number of unfoldings (not just one),
+  the proof is done. (Interestingly, this is the dual to [least_fixpoint_ind_wf]).
+  The unfolding lemma [greatest_fixpoint_unfold] and
+  [greatest_fixpoint_strong_mono] may be useful when using this lemma.
+
+*Example use case:*
+
+Suppose that [F] defines a coinductive simulation relation, e.g.,
+  [F rec '(e_t, e_s) :=
+    (is_val e_s ∧ is_val e_t ∧ post e_t e_s) ∨
+    (safe e_t ∧ ∀ e_t', step e_t e_t' → ∃ e_s', step e_s e_s' ∧ rec e_t' e_s')],
+and [sim e_t e_s := bi_greatest_fixpoint F].
+Suppose you want to show a simulation of two loops,
+  [sim (while ...) (while ...)],
+i.e., [Φ '(e_t, e_s) := e_t = while ... ∧ e_s = while ...].
+Then the standard coinduction principle [greatest_fixpoint_iter] requires to
+establish the coinduction hypothesis [Φ] after precisely one unfolding of [sim],
+which is clearly not strong enough if the loop takes multiple steps of
+computation per iteration. But [greatest_fixpoint_paco] allows to establish a
+fixpoint to which [Φ] has been added as a disjunct. This fixpoint can be
+unfolded arbitrarily many times, allowing to establish the coinduction
+hypothesis after any number of steps. This enables to take multiple simulation
+steps, before closing the coinduction by establishing the hypothesis [Φ]
+again. *)
+
 Section greatest_coind.
   Context {PROP : bi} {A : ofe} (F : (A → PROP) → (A → PROP)) `{!BiMonoPred F}.
 
-- 
GitLab