diff --git a/build/opam-ci.sh b/build/opam-ci.sh index bcd79ee4e0f33d36238960668d5bf49199ca07ee..66ccfc940da956981455546ec6d92a7a2c0b5121 100755 --- a/build/opam-ci.sh +++ b/build/opam-ci.sh @@ -1,10 +1,7 @@ #!/bin/bash set -e +set -x ## This script installs the build dependencies for CI builds. -function run_and_print() { - echo "$ $@" - "$@" -} # Prepare OPAM configuration export OPAMROOT="$(pwd)/opamroot" @@ -12,27 +9,27 @@ export OPAMJOBS="$((2*$CPU_CORES))" export OPAM_EDITOR="$(which false)" # Make sure we got a good OPAM. -test -d "$OPAMROOT" || (mkdir "$OPAMROOT" && run_and_print opam init --no-setup -y) +test -d "$OPAMROOT" || (mkdir "$OPAMROOT" && opam init --no-setup -y) eval `opam conf env` # Make sure the pin for the builddep package is not stale. -run_and_print make build-dep/opam +make build-dep/opam # Update repositories -run_and_print opam update +opam update # Make sure we got the right set of repositories registered -if echo "$@" | fgrep "dev"; then +if echo "$@" | fgrep "dev" > /dev/null; then # We are compiling against a dev version of something. Get ourselves the dev repositories. - test -d "$OPAMROOT/repo/coq-extra-dev" || run_and_print opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev -p 0 - test -d "$OPAMROOT/repo/coq-core-dev" || run_and_print opam repo add coq-core-dev https://coq.inria.fr/opam/core-dev -p 5 + test -d "$OPAMROOT/repo/coq-extra-dev" || opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev -p 0 + test -d "$OPAMROOT/repo/coq-core-dev" || opam repo add coq-core-dev https://coq.inria.fr/opam/core-dev -p 5 else # No dev version, make sure we do not have the dev repositories. - test -d "$OPAMROOT/repo/coq-extra-dev" && run_and_print opam repo remove coq-extra-dev - test -d "$OPAMROOT/repo/coq-core-dev" && run_and_print opam repo remove coq-core-dev + test -d "$OPAMROOT/repo/coq-extra-dev" && opam repo remove coq-extra-dev + test -d "$OPAMROOT/repo/coq-core-dev" && opam repo remove coq-core-dev fi -test -d "$OPAMROOT/repo/coq-released" || run_and_print opam repo add coq-released https://coq.inria.fr/opam/released -p 10 -test -d "$OPAMROOT/repo/iris-dev" || run_and_print opam repo add iris-dev https://gitlab.mpi-sws.org/FP/opam-dev.git -p 20 +test -d "$OPAMROOT/repo/coq-released" || opam repo add coq-released https://coq.inria.fr/opam/released -p 10 +test -d "$OPAMROOT/repo/iris-dev" || opam repo add iris-dev https://gitlab.mpi-sws.org/FP/opam-dev.git -p 20 echo # We really want to run all of the following in one opam transaction, but due to opam limitations, @@ -51,14 +48,14 @@ while (( "$#" )); do # while there are arguments left echo "[opam-ci] $PACKAGE already $KIND-pinned to $VERSION" else echo "[opam-ci] $KIND-pinning $PACKAGE to $VERSION" - run_and_print opam pin add -y -k "$KIND" "$PACKAGE" "$VERSION" + opam pin add -y -k "$KIND" "$PACKAGE" "$VERSION" fi done # Upgrade cached things. echo echo "[opam-ci] Upgrading opam" -run_and_print opam upgrade -y +opam upgrade -y --fixup # Install build-dependencies. echo diff --git a/theories/base_logic/fixpoint.v b/theories/base_logic/fixpoint.v deleted file mode 100644 index 3d61e8629d6f7bf3d3baa0cbc51e243c27f43e57..0000000000000000000000000000000000000000 --- a/theories/base_logic/fixpoint.v +++ /dev/null @@ -1,101 +0,0 @@ -From iris.base_logic Require Import base_logic. -From iris.proofmode Require Import tactics. -Set Default Proof Using "Type*". -Import uPred. - -(** Least and greatest fixpoint of a monotone function, defined entirely inside - the logic. *) -Class BIMonoPred {M} {A : ofeT} (F : (A → uPred M) → (A → uPred M)) := { - bi_mono_pred Φ Ψ : ((□ ∀ x, Φ x -∗ Ψ x) → ∀ x, F Φ x -∗ F Ψ x)%I; - bi_mono_pred_ne Φ : NonExpansive Φ → NonExpansive (F Φ) -}. -Arguments bi_mono_pred {_ _ _ _} _ _. -Local Existing Instance bi_mono_pred_ne. - -Definition uPred_least_fixpoint {M} {A : ofeT} - (F : (A → uPred M) → (A → uPred M)) (x : A) : uPred M := - (∀ Φ : A -n> uPredC M, □ (∀ x, F Φ x → Φ x) → Φ x)%I. - -Definition uPred_greatest_fixpoint {M} {A : ofeT} - (F : (A → uPred M) → (A → uPred M)) (x : A) : uPred M := - (∃ Φ : A -n> uPredC M, □ (∀ x, Φ x → F Φ x) ∧ Φ x)%I. - -Section least. - Context {M} {A : ofeT} (F : (A → uPred M) → (A → uPred M)) `{!BIMonoPred F}. - - Global Instance least_fixpoint_ne : NonExpansive (uPred_least_fixpoint F). - Proof. solve_proper. Qed. - - Lemma least_fixpoint_unfold_2 x : F (uPred_least_fixpoint F) x ⊢ uPred_least_fixpoint F x. - Proof. - iIntros "HF" (Φ) "#Hincl". - iApply "Hincl". iApply (bi_mono_pred _ Φ); last done. - iIntros "!#" (y) "Hy". iApply "Hy". done. - Qed. - - Lemma least_fixpoint_unfold_1 x : - uPred_least_fixpoint F x ⊢ F (uPred_least_fixpoint F) x. - Proof. - iIntros "HF". iApply ("HF" $! (CofeMor (F (uPred_least_fixpoint F))) with "[#]"). - iIntros "!#" (y) "Hy". iApply bi_mono_pred; last done. iIntros "!#" (z) "?". - by iApply least_fixpoint_unfold_2. - Qed. - - Corollary least_fixpoint_unfold x : - uPred_least_fixpoint F x ≡ F (uPred_least_fixpoint F) x. - Proof. - apply (anti_symm _); auto using least_fixpoint_unfold_1, least_fixpoint_unfold_2. - Qed. - - Lemma least_fixpoint_ind (Φ : A → uPred M) `{!NonExpansive Φ} : - □ (∀ y, F Φ y → Φ y) ⊢ ∀ x, uPred_least_fixpoint F x → Φ x. - Proof. - iIntros "#HΦ" (x) "HF". by iApply ("HF" $! (CofeMor Φ) with "[#]"). - Qed. - - Lemma least_fixpoint_strong_ind (Φ : A → uPred M) `{!NonExpansive Φ} : - □ (∀ y, F (λ x, Φ x ∧ uPred_least_fixpoint F x) y → Φ y) - ⊢ ∀ x, uPred_least_fixpoint F x → Φ x. - Proof. - trans (∀ x, uPred_least_fixpoint F x → Φ x ∧ uPred_least_fixpoint F x)%I. - { iIntros "#HΦ". iApply least_fixpoint_ind; first solve_proper. - iIntros "!#" (y) "H". iSplit; first by iApply "HΦ". - iApply least_fixpoint_unfold_2. iApply (bi_mono_pred with "[] H"). - by iIntros "!# * [_ ?]". } - by setoid_rewrite and_elim_l. - Qed. -End least. - -Section greatest. - Context {M} {A : ofeT} (F : (A → uPred M) → (A → uPred M)) `{!BIMonoPred F}. - - Global Instance greatest_fixpoint_ne : NonExpansive (uPred_greatest_fixpoint F). - Proof. solve_proper. Qed. - - Lemma greatest_fixpoint_unfold_1 x : - uPred_greatest_fixpoint F x ⊢ F (uPred_greatest_fixpoint F) x. - Proof. - iDestruct 1 as (Φ) "[#Hincl HΦ]". - iApply (bi_mono_pred Φ (uPred_greatest_fixpoint F)). - - iIntros "!#" (y) "Hy". iExists Φ. auto. - - by iApply "Hincl". - Qed. - - Lemma greatest_fixpoint_unfold_2 x : - F (uPred_greatest_fixpoint F) x ⊢ uPred_greatest_fixpoint F x. - Proof. - iIntros "HF". iExists (CofeMor (F (uPred_greatest_fixpoint F))). - iIntros "{$HF} !#" (y) "Hy". iApply (bi_mono_pred with "[] Hy"). - iIntros "!#" (z) "?". by iApply greatest_fixpoint_unfold_1. - Qed. - - Corollary greatest_fixpoint_unfold x : - uPred_greatest_fixpoint F x ≡ F (uPred_greatest_fixpoint F) x. - Proof. - apply (anti_symm _); auto using greatest_fixpoint_unfold_1, greatest_fixpoint_unfold_2. - Qed. - - Lemma greatest_fixpoint_coind (Φ : A → uPred M) `{!NonExpansive Φ} : - □ (∀ y, Φ y → F Φ y) ⊢ ∀ x, Φ x → uPred_greatest_fixpoint F x. - Proof. iIntros "#HΦ" (x) "Hx". iExists (CofeMor Φ). by iIntros "{$Hx} !#". Qed. -End greatest.