Commit f351a117 authored by Ralf Jung's avatar Ralf Jung
Browse files

Merge branch 'master' of https://gitlab.mpi-sws.org/FP/iris-coq

parents b4edc070 76fb6fa5
...@@ -251,7 +251,6 @@ _specification patterns_ to express splitting of hypotheses: ...@@ -251,7 +251,6 @@ _specification patterns_ to express splitting of hypotheses:
`P`, as well the remaining goal. `P`, as well the remaining goal.
- `[%]` : This pattern can be used when eliminating `P -★ Q` when `P` is pure. - `[%]` : This pattern can be used when eliminating `P -★ Q` when `P` is pure.
It will generate a Coq goal for `P` and does not consume any hypotheses. It will generate a Coq goal for `P` and does not consume any hypotheses.
- `*` : instantiate all top-level universal quantifiers with meta variables.
For example, given: For example, given:
......
...@@ -1030,28 +1030,25 @@ End limit_preserving. ...@@ -1030,28 +1030,25 @@ End limit_preserving.
Section sigma. Section sigma.
Context {A : ofeT} {P : A Prop}. Context {A : ofeT} {P : A Prop}.
Implicit Types x : sig P.
(* TODO: Find a better place for this Equiv instance. It also (* TODO: Find a better place for this Equiv instance. It also
should not depend on A being an OFE. *) should not depend on A being an OFE. *)
Instance sig_equiv : Equiv (sig P) := Instance sig_equiv : Equiv (sig P) := λ x1 x2, `x1 `x2.
λ x1 x2, (proj1_sig x1) (proj1_sig x2). Instance sig_dist : Dist (sig P) := λ n x1 x2, `x1 {n} `x2.
Instance sig_dist : Dist (sig P) := Lemma exist_ne n a1 a2 (H1 : P a1) (H2 : P a2) :
λ n x1 x2, (proj1_sig x1) {n} (proj1_sig x2). a1 {n} a2 a1 H1 {n} a2 H2.
Lemma exist_ne : Proof. done. Qed.
n x1 x2, x1 {n} x2
(H1 : P x1) (H2 : P x2), (exist P x1 H1) {n} (exist P x2 H2).
Proof. intros n ?? Hx ??. exact Hx. Qed.
Global Instance proj1_sig_ne : Proper (dist n ==> dist n) (@proj1_sig _ P). Global Instance proj1_sig_ne : Proper (dist n ==> dist n) (@proj1_sig _ P).
Proof. intros n [] [] ?. done. Qed. Proof. by intros n [a Ha] [b Hb] ?. Qed.
Definition sig_ofe_mixin : OfeMixin (sig P). Definition sig_ofe_mixin : OfeMixin (sig P).
Proof. Proof.
split. split.
- intros x y. unfold dist, sig_dist, equiv, sig_equiv. - intros [a ?] [b ?]. rewrite /dist /sig_dist /equiv /sig_equiv /=.
destruct x, y. apply equiv_dist. apply equiv_dist.
- unfold dist, sig_dist. intros n. - intros n. rewrite /dist /sig_dist.
split; [intros [] | intros [] [] | intros [] [] []]; simpl; try done. split; [intros []| intros [] []| intros [] [] []]=> //= -> //.
intros. by etrans. - intros n [a ?] [b ?]. rewrite /dist /sig_dist /=. apply dist_S.
- intros n [??] [??]. unfold dist, sig_dist. simpl. apply dist_S.
Qed. Qed.
Canonical Structure sigC : ofeT := OfeT (sig P) sig_ofe_mixin. Canonical Structure sigC : ofeT := OfeT (sig P) sig_ofe_mixin.
...@@ -1059,13 +1056,11 @@ Section sigma. ...@@ -1059,13 +1056,11 @@ Section sigma.
suddenly becomes explicit...? *) suddenly becomes explicit...? *)
Program Definition sig_compl `{LimitPreserving _ P} : Compl sigC := Program Definition sig_compl `{LimitPreserving _ P} : Compl sigC :=
λ c, exist P (compl (chain_map proj1_sig c)) _. λ c, exist P (compl (chain_map proj1_sig c)) _.
Next Obligation. Next Obligation. intros ? Hlim c. apply Hlim=> n /=. by destruct (c n). Qed.
intros ? Hlim c. apply Hlim. move=>n /=. destruct (c n). done. Program Definition sig_cofe `{Cofe A, !LimitPreserving P} : Cofe sigC :=
Qed.
Program Definition sig_cofe `{LimitPreserving _ P} : Cofe sigC :=
{| compl := sig_compl |}. {| compl := sig_compl |}.
Next Obligation. Next Obligation.
intros ? Hlim n c. apply (conv_compl n (chain_map proj1_sig c)). intros ?? n c. apply (conv_compl n (chain_map proj1_sig c)).
Qed. Qed.
Global Instance sig_timeless (x : sig P) : Global Instance sig_timeless (x : sig P) :
......
...@@ -33,7 +33,7 @@ Proof. ...@@ -33,7 +33,7 @@ Proof.
iIntros (l) "Hl". wp_let. wp_proj. wp_bind (f2 _). iIntros (l) "Hl". wp_let. wp_proj. wp_bind (f2 _).
iApply (wp_wand with "Hf2"); iIntros (v) "H2". wp_let. iApply (wp_wand with "Hf2"); iIntros (v) "H2". wp_let.
wp_apply (join_spec with "[$Hl]"). iIntros (w) "H1". wp_apply (join_spec with "[$Hl]"). iIntros (w) "H1".
iSpecialize ("HΦ" with "* [-]"); first by iSplitL "H1". by wp_let. iSpecialize ("HΦ" with "[-]"); first by iSplitL "H1". by wp_let.
Qed. Qed.
Lemma wp_par (Ψ1 Ψ2 : val iProp Σ) Lemma wp_par (Ψ1 Ψ2 : val iProp Σ)
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file collects type class interfaces, notations, and general theorems (** This file collects type class interfaces, notations, and general theorems
that are used throughout the whole development. Most importantly it contains that are used throughout the whole development. Most importantly it contains
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file implements bsets as functions into Prop. *) (** This file implements bsets as functions into Prop. *)
From iris.prelude Require Export prelude. From iris.prelude Require Export prelude.
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This files implements the type [coPset] of efficient finite/cofinite sets (** This files implements the type [coPset] of efficient finite/cofinite sets
of positive binary naturals [positive]. These sets are: of positive binary naturals [positive]. These sets are:
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file collects definitions and theorems on collections. Most (** This file collects definitions and theorems on collections. Most
importantly, it implements some tactics to automatically solve goals involving importantly, it implements some tactics to automatically solve goals involving
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
From iris.prelude Require Export list. From iris.prelude Require Export list.
Set Default Proof Using "Type". Set Default Proof Using "Type".
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file collects theorems, definitions, tactics, related to propositions (** This file collects theorems, definitions, tactics, related to propositions
with a decidable equality. Such propositions are collected by the [Decision] with a decidable equality. Such propositions are collected by the [Decision]
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file collects definitions and theorems on finite collections. Most (** This file collects definitions and theorems on finite collections. Most
importantly, it implements a fold and size function and some useful induction importantly, it implements a fold and size function and some useful induction
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file provides an axiomatization of the domain function of finite (** This file provides an axiomatization of the domain function of finite
maps. We provide such an axiomatization, instead of implementing the domain maps. We provide such an axiomatization, instead of implementing the domain
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** Finite maps associate data to keys. This file defines an interface for (** Finite maps associate data to keys. This file defines an interface for
finite maps and collects some theory on it. Most importantly, it proves useful finite maps and collects some theory on it. Most importantly, it proves useful
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
From iris.prelude Require Export countable vector. From iris.prelude Require Export countable vector.
Set Default Proof Using "Type". Set Default Proof Using "Type".
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file implements finite maps and finite sets with keys of any countable (** This file implements finite maps and finite sets with keys of any countable
type. The implementation is based on [Pmap]s, radix-2 search trees. *) type. The implementation is based on [Pmap]s, radix-2 search trees. *)
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file implements finite set using hash maps. Hash sets are represented (** This file implements finite set using hash maps. Hash sets are represented
using radix-2 search trees. Each hash bucket is thus indexed using an binary using radix-2 search trees. Each hash bucket is thus indexed using an binary
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This files defines a lexicographic order on various common data structures (** This files defines a lexicographic order on various common data structures
and proves that it is a partial order having a strong variant of trichotomy. *) and proves that it is a partial order having a strong variant of trichotomy. *)
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file collects general purpose definitions and theorems on lists that (** This file collects general purpose definitions and theorems on lists that
are not in the Coq standard library. *) are not in the Coq standard library. *)
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file implements finite set as unordered lists without duplicates (** This file implements finite set as unordered lists without duplicates
removed. This implementation forms a monad. *) removed. This implementation forms a monad. *)
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This file implements finite as unordered lists without duplicates. (** This file implements finite as unordered lists without duplicates.
Although this implementation is slow, it is very useful as decidable equality Although this implementation is slow, it is very useful as decidable equality
......
(* Copyright (c) 2012-2015, Robbert Krebbers. *) (* Copyright (c) 2012-2017, Robbert Krebbers. *)
(* This file is distributed under the terms of the BSD license. *) (* This file is distributed under the terms of the BSD license. *)
(** This files gives an implementation of finite sets using finite maps with (** This files gives an implementation of finite sets using finite maps with
elements of the unit type. Since maps enjoy extensional equality, the elements of the unit type. Since maps enjoy extensional equality, the
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment