diff --git a/lifetime/lifetime_sig.v b/lifetime/lifetime_sig.v index 241b2b4b47dc6a5f447bdbe3da7c45c7b9497d61..343976ac4db6b629d94058063c87b04531e2c3b7 100644 --- a/lifetime/lifetime_sig.v +++ b/lifetime/lifetime_sig.v @@ -122,7 +122,7 @@ Module Type lifetime_sig. such that [m ⊓ κ'] is syntactically different from [κ]. This is useful in conjunction with [lft_create_strong] to generate fresh lifetimes when using lifetimes as keys to index into a map. *) - Parameter lft_fresh_strong : ∀ κ κ', ∃ i : positive, + Parameter lft_fresh : ∀ κ κ', ∃ i : positive, ∀ m : positive, (i < m)%positive → (positive_to_lft m) ⊓ κ' ≠ κ. Parameter bor_create : ∀ E κ P, diff --git a/lifetime/model/creation.v b/lifetime/model/creation.v index 46c32bbd31dfe06d86d093d29cc810ad4086cd32..5eccf4b91c20aa0209be8ec7fa1e5058fe9751ee 100644 --- a/lifetime/model/creation.v +++ b/lifetime/model/creation.v @@ -185,21 +185,11 @@ Proof. + iRight. iFrame. iPureIntro. by apply lft_dead_in_insert_false. Qed. -(* TODO: remove once stdpp!562 is merged *) -Lemma lower_bound_exists `{FinSet A C} R `{!Transitive R, - ∀ x y, Decision (R x y)} `{!Inhabited A} (X : C) : - ∃ x, minimal R x X. -Proof. - destruct (set_choose_or_empty X) as [ (y & Ha) | Hne]. - - edestruct (minimal_exists R X) as (x & Hel & Hmin); first set_solver. - exists x. done. - - exists inhabitant. intros y Hel. set_solver. -Qed. -Lemma lft_fresh_strong κ κ' : +Lemma lft_fresh κ κ' : ∃ i : positive, ∀ m : positive, (i < m)%positive → (positive_to_lft m) ⊓ κ' ≠ κ. Proof. unfold meet, lft_intersect. - destruct (lower_bound_exists (flip Pos.le) (dom κ)) as (i & Ha). + destruct (minimal_exists (flip Pos.le) (dom κ)) as (i & Ha). exists (i + 1)%positive. intros k Hik Heq. subst κ. ospecialize (Ha k _ _); simpl in *; [ | lia..].