diff --git a/.gitignore b/.gitignore
index bfd0941de270424fc4efa0ae01ac97992a86ca9d..fead3cd9c1980bbefe11706d32bd576c5e722dce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,6 @@
 *.vio
 *.v.d
 .coqdeps.d
-.Makefile.coq.d
 *.glob
 *.cache
 *.aux
@@ -14,8 +13,12 @@
 *.bak
 .coqdeps.d
 .coq-native/
+*.crashcoqide
+.env
 builddep/
+_CoqProject.*
 Makefile.coq
 Makefile.coq.conf
-*.crashcoqide
-.env
+.Makefile.coq.d
+Makefile.package.*
+.Makefile.package.*
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8e82fc715fe3aba030ed7dba48d010ea4911b6c0..414e1f503212fe9f1e4d2cc4be16076cc8afe3eb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -37,7 +37,7 @@ build-coq.8.12.0:
   variables:
     OPAM_PINS: "coq version 8.12.0"
     DENY_WARNINGS: "1"
-    OPAM_PKG: "coq-iris"
+    OPAM_PKG: "1"
     DOC_DIR: "coqdoc@center.mpi-sws.org:iris"
     DOC_OPTS: "--external https://plv.mpi-sws.org/coqdoc/stdpp/ stdpp"
   tags:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 93c63457d4938ee0cf79099e96d621bc207f2810..75e420e68e2629617ccfa636f720bce5a8fdb2db 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,9 @@ lemma.
 
 With this release, we dropped support for Coq 8.9.
 
+We also split Iris into multiple opam packages: `coq-iris` no longer contains
+HeapLang, which is now in a separate package `coq-iris-heap-lang`.
+
 **Changes in `algebra`:**
 
 * Rename `agree_op_inv'` to `to_agree_op_inv`,
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 67eef817ff135946e050e0ed2e2544af05b7ace0..39e074c325fae1e95a3a51a0cd7b9d16cad7f2cc 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -5,6 +5,23 @@ Iris development.  This is for contributing to Iris itself; see
 [the README](README.md#further-resources) for resources helpful for all Iris
 users.
 
+To work on Iris itself, you need to install its build-dependencies.  Again we
+recommend you do that with opam (2.0.0 or newer).  This requires the following
+two repositories:
+
+    opam repo add coq-released https://coq.inria.fr/opam/released
+    opam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git
+
+Once you got opam set up, run `make build-dep` to install the right versions
+of the dependencies.
+
+Run `make -jN` to build the full development, where `N` is the number of your
+CPU cores.
+
+To update Iris, do `git pull`.  After an update, the development may fail to
+compile because of outdated dependencies.  To fix that, please run `opam update`
+followed by `make build-dep`.
+
 ## How to submit a merge request
 
 To contribute code, you need an [MPI-SWS GitLab account][account] (use the
@@ -48,6 +65,20 @@ Coq-8.8-specific `.ref` file).  If you change one of these, remember to update
 
 If you want to compile without tests run `make NO_TEST=1`.
 
+## How to build/install only one package
+
+Iris is split into multiple packages that can be installed separately via opam.
+You can invoke the Makefile of a particular package by doing `./make-package
+$PACKAGE $MAKE_ARGS`, where `$MAKE_ARGS` are passed to `make` (so you can use
+the usual `-jN`, `install`, ...).  This should only rarely be necessary. For
+example, if you are not using opam and you want to install only the `iris`
+package (without HeapLang, to avoid waiting on that part of the build), you can
+do `./make-package iris install`.  (If you are using opam, you can achieve the
+same by pinning `coq-iris` to your Iris checkout.)
+
+Note that `./make-package` will never run the test suite, so please always do a
+regular `make -jN` before submitting an MR.
+
 ## How to measure the timing effect on a reverse dependency
 
 So say you did a change in Iris, and want to know how it affects [lambda-rust]
diff --git a/Makefile.coq.local b/Makefile.coq.local
index 9ff769d27a157fdad62aec46b89e87bf50cc93e7..4d24c334ba2b121802ea34f0dce1fdaf490e9fbe 100644
--- a/Makefile.coq.local
+++ b/Makefile.coq.local
@@ -14,7 +14,7 @@ NORMALIZER:=test-normalizer.sed
 test: $(TESTFILES:.v=.vo)
 # Make sure everything imports the options.
 	$(HIDE)for FILE in $(VFILES); do \
-	  if ! fgrep -q 'From iris Require Import options.' "$$FILE"; then echo "ERROR: $$FILE does not import 'options'."; echo; exit 1; fi \
+	  if ! fgrep -q 'From iris.prelude Require Import options.' "$$FILE"; then echo "ERROR: $$FILE does not import 'options'."; echo; exit 1; fi \
 	done
 .PHONY: test
 
diff --git a/README.md b/README.md
index bb35b8274154d10963fdd8f8612cb9233c48d163..3b38ae5c476bf7e1631d07d141560f8639c0eaf5 100644
--- a/README.md
+++ b/README.md
@@ -50,34 +50,24 @@ To obtain a development version, also add the Iris opam repository:
 
     opam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git
 
-Either way, you can now do `opam install coq-iris`.  To fetch updates later, run
-`opam update && opam upgrade`.  However, notice that we do not guarantee
-backwards-compatibility, so upgrading Iris may break your Iris-using
-developments.
-
-The development version of Iris is regularly subject to breaking changes.  If
-you want to be notified of such changes, please let us know your account name on
-the [MPI-SWS GitLab](https://gitlab.mpi-sws.org/) so we can add you to the
+Either way, you can now install Iris:
+- `opam install coq-iris` will install the libraries making up the Iris logic,
+  but leave it up to you to instantiate the `program_logic.language` interface
+  to define a programming language for Iris to reason about.
+- `opam install coq-iris-heap-lang` will additionally install HeapLang, the
+  default language used by various Iris projects.
+
+To fetch updates later, run `opam update && opam upgrade`.  However, notice that
+we do not guarantee backwards-compatibility, so upgrading Iris may break your
+Iris-using developments.  If you want to be notified of breaking changes, please
+let us know your account name on the
+[MPI-SWS GitLab](https://gitlab.mpi-sws.org/) so we can add you to the
 notification group.
 
 ### Working *on* Iris
 
-To work on Iris itself, you need to install its build-dependencies.  Again we
-recommend you do that with opam (2.0.0 or newer).  This requires the following
-two repositories:
-
-    opam repo add coq-released https://coq.inria.fr/opam/released
-    opam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git
-
-Once you got opam set up, run `make build-dep` to install the right versions
-of the dependencies.
-
-Run `make -jN` to build the full development, where `N` is the number of your
-CPU cores.
-
-To update Iris, do `git pull`.  After an update, the development may fail to
-compile because of outdated dependencies.  To fix that, please run `opam update`
-followed by `make build-dep`.
+See the [contribution guide](CONTRIBUTING.md) for information on how to work on
+the Iris development itself.
 
 ## Directory Structure
 
diff --git a/_CoqProject b/_CoqProject
index 37fc08f79110c9c5fe5e6184b586ae78a2361ec7..598e82936d254ab21ad1d2030f603a210e92a06e 100644
--- a/_CoqProject
+++ b/_CoqProject
@@ -1,155 +1,165 @@
--Q theories iris
+# Search paths for all packages. They must all match the regex
+# `-Q $PACKAGE[/ ]` so that we can filter out the right ones for each package.
+-Q iris/prelude iris.prelude
+-Q iris/algebra iris.algebra
+-Q iris/si_logic iris.si_logic
+-Q iris/bi iris.bi
+-Q iris/proofmode iris.proofmode
+-Q iris/base_logic iris.base_logic
+-Q iris/program_logic iris.program_logic
+-Q iris_heap_lang iris.heap_lang
 # We sometimes want to locally override notation, and there is no good way to do that with scopes.
 -arg -w -arg -notation-overridden
 # Cannot use non-canonical projections as it causes massive unification failures
 # (https://github.com/coq/coq/issues/6294).
 -arg -w -arg -redundant-canonical-projection
 
-theories/options.v
-theories/algebra/monoid.v
-theories/algebra/cmra.v
-theories/algebra/big_op.v
-theories/algebra/cmra_big_op.v
-theories/algebra/sts.v
-theories/algebra/numbers.v
-theories/algebra/view.v
-theories/algebra/auth.v
-theories/algebra/gmap.v
-theories/algebra/ofe.v
-theories/algebra/base.v
-theories/algebra/dra.v
-theories/algebra/cofe_solver.v
-theories/algebra/agree.v
-theories/algebra/excl.v
-theories/algebra/functions.v
-theories/algebra/frac.v
-theories/algebra/dfrac.v
-theories/algebra/csum.v
-theories/algebra/list.v
-theories/algebra/vector.v
-theories/algebra/updates.v
-theories/algebra/local_updates.v
-theories/algebra/gset.v
-theories/algebra/gmultiset.v
-theories/algebra/coPset.v
-theories/algebra/proofmode_classes.v
-theories/algebra/ufrac.v
-theories/algebra/namespace_map.v
-theories/algebra/lib/excl_auth.v
-theories/algebra/lib/frac_auth.v
-theories/algebra/lib/ufrac_auth.v
-theories/algebra/lib/frac_agree.v
-theories/algebra/lib/gmap_view.v
-theories/algebra/lib/mnat_auth.v
-theories/si_logic/siprop.v
-theories/si_logic/bi.v
-theories/bi/notation.v
-theories/bi/interface.v
-theories/bi/derived_connectives.v
-theories/bi/derived_laws.v
-theories/bi/derived_laws_later.v
-theories/bi/plainly.v
-theories/bi/internal_eq.v
-theories/bi/big_op.v
-theories/bi/updates.v
-theories/bi/ascii.v
-theories/bi/bi.v
-theories/bi/monpred.v
-theories/bi/embedding.v
-theories/bi/weakestpre.v
-theories/bi/telescopes.v
-theories/bi/lib/counterexamples.v
-theories/bi/lib/fixpoint.v
-theories/bi/lib/fractional.v
-theories/bi/lib/laterable.v
-theories/bi/lib/atomic.v
-theories/bi/lib/core.v
-theories/bi/lib/relations.v
-theories/base_logic/upred.v
-theories/base_logic/bi.v
-theories/base_logic/derived.v
-theories/base_logic/proofmode.v
-theories/base_logic/base_logic.v
-theories/base_logic/algebra.v
-theories/base_logic/bupd_alt.v
-theories/base_logic/lib/iprop.v
-theories/base_logic/lib/own.v
-theories/base_logic/lib/saved_prop.v
-theories/base_logic/lib/wsat.v
-theories/base_logic/lib/invariants.v
-theories/base_logic/lib/fancy_updates.v
-theories/base_logic/lib/viewshifts.v
-theories/base_logic/lib/auth.v
-theories/base_logic/lib/sts.v
-theories/base_logic/lib/boxes.v
-theories/base_logic/lib/na_invariants.v
-theories/base_logic/lib/cancelable_invariants.v
-theories/base_logic/lib/gen_heap.v
-theories/base_logic/lib/gen_inv_heap.v
-theories/base_logic/lib/fancy_updates_from_vs.v
-theories/base_logic/lib/proph_map.v
-theories/base_logic/lib/ghost_var.v
-theories/base_logic/lib/mnat.v
-theories/program_logic/adequacy.v
-theories/program_logic/lifting.v
-theories/program_logic/weakestpre.v
-theories/program_logic/total_weakestpre.v
-theories/program_logic/total_adequacy.v
-theories/program_logic/hoare.v
-theories/program_logic/language.v
-theories/program_logic/ectx_language.v
-theories/program_logic/ectxi_language.v
-theories/program_logic/ectx_lifting.v
-theories/program_logic/ownp.v
-theories/program_logic/total_lifting.v
-theories/program_logic/total_ectx_lifting.v
-theories/program_logic/atomic.v
-theories/heap_lang/locations.v
-theories/heap_lang/lang.v
-theories/heap_lang/metatheory.v
-theories/heap_lang/tactics.v
-theories/heap_lang/primitive_laws.v
-theories/heap_lang/derived_laws.v
-theories/heap_lang/notation.v
-theories/heap_lang/proofmode.v
-theories/heap_lang/adequacy.v
-theories/heap_lang/total_adequacy.v
-theories/heap_lang/proph_erasure.v
-theories/heap_lang/lib/spawn.v
-theories/heap_lang/lib/par.v
-theories/heap_lang/lib/assert.v
-theories/heap_lang/lib/lock.v
-theories/heap_lang/lib/spin_lock.v
-theories/heap_lang/lib/ticket_lock.v
-theories/heap_lang/lib/nondet_bool.v
-theories/heap_lang/lib/lazy_coin.v
-theories/heap_lang/lib/clairvoyant_coin.v
-theories/heap_lang/lib/counter.v
-theories/heap_lang/lib/atomic_heap.v
-theories/heap_lang/lib/increment.v
-theories/heap_lang/lib/diverge.v
-theories/heap_lang/lib/arith.v
-theories/heap_lang/lib/array.v
-theories/proofmode/base.v
-theories/proofmode/ident_name.v
-theories/proofmode/tokens.v
-theories/proofmode/coq_tactics.v
-theories/proofmode/ltac_tactics.v
-theories/proofmode/environments.v
-theories/proofmode/reduction.v
-theories/proofmode/intro_patterns.v
-theories/proofmode/spec_patterns.v
-theories/proofmode/sel_patterns.v
-theories/proofmode/tactics.v
-theories/proofmode/notation.v
-theories/proofmode/classes.v
-theories/proofmode/class_instances.v
-theories/proofmode/class_instances_later.v
-theories/proofmode/class_instances_updates.v
-theories/proofmode/class_instances_embedding.v
-theories/proofmode/class_instances_plainly.v
-theories/proofmode/class_instances_internal_eq.v
-theories/proofmode/frame_instances.v
-theories/proofmode/monpred.v
-theories/proofmode/modalities.v
-theories/proofmode/modality_instances.v
+iris/prelude/options.v
+iris/algebra/monoid.v
+iris/algebra/cmra.v
+iris/algebra/big_op.v
+iris/algebra/cmra_big_op.v
+iris/algebra/sts.v
+iris/algebra/numbers.v
+iris/algebra/view.v
+iris/algebra/auth.v
+iris/algebra/gmap.v
+iris/algebra/ofe.v
+iris/algebra/base.v
+iris/algebra/dra.v
+iris/algebra/cofe_solver.v
+iris/algebra/agree.v
+iris/algebra/excl.v
+iris/algebra/functions.v
+iris/algebra/frac.v
+iris/algebra/dfrac.v
+iris/algebra/csum.v
+iris/algebra/list.v
+iris/algebra/vector.v
+iris/algebra/updates.v
+iris/algebra/local_updates.v
+iris/algebra/gset.v
+iris/algebra/gmultiset.v
+iris/algebra/coPset.v
+iris/algebra/proofmode_classes.v
+iris/algebra/ufrac.v
+iris/algebra/namespace_map.v
+iris/algebra/lib/excl_auth.v
+iris/algebra/lib/frac_auth.v
+iris/algebra/lib/ufrac_auth.v
+iris/algebra/lib/frac_agree.v
+iris/algebra/lib/gmap_view.v
+iris/algebra/lib/mnat_auth.v
+iris/si_logic/siprop.v
+iris/si_logic/bi.v
+iris/bi/notation.v
+iris/bi/interface.v
+iris/bi/derived_connectives.v
+iris/bi/derived_laws.v
+iris/bi/derived_laws_later.v
+iris/bi/plainly.v
+iris/bi/internal_eq.v
+iris/bi/big_op.v
+iris/bi/updates.v
+iris/bi/ascii.v
+iris/bi/bi.v
+iris/bi/monpred.v
+iris/bi/embedding.v
+iris/bi/weakestpre.v
+iris/bi/telescopes.v
+iris/bi/lib/counterexamples.v
+iris/bi/lib/fixpoint.v
+iris/bi/lib/fractional.v
+iris/bi/lib/laterable.v
+iris/bi/lib/atomic.v
+iris/bi/lib/core.v
+iris/bi/lib/relations.v
+iris/base_logic/upred.v
+iris/base_logic/bi.v
+iris/base_logic/derived.v
+iris/base_logic/proofmode.v
+iris/base_logic/base_logic.v
+iris/base_logic/algebra.v
+iris/base_logic/bupd_alt.v
+iris/base_logic/lib/iprop.v
+iris/base_logic/lib/own.v
+iris/base_logic/lib/saved_prop.v
+iris/base_logic/lib/wsat.v
+iris/base_logic/lib/invariants.v
+iris/base_logic/lib/fancy_updates.v
+iris/base_logic/lib/viewshifts.v
+iris/base_logic/lib/auth.v
+iris/base_logic/lib/sts.v
+iris/base_logic/lib/boxes.v
+iris/base_logic/lib/na_invariants.v
+iris/base_logic/lib/cancelable_invariants.v
+iris/base_logic/lib/gen_heap.v
+iris/base_logic/lib/gen_inv_heap.v
+iris/base_logic/lib/fancy_updates_from_vs.v
+iris/base_logic/lib/proph_map.v
+iris/base_logic/lib/ghost_var.v
+iris/base_logic/lib/mnat.v
+iris/program_logic/adequacy.v
+iris/program_logic/lifting.v
+iris/program_logic/weakestpre.v
+iris/program_logic/total_weakestpre.v
+iris/program_logic/total_adequacy.v
+iris/program_logic/hoare.v
+iris/program_logic/language.v
+iris/program_logic/ectx_language.v
+iris/program_logic/ectxi_language.v
+iris/program_logic/ectx_lifting.v
+iris/program_logic/ownp.v
+iris/program_logic/total_lifting.v
+iris/program_logic/total_ectx_lifting.v
+iris/program_logic/atomic.v
+iris/proofmode/base.v
+iris/proofmode/ident_name.v
+iris/proofmode/tokens.v
+iris/proofmode/coq_tactics.v
+iris/proofmode/ltac_tactics.v
+iris/proofmode/environments.v
+iris/proofmode/reduction.v
+iris/proofmode/intro_patterns.v
+iris/proofmode/spec_patterns.v
+iris/proofmode/sel_patterns.v
+iris/proofmode/tactics.v
+iris/proofmode/notation.v
+iris/proofmode/classes.v
+iris/proofmode/class_instances.v
+iris/proofmode/class_instances_later.v
+iris/proofmode/class_instances_updates.v
+iris/proofmode/class_instances_embedding.v
+iris/proofmode/class_instances_plainly.v
+iris/proofmode/class_instances_internal_eq.v
+iris/proofmode/frame_instances.v
+iris/proofmode/monpred.v
+iris/proofmode/modalities.v
+iris/proofmode/modality_instances.v
+
+iris_heap_lang/locations.v
+iris_heap_lang/lang.v
+iris_heap_lang/metatheory.v
+iris_heap_lang/tactics.v
+iris_heap_lang/primitive_laws.v
+iris_heap_lang/derived_laws.v
+iris_heap_lang/notation.v
+iris_heap_lang/proofmode.v
+iris_heap_lang/adequacy.v
+iris_heap_lang/total_adequacy.v
+iris_heap_lang/proph_erasure.v
+iris_heap_lang/lib/spawn.v
+iris_heap_lang/lib/par.v
+iris_heap_lang/lib/assert.v
+iris_heap_lang/lib/lock.v
+iris_heap_lang/lib/spin_lock.v
+iris_heap_lang/lib/ticket_lock.v
+iris_heap_lang/lib/nondet_bool.v
+iris_heap_lang/lib/lazy_coin.v
+iris_heap_lang/lib/clairvoyant_coin.v
+iris_heap_lang/lib/counter.v
+iris_heap_lang/lib/atomic_heap.v
+iris_heap_lang/lib/increment.v
+iris_heap_lang/lib/diverge.v
+iris_heap_lang/lib/arith.v
+iris_heap_lang/lib/array.v
diff --git a/coq-iris-heap-lang.opam b/coq-iris-heap-lang.opam
new file mode 100644
index 0000000000000000000000000000000000000000..7c98a1d3afad868222e43256f99aae58d5f1856a
--- /dev/null
+++ b/coq-iris-heap-lang.opam
@@ -0,0 +1,19 @@
+opam-version: "2.0"
+maintainer: "Ralf Jung <jung@mpi-sws.org>"
+authors: "The Iris Team"
+license: "BSD-3-Clause"
+homepage: "https://iris-project.org/"
+bug-reports: "https://gitlab.mpi-sws.org/iris/iris/issues"
+dev-repo: "git+https://gitlab.mpi-sws.org/iris/iris.git"
+
+synopsis: "HeapLang is the canonical example language for Iris"
+description: """
+This package provides the iris.heap_lang Coq module.
+"""
+
+depends: [
+  "coq-iris" {= version}
+]
+
+build: ["./make-package" "iris_heap_lang" "-j%{jobs}%"]
+install: ["./make-package" "iris_heap_lang" "install"]
diff --git a/coq-iris.opam b/coq-iris.opam
index fd8bf766b2799a3967b10b31f49805e904a9cd6c..ec65b98decdb9eef1e82809c57b359861d6e151b 100644
--- a/coq-iris.opam
+++ b/coq-iris.opam
@@ -7,11 +7,15 @@ bug-reports: "https://gitlab.mpi-sws.org/iris/iris/issues"
 dev-repo: "git+https://gitlab.mpi-sws.org/iris/iris.git"
 
 synopsis: "Iris is a Higher-Order Concurrent Separation Logic Framework with support for interactive proofs"
+description: """
+This package provides the following Coq modules:
+iris.prelude, iris.algebra, iris.si_logic, iris.bi, iris.proofmode, iris.base_logic, iris.program_logic.
+"""
 
 depends: [
   "coq" { (>= "8.10.2" & < "8.13~") | (= "dev") }
   "coq-stdpp" { (= "dev.2020-10-30.0.402f2d6a") | (= "dev") }
 ]
 
-build: [make "-j%{jobs}%"]
-install: [make "install"]
+build: ["./make-package" "iris" "-j%{jobs}%"]
+install: ["./make-package" "iris" "install"]
diff --git a/theories/algebra/agree.v b/iris/algebra/agree.v
similarity index 99%
rename from theories/algebra/agree.v
rename to iris/algebra/agree.v
index c0ae62c9199d1cdc0f4d30c6c57cc849314e6e86..f5733133f6b5909a69053affd9ed80561d54d3d1 100644
--- a/theories/algebra/agree.v
+++ b/iris/algebra/agree.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Local Arguments validN _ _ _ !_ /.
 Local Arguments valid _ _  !_ /.
diff --git a/theories/algebra/auth.v b/iris/algebra/auth.v
similarity index 99%
rename from theories/algebra/auth.v
rename to iris/algebra/auth.v
index 6adb6c2e4f2ffe3e363b2fa599f1b55270035c39..29c5c0ae5dccc98a7213fb36edbc6d0eaa422e44 100644
--- a/theories/algebra/auth.v
+++ b/iris/algebra/auth.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export view.
 From iris.algebra Require Import proofmode_classes big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The authoritative camera with fractional authoritative elements *)
 (** The authoritative camera has 2 types of elements: the authoritative
diff --git a/theories/algebra/base.v b/iris/algebra/base.v
similarity index 82%
rename from theories/algebra/base.v
rename to iris/algebra/base.v
index 3341e502cf497ec86ed06e360a618273c1a500c5..d915dfc3f165e0055c1527430ba5a928465a5b8b 100644
--- a/theories/algebra/base.v
+++ b/iris/algebra/base.v
@@ -1,6 +1,6 @@
 From Coq.ssr Require Export ssreflect.
 From stdpp Require Export prelude.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Global Open Scope general_if_scope.
 Global Set SsrOldRewriteGoalsOrder. (* See Coq issue #5706 *)
 Ltac done := stdpp.tactics.done.
diff --git a/theories/algebra/big_op.v b/iris/algebra/big_op.v
similarity index 99%
rename from theories/algebra/big_op.v
rename to iris/algebra/big_op.v
index 18c6eaa286fe5bb5b5d3ea4b79b27aa36558eeaf..92a790f25e0f988014551880b84a0ccb80846f86 100644
--- a/theories/algebra/big_op.v
+++ b/iris/algebra/big_op.v
@@ -1,6 +1,6 @@
 From stdpp Require Export functions gmap gmultiset.
 From iris.algebra Require Export monoid.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Local Existing Instances monoid_ne monoid_assoc monoid_comm
   monoid_left_id monoid_right_id monoid_proper
   monoid_homomorphism_rel_po monoid_homomorphism_rel_proper
diff --git a/theories/algebra/cmra.v b/iris/algebra/cmra.v
similarity index 99%
rename from theories/algebra/cmra.v
rename to iris/algebra/cmra.v
index cfc26604ab4b4c85c82071a6fffe0e40c56d7eae..3f8f002a1eace6db214aba9ef8ea2f824e1494f7 100644
--- a/theories/algebra/cmra.v
+++ b/iris/algebra/cmra.v
@@ -1,6 +1,6 @@
 From stdpp Require Import finite.
 From iris.algebra Require Export ofe monoid.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Class PCore (A : Type) := pcore : A → option A.
 Hint Mode PCore ! : typeclass_instances.
diff --git a/theories/algebra/cmra_big_op.v b/iris/algebra/cmra_big_op.v
similarity index 97%
rename from theories/algebra/cmra_big_op.v
rename to iris/algebra/cmra_big_op.v
index 37ae379318e422f97c87ec8f9d3a80c99c40958b..73e7d22f3322986baccbebae76861083a1267a89 100644
--- a/theories/algebra/cmra_big_op.v
+++ b/iris/algebra/cmra_big_op.v
@@ -1,6 +1,6 @@
 From stdpp Require Import gmap gmultiset.
 From iris.algebra Require Export big_op cmra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Option *)
 Lemma big_opL_None {M : cmraT} {A} (f : nat → A → option M) l :
diff --git a/theories/algebra/coPset.v b/iris/algebra/coPset.v
similarity index 99%
rename from theories/algebra/coPset.v
rename to iris/algebra/coPset.v
index dcd07527b2f44ed3006152d757a4ee7d56e42a71..872cbfb87f0f20783a9ac3845a0b592fb72a2e9e 100644
--- a/theories/algebra/coPset.v
+++ b/iris/algebra/coPset.v
@@ -1,7 +1,7 @@
 From stdpp Require Export sets coPset.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates local_updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 (** This is pretty much the same as algebra/gset, but I was not able to
 generalize the construction without breaking canonical structures. *)
 
diff --git a/theories/algebra/cofe_solver.v b/iris/algebra/cofe_solver.v
similarity index 99%
rename from theories/algebra/cofe_solver.v
rename to iris/algebra/cofe_solver.v
index 9330d77ebb70ac11bbed9ea814fb19ebc3e1d993..948c57c220bc577b415d927161586a77641eeb8f 100644
--- a/theories/algebra/cofe_solver.v
+++ b/iris/algebra/cofe_solver.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export ofe.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Record solution (F : oFunctor) := Solution {
   solution_car :> ofeT;
diff --git a/theories/algebra/csum.v b/iris/algebra/csum.v
similarity index 99%
rename from theories/algebra/csum.v
rename to iris/algebra/csum.v
index 74d83490b6859d6b14a4121efc8b4b15c4ce8b55..e0e5ce8fe3250fcdcbc49f37b6981ee41115bd33 100644
--- a/theories/algebra/csum.v
+++ b/iris/algebra/csum.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates local_updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Local Arguments pcore _ _ !_ /.
 Local Arguments cmra_pcore _ !_ /.
diff --git a/theories/algebra/dfrac.v b/iris/algebra/dfrac.v
similarity index 99%
rename from theories/algebra/dfrac.v
rename to iris/algebra/dfrac.v
index 5fadf0e77a201871c5980393a006ab5a26b9b788..4006adc937945cceddf44163622560a44321b5cf 100644
--- a/theories/algebra/dfrac.v
+++ b/iris/algebra/dfrac.v
@@ -20,7 +20,7 @@
     it also implies that no one can own 1 in the future *)
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import proofmode_classes updates frac.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** An element of dfrac denotes ownership of a fraction, knowledge that a
     fraction has been discarded, or both. Note that [DfracBoth] can be written
diff --git a/theories/algebra/dra.v b/iris/algebra/dra.v
similarity index 99%
rename from theories/algebra/dra.v
rename to iris/algebra/dra.v
index 1e890200156681335fcd750d46196c99cec27e1f..5d867935846d46b2dd6cdd7adbc5c8a172ef82c0 100644
--- a/theories/algebra/dra.v
+++ b/iris/algebra/dra.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Record DraMixin A `{Equiv A, PCore A, Disjoint A, Op A, Valid A} := {
   (* setoids *)
diff --git a/theories/algebra/excl.v b/iris/algebra/excl.v
similarity index 99%
rename from theories/algebra/excl.v
rename to iris/algebra/excl.v
index 10a86de7442ae024fcf1dd7d1d2fc065a8cfb339..c5d9ef11007a00dfd35408a4e234a8b729383599 100644
--- a/theories/algebra/excl.v
+++ b/iris/algebra/excl.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Local Arguments validN _ _ _ !_ /.
 Local Arguments valid _ _  !_ /.
diff --git a/theories/algebra/frac.v b/iris/algebra/frac.v
similarity index 98%
rename from theories/algebra/frac.v
rename to iris/algebra/frac.v
index ad8ac9ba0d91ced4853fc71a4509dbceb3dc999a..6135787f1fb0b5a9a5334a89de633d6cbdcd2d85 100644
--- a/theories/algebra/frac.v
+++ b/iris/algebra/frac.v
@@ -5,7 +5,7 @@ Notice that this camera could in principle be obtained by restricting the
 validity of the unbounded fractional camera [ufrac]. *)
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Since the standard (0,1] fractional camera is used more often, we define
 [frac] through a [Notation] instead of a [Definition]. That way, Coq infers the
diff --git a/theories/algebra/functions.v b/iris/algebra/functions.v
similarity index 99%
rename from theories/algebra/functions.v
rename to iris/algebra/functions.v
index dd40746ecac32593d192a3c366397d8e08ac4363..98f36dfbd6b3837c661a9c5c9fe3a7f167da903b 100644
--- a/theories/algebra/functions.v
+++ b/iris/algebra/functions.v
@@ -1,7 +1,7 @@
 From stdpp Require Import finite.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition discrete_fun_insert `{EqDecision A} {B : A → ofeT}
     (x : A) (y : B x) (f : discrete_fun B) : discrete_fun B := λ x',
diff --git a/theories/algebra/gmap.v b/iris/algebra/gmap.v
similarity index 99%
rename from theories/algebra/gmap.v
rename to iris/algebra/gmap.v
index bc89495ccad60f0c4c3b67ea101c0e75bb57a253..dc39ca0feb51e4f1d2704ac2ea5c3a16d4e30277 100644
--- a/theories/algebra/gmap.v
+++ b/iris/algebra/gmap.v
@@ -1,7 +1,7 @@
 From stdpp Require Export list gmap.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates local_updates proofmode_classes big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section ofe.
 Context `{Countable K} {A : ofeT}.
diff --git a/theories/algebra/gmultiset.v b/iris/algebra/gmultiset.v
similarity index 98%
rename from theories/algebra/gmultiset.v
rename to iris/algebra/gmultiset.v
index 4bbb9cf8de0cb7a9a0f5d2735813e01e37a39129..5e2f02f284b5a9cba1aec6a922b84668cd23cb80 100644
--- a/theories/algebra/gmultiset.v
+++ b/iris/algebra/gmultiset.v
@@ -1,7 +1,7 @@
 From stdpp Require Export sets gmultiset countable.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates local_updates big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The multiset union CMRA *)
 Section gmultiset.
diff --git a/theories/algebra/gset.v b/iris/algebra/gset.v
similarity index 99%
rename from theories/algebra/gset.v
rename to iris/algebra/gset.v
index 832616e9d59c972c8ed0f055b6643e11740f2d96..c95e6c370f46309ff02b9d2d6b8b96108e39dfa3 100644
--- a/theories/algebra/gset.v
+++ b/iris/algebra/gset.v
@@ -1,7 +1,7 @@
 From stdpp Require Export sets gmap mapset.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates local_updates big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The union CMRA *)
 Section gset.
diff --git a/theories/algebra/lib/excl_auth.v b/iris/algebra/lib/excl_auth.v
similarity index 98%
rename from theories/algebra/lib/excl_auth.v
rename to iris/algebra/lib/excl_auth.v
index 307a841cc723daecc9f615611ffa9d504e752562..c410935a64f4ddcacb256f0341bcdb34be33ca86 100644
--- a/theories/algebra/lib/excl_auth.v
+++ b/iris/algebra/lib/excl_auth.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export auth excl updates.
 From iris.algebra Require Import local_updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Authoritative CMRA where the fragment is exclusively owned.
 This is effectively a single "ghost variable" with two views, the frament [â—¯E a]
diff --git a/theories/algebra/lib/frac_agree.v b/iris/algebra/lib/frac_agree.v
similarity index 98%
rename from theories/algebra/lib/frac_agree.v
rename to iris/algebra/lib/frac_agree.v
index af00e2bf85269b4e0ec6618aa2c8106e11a46723..6812ca9a6d717604fe5390d3126aeb0eed2374ba 100644
--- a/theories/algebra/lib/frac_agree.v
+++ b/iris/algebra/lib/frac_agree.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export frac agree updates local_updates.
 From iris.algebra Require Import proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition frac_agreeR (A : ofeT) : cmraT := prodR fracR (agreeR A).
 
diff --git a/theories/algebra/lib/frac_auth.v b/iris/algebra/lib/frac_auth.v
similarity index 99%
rename from theories/algebra/lib/frac_auth.v
rename to iris/algebra/lib/frac_auth.v
index 6174a3e54c5c1ad608982618833e20677d57251a..b3bed379cef52bc7086a173897e993b8a29aa0b1 100644
--- a/theories/algebra/lib/frac_auth.v
+++ b/iris/algebra/lib/frac_auth.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export frac auth updates local_updates.
 From iris.algebra Require Import proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Authoritative CMRA where the NON-authoritative parts can be fractional.
   This CMRA allows the original non-authoritative element [â—¯ a] to be split into
diff --git a/theories/algebra/lib/gmap_view.v b/iris/algebra/lib/gmap_view.v
similarity index 99%
rename from theories/algebra/lib/gmap_view.v
rename to iris/algebra/lib/gmap_view.v
index 0be0eaf466ef7a25cf92a0ae2cfece9db5586c74..4c30f0144da2b6d1ca799536c0937a4505c4da19 100644
--- a/theories/algebra/lib/gmap_view.v
+++ b/iris/algebra/lib/gmap_view.v
@@ -2,7 +2,7 @@ From Coq.QArith Require Import Qcanon.
 From iris.algebra Require Import view updates dfrac.
 From iris.algebra Require Export gmap dfrac.
 From iris.algebra Require Import local_updates proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** * CMRA for a "view of a gmap".
 
diff --git a/theories/algebra/lib/mnat_auth.v b/iris/algebra/lib/mnat_auth.v
similarity index 98%
rename from theories/algebra/lib/mnat_auth.v
rename to iris/algebra/lib/mnat_auth.v
index aa3c062eb587d2dfd9da9c7c2c68aed0102a6273..351fa0a2f51a4bfa4cefc1a2638a5313aa1e6a75 100644
--- a/theories/algebra/lib/mnat_auth.v
+++ b/iris/algebra/lib/mnat_auth.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export auth.
 From iris.algebra Require Import numbers updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Authoritative CMRA for [max_nat]. The authoritative element is a
 monotonically increasing [nat], while a fragment is a lower bound. *)
diff --git a/theories/algebra/lib/ufrac_auth.v b/iris/algebra/lib/ufrac_auth.v
similarity index 99%
rename from theories/algebra/lib/ufrac_auth.v
rename to iris/algebra/lib/ufrac_auth.v
index 1f5705f2de9510459d5fbb908a93a2755bf8205c..e7f1f0a398799964cef7442f39b484b8314a7af2 100644
--- a/theories/algebra/lib/ufrac_auth.v
+++ b/iris/algebra/lib/ufrac_auth.v
@@ -18,7 +18,7 @@ difference:
 *)
 From iris.algebra Require Export auth frac updates local_updates.
 From iris.algebra Require Import ufrac proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition ufrac_authR (A : cmraT) : cmraT :=
   authR (optionUR (prodR ufracR A)).
diff --git a/theories/algebra/list.v b/iris/algebra/list.v
similarity index 99%
rename from theories/algebra/list.v
rename to iris/algebra/list.v
index 798a80daa4a3b7c97f6b6208a2ec00c357498616..363a06e51b26476a0b913d79b7aee4cd5e8b0b3f 100644
--- a/theories/algebra/list.v
+++ b/iris/algebra/list.v
@@ -1,7 +1,7 @@
 From stdpp Require Export list.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import updates local_updates big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section ofe.
 Context {A : ofeT}.
diff --git a/theories/algebra/local_updates.v b/iris/algebra/local_updates.v
similarity index 99%
rename from theories/algebra/local_updates.v
rename to iris/algebra/local_updates.v
index 92110f0b247e3b0148168f8ead8dc82b749816e8..c662b42293ab8a626dab6a011d285db0cd79c729 100644
--- a/theories/algebra/local_updates.v
+++ b/iris/algebra/local_updates.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** * Local updates *)
 Definition local_update {A : cmraT} (x y : A * A) := ∀ n mz,
diff --git a/theories/algebra/monoid.v b/iris/algebra/monoid.v
similarity index 98%
rename from theories/algebra/monoid.v
rename to iris/algebra/monoid.v
index 0c7a2e5f5b8b17ff8c58126ba2da628f9ccb8e8b..f8a563322bbab996ca801355692b9c175f17f252 100644
--- a/theories/algebra/monoid.v
+++ b/iris/algebra/monoid.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export ofe.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The Monoid class that is used for generic big operators in the file
 [algebra/big_op]. The operation is an argument because we want to have multiple
diff --git a/theories/algebra/namespace_map.v b/iris/algebra/namespace_map.v
similarity index 99%
rename from theories/algebra/namespace_map.v
rename to iris/algebra/namespace_map.v
index 98656d914caea33b580950fea4813d15a710ead9..aae353ecbcea2ff2034140edeccb63f334990a27 100644
--- a/theories/algebra/namespace_map.v
+++ b/iris/algebra/namespace_map.v
@@ -1,7 +1,7 @@
 From stdpp Require Import namespaces.
 From iris.algebra Require Export gmap coPset local_updates.
 From iris.algebra Require Import updates proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The camera [namespace_map A] over a camera [A] provides the connectives
 [namespace_map_data N a], which associates data [a : A] with a namespace [N],
diff --git a/theories/algebra/numbers.v b/iris/algebra/numbers.v
similarity index 99%
rename from theories/algebra/numbers.v
rename to iris/algebra/numbers.v
index 0d73b1199e1bccf734383ade95d0e53033b76c65..fa74e117290120800db3809354260419b0ff4a10 100644
--- a/theories/algebra/numbers.v
+++ b/iris/algebra/numbers.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra local_updates proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** ** Natural numbers with [add] as the operation. *)
 Section nat.
diff --git a/theories/algebra/ofe.v b/iris/algebra/ofe.v
similarity index 99%
rename from theories/algebra/ofe.v
rename to iris/algebra/ofe.v
index 0b0963f54a6172a35c875a23c9fb08336323d53f..135865d7e4fcadd73bb07440b7cd34494aa68930 100644
--- a/theories/algebra/ofe.v
+++ b/iris/algebra/ofe.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export base.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Set Primitive Projections.
 
 (** This files defines (a shallow embedding of) the category of OFEs:
diff --git a/theories/algebra/proofmode_classes.v b/iris/algebra/proofmode_classes.v
similarity index 98%
rename from theories/algebra/proofmode_classes.v
rename to iris/algebra/proofmode_classes.v
index 7cfbdc09bc8d6b993733ff324d5aa0914810b26d..efd07f08a1b92b7893d3ee8480681729d062613f 100644
--- a/theories/algebra/proofmode_classes.v
+++ b/iris/algebra/proofmode_classes.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* There are various versions of [IsOp] with different modes:
 
diff --git a/theories/algebra/sts.v b/iris/algebra/sts.v
similarity index 99%
rename from theories/algebra/sts.v
rename to iris/algebra/sts.v
index fae53edbd92b431d35084883bf06c501242b3ad4..65257373f03d9a38118c3b9c0c9b94688481794a 100644
--- a/theories/algebra/sts.v
+++ b/iris/algebra/sts.v
@@ -1,7 +1,7 @@
 From stdpp Require Export propset.
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import dra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Local Arguments valid _ _ !_ /.
 Local Arguments op _ _ !_ !_ /.
 Local Arguments core _ _ !_ /.
diff --git a/theories/algebra/ufrac.v b/iris/algebra/ufrac.v
similarity index 97%
rename from theories/algebra/ufrac.v
rename to iris/algebra/ufrac.v
index 12bcf2e9f8bbf6ffaaa6fc9cc7dfc916aee1fefe..12cb7244960843a180422f07b6b215b387a6ea2f 100644
--- a/theories/algebra/ufrac.v
+++ b/iris/algebra/ufrac.v
@@ -2,7 +2,7 @@
 elements are in the interval (0,..) instead of (0,1]. *)
 From iris.algebra Require Export cmra.
 From iris.algebra Require Import proofmode_classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Since the standard (0,1] fractional camera [frac] is used more often, we
 define [ufrac] through a [Definition] instead of a [Notation]. That way, Coq
diff --git a/theories/algebra/updates.v b/iris/algebra/updates.v
similarity index 99%
rename from theories/algebra/updates.v
rename to iris/algebra/updates.v
index d98af92a11b071cec7dc9ea6667493fd2c93cd50..1a671def3c9f2a3bfaf5724428e0c1250a610aeb 100644
--- a/theories/algebra/updates.v
+++ b/iris/algebra/updates.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export cmra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** * Frame preserving updates *)
 (* This quantifies over [option A] for the frame.  That is necessary to
diff --git a/theories/algebra/vector.v b/iris/algebra/vector.v
similarity index 98%
rename from theories/algebra/vector.v
rename to iris/algebra/vector.v
index 17f964f61304f4d6e7d49731cab1c51e2c4de4e7..dd2a27c399ce3fe0b00c923525f69d8704ca3b7b 100644
--- a/theories/algebra/vector.v
+++ b/iris/algebra/vector.v
@@ -1,7 +1,7 @@
 From stdpp Require Export vector.
 From iris.algebra Require Export ofe.
 From iris.algebra Require Import list.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section ofe.
   Context {A : ofeT}.
diff --git a/theories/algebra/view.v b/iris/algebra/view.v
similarity index 99%
rename from theories/algebra/view.v
rename to iris/algebra/view.v
index e8ad6e623f9ed8489e1a08fb29721a8413f4eae5..3a02bf95a7b25fd600ff764d0f7a2096194d1dd4 100644
--- a/theories/algebra/view.v
+++ b/iris/algebra/view.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export updates local_updates frac agree.
 From iris.algebra Require Import proofmode_classes big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The view camera with fractional authoritative elements *)
 (** The view camera, which is reminiscent of the views framework, is used to
diff --git a/theories/base_logic/algebra.v b/iris/base_logic/algebra.v
similarity index 99%
rename from theories/base_logic/algebra.v
rename to iris/base_logic/algebra.v
index c8d95b720b45de331dfc01ee1c6523b666b6ea05..35a40a4eec024add763b1bb83047b07f937b06d0 100644
--- a/theories/base_logic/algebra.v
+++ b/iris/base_logic/algebra.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import cmra view auth agree csum list excl gmap.
 From iris.algebra.lib Require Import excl_auth gmap_view.
 From iris.base_logic Require Import bi derived.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Internalized properties of our CMRA constructions. *)
 
diff --git a/theories/base_logic/base_logic.v b/iris/base_logic/base_logic.v
similarity index 90%
rename from theories/base_logic/base_logic.v
rename to iris/base_logic/base_logic.v
index 2c44469532d4eb17118502053e27b2b492d15131..66c98d955cdb804e0dcb8f4057c4f814a1c6af47 100644
--- a/theories/base_logic/base_logic.v
+++ b/iris/base_logic/base_logic.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi.
 From iris.base_logic Require Export derived proofmode algebra.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The trick of having multiple [uPred] modules, which are all exported in
 another [uPred] module is by Jason Gross and described in:
diff --git a/theories/base_logic/bi.v b/iris/base_logic/bi.v
similarity index 99%
rename from theories/base_logic/bi.v
rename to iris/base_logic/bi.v
index fa2327ae6c0df8517ad05bc054e38aaf5a0ab694..ad6814fb4cb4bc5726ac163da1d23a78d8596076 100644
--- a/theories/base_logic/bi.v
+++ b/iris/base_logic/bi.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export derived_connectives updates internal_eq plainly.
 From iris.base_logic Require Export upred.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred_primitive.
 
 (** BI instances for [uPred], and re-stating the remaining primitive laws in
diff --git a/theories/base_logic/bupd_alt.v b/iris/base_logic/bupd_alt.v
similarity index 99%
rename from theories/base_logic/bupd_alt.v
rename to iris/base_logic/bupd_alt.v
index 307f388509763355a70d964b891279050da82f2f..efb542d4c491f4f72b59acbc6a6d7577a988ce43 100644
--- a/theories/base_logic/bupd_alt.v
+++ b/iris/base_logic/bupd_alt.v
@@ -1,6 +1,6 @@
 From iris.proofmode Require Import tactics.
 From iris.base_logic Require Export base_logic.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The sections add extra BI assumptions, which is only picked up with [Type*]. *)
 Set Default Proof Using "Type*".
diff --git a/theories/base_logic/derived.v b/iris/base_logic/derived.v
similarity index 98%
rename from theories/base_logic/derived.v
rename to iris/base_logic/derived.v
index 192810f68d89c15a840b0137cd8b597bdc053c63..ad9a4c01ef4036b451e23f9651ad48e7c924f6f3 100644
--- a/theories/base_logic/derived.v
+++ b/iris/base_logic/derived.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import frac.
 From iris.bi Require Export bi.
 From iris.base_logic Require Export bi.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.bi base_logic.bi.uPred.
 
 (** Derived laws for Iris-specific primitive connectives (own, valid).
diff --git a/theories/base_logic/lib/auth.v b/iris/base_logic/lib/auth.v
similarity index 99%
rename from theories/base_logic/lib/auth.v
rename to iris/base_logic/lib/auth.v
index 2d99ad3c102b90743203fdd22c20cde5a704038d..5733f9aa40587acd907dd6c9266ba3e935496cea 100644
--- a/theories/base_logic/lib/auth.v
+++ b/iris/base_logic/lib/auth.v
@@ -2,7 +2,7 @@ From iris.algebra Require Export auth.
 From iris.algebra Require Import gmap.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (* The CMRA we need. *)
diff --git a/theories/base_logic/lib/boxes.v b/iris/base_logic/lib/boxes.v
similarity index 99%
rename from theories/base_logic/lib/boxes.v
rename to iris/base_logic/lib/boxes.v
index cad3771656e9710fc039b90072bdc7ca3b2c2437..8f0620e034ac5601ee4a51a20d4334e90264c1be 100644
--- a/theories/base_logic/lib/boxes.v
+++ b/iris/base_logic/lib/boxes.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import lib.excl_auth gmap agree.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** The CMRAs we need. *)
diff --git a/theories/base_logic/lib/cancelable_invariants.v b/iris/base_logic/lib/cancelable_invariants.v
similarity index 99%
rename from theories/base_logic/lib/cancelable_invariants.v
rename to iris/base_logic/lib/cancelable_invariants.v
index 0a4407c19ad0fd715cc27ec0c8ac25a26812396c..5ad576c95f142e14e165c43a0b1f94bbd9b93d6e 100644
--- a/theories/base_logic/lib/cancelable_invariants.v
+++ b/iris/base_logic/lib/cancelable_invariants.v
@@ -2,7 +2,7 @@ From iris.algebra Require Export frac.
 From iris.bi.lib Require Import fractional.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 Class cinvG Σ := cinv_inG :> inG Σ fracR.
diff --git a/theories/base_logic/lib/fancy_updates.v b/iris/base_logic/lib/fancy_updates.v
similarity index 99%
rename from theories/base_logic/lib/fancy_updates.v
rename to iris/base_logic/lib/fancy_updates.v
index 558fae055067fa77d4a9d79f4ebef5cd46022e49..7bdce06e52e41ca819bae2c76eca173aa7034da2 100644
--- a/theories/base_logic/lib/fancy_updates.v
+++ b/iris/base_logic/lib/fancy_updates.v
@@ -3,7 +3,7 @@ From iris.algebra Require Import gmap auth agree gset coPset.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export own.
 From iris.base_logic.lib Require Import wsat.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Export invG.
 Import uPred.
 
diff --git a/theories/base_logic/lib/fancy_updates_from_vs.v b/iris/base_logic/lib/fancy_updates_from_vs.v
similarity index 98%
rename from theories/base_logic/lib/fancy_updates_from_vs.v
rename to iris/base_logic/lib/fancy_updates_from_vs.v
index f1c0ccc101bbd13b47ce0240234107100cfd8ca1..a3d331e041f048674db04cac979bded9958ef859 100644
--- a/theories/base_logic/lib/fancy_updates_from_vs.v
+++ b/iris/base_logic/lib/fancy_updates_from_vs.v
@@ -4,7 +4,7 @@ laws of the view shift. *)
 From stdpp Require Export coPset.
 From iris.proofmode Require Import tactics.
 From iris.base_logic Require Export base_logic.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The sections add extra BI assumptions, which is only picked up with [Type*]. *)
 Set Default Proof Using "Type*".
diff --git a/theories/base_logic/lib/gen_heap.v b/iris/base_logic/lib/gen_heap.v
similarity index 99%
rename from theories/base_logic/lib/gen_heap.v
rename to iris/base_logic/lib/gen_heap.v
index 73d9aa5a5b3570cc223e1d1ea92778bc9b2e8b67..1963deca972323d493aa4ad4e5553ecd83174172 100644
--- a/theories/base_logic/lib/gen_heap.v
+++ b/iris/base_logic/lib/gen_heap.v
@@ -3,7 +3,7 @@ From iris.algebra Require Import gmap_view namespace_map agree frac.
 From iris.bi.lib Require Import fractional.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export own.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** This file provides a generic mechanism for a language-level point-to
diff --git a/theories/base_logic/lib/gen_inv_heap.v b/iris/base_logic/lib/gen_inv_heap.v
similarity index 99%
rename from theories/base_logic/lib/gen_inv_heap.v
rename to iris/base_logic/lib/gen_inv_heap.v
index b180bb9b6c587e72f572004b41f879be332849dc..da06674624ff70d661a9629958d63ca4a672fd69 100644
--- a/theories/base_logic/lib/gen_inv_heap.v
+++ b/iris/base_logic/lib/gen_inv_heap.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import auth excl gmap.
 From iris.base_logic.lib Require Import own invariants gen_heap.
 From iris.proofmode Require Import tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** An "invariant" location is a location that has some invariant about its
 value attached to it, and that can never be deallocated explicitly by the
diff --git a/theories/base_logic/lib/ghost_var.v b/iris/base_logic/lib/ghost_var.v
similarity index 98%
rename from theories/base_logic/lib/ghost_var.v
rename to iris/base_logic/lib/ghost_var.v
index c3592a927fbf79f3d7d916371734e81abbbe6042..9c17c521a5af42ac34c2de0cca128624a8b5b6ee 100644
--- a/theories/base_logic/lib/ghost_var.v
+++ b/iris/base_logic/lib/ghost_var.v
@@ -4,7 +4,7 @@ From iris.algebra Require Import frac_agree.
 From iris.bi.lib Require Import fractional.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export own.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The CMRA we need. *)
 Class ghost_varG Σ (A : Type) := GhostVarG {
diff --git a/theories/base_logic/lib/invariants.v b/iris/base_logic/lib/invariants.v
similarity index 99%
rename from theories/base_logic/lib/invariants.v
rename to iris/base_logic/lib/invariants.v
index 5fa9cd8d0d8889f74b6a5abd58f7bd744d9935c4..e7cc9b638ef0600a83cc9f7fa1fa5de407ccc083 100644
--- a/theories/base_logic/lib/invariants.v
+++ b/iris/base_logic/lib/invariants.v
@@ -3,7 +3,7 @@ From iris.algebra Require Import gmap.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export fancy_updates.
 From iris.base_logic.lib Require Import wsat.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** Semantic Invariants *)
diff --git a/theories/base_logic/lib/iprop.v b/iris/base_logic/lib/iprop.v
similarity index 99%
rename from theories/base_logic/lib/iprop.v
rename to iris/base_logic/lib/iprop.v
index a40c6d1cf1072d3c87d58abfc50b89fc9e9a3bd3..36a4fdd4f2d470afb57ca4f7d401608121d766bb 100644
--- a/theories/base_logic/lib/iprop.v
+++ b/iris/base_logic/lib/iprop.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import gmap.
 From iris.algebra Require cofe_solver.
 From iris.base_logic Require Export base_logic.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** In this file we construct the type [iProp] of propositions of the Iris
 logic. This is done by solving the following recursive domain equation:
diff --git a/theories/base_logic/lib/mnat.v b/iris/base_logic/lib/mnat.v
similarity index 99%
rename from theories/base_logic/lib/mnat.v
rename to iris/base_logic/lib/mnat.v
index b25f4358d47efa3f3f6bc2055cc1d26425cae1cf..b8f55488897aa2abcd1b5567f560d8a319088b87 100644
--- a/theories/base_logic/lib/mnat.v
+++ b/iris/base_logic/lib/mnat.v
@@ -12,7 +12,7 @@ From iris.algebra.lib Require Import mnat_auth.
 From iris.bi.lib Require Import fractional.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export own.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Class mnatG Σ :=
   MnatG { mnatG_inG :> inG Σ mnat_authR; }.
diff --git a/theories/base_logic/lib/na_invariants.v b/iris/base_logic/lib/na_invariants.v
similarity index 99%
rename from theories/base_logic/lib/na_invariants.v
rename to iris/base_logic/lib/na_invariants.v
index 9f3f659ce232615818ac3a201166f930cc44c4a9..f4874e831937de6d0d481c872f60f3ccb3ad114c 100644
--- a/theories/base_logic/lib/na_invariants.v
+++ b/iris/base_logic/lib/na_invariants.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import gset coPset.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (* Non-atomic ("thread-local") invariants. *)
diff --git a/theories/base_logic/lib/own.v b/iris/base_logic/lib/own.v
similarity index 99%
rename from theories/base_logic/lib/own.v
rename to iris/base_logic/lib/own.v
index 3417797d88fc66204b7c03519156fefe6381a0f0..e95e32e795180d69ea7ee857e2fa1e21a2070809 100644
--- a/theories/base_logic/lib/own.v
+++ b/iris/base_logic/lib/own.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import functions gmap proofmode_classes.
 From iris.proofmode Require Import classes.
 From iris.base_logic.lib Require Export iprop.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** The class [inG Σ A] expresses that the CMRA [A] is in the list of functors
diff --git a/theories/base_logic/lib/proph_map.v b/iris/base_logic/lib/proph_map.v
similarity index 99%
rename from theories/base_logic/lib/proph_map.v
rename to iris/base_logic/lib/proph_map.v
index 19cacccd94283b4b1f2899fc74f64c04950cd1f2..d12feb53084a1f53ecb865b3a47d45d5c1b2cffc 100644
--- a/theories/base_logic/lib/proph_map.v
+++ b/iris/base_logic/lib/proph_map.v
@@ -1,7 +1,7 @@
 From iris.proofmode Require Import tactics.
 From iris.algebra Require Import gmap_view list.
 From iris.base_logic.lib Require Export own.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 Local Notation proph_map P V := (gmap P (list V)).
diff --git a/theories/base_logic/lib/saved_prop.v b/iris/base_logic/lib/saved_prop.v
similarity index 99%
rename from theories/base_logic/lib/saved_prop.v
rename to iris/base_logic/lib/saved_prop.v
index f9915ee2b357ecfbed07c2b0b593e07408a23768..1038d4d715a73f3de79e6e7dbd337752610c42fd 100644
--- a/theories/base_logic/lib/saved_prop.v
+++ b/iris/base_logic/lib/saved_prop.v
@@ -2,7 +2,7 @@ From stdpp Require Import gmap.
 From iris.algebra Require Import agree.
 From iris.proofmode Require Import tactics.
 From iris.base_logic Require Export own.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (* "Saved anything" -- this can give you saved propositions, saved predicates,
diff --git a/theories/base_logic/lib/sts.v b/iris/base_logic/lib/sts.v
similarity index 99%
rename from theories/base_logic/lib/sts.v
rename to iris/base_logic/lib/sts.v
index 329ead42a5efea3f83a025b1782129b8450f21b7..d4e4f8680c7144ea0492875dee49f39fe1635ffe 100644
--- a/theories/base_logic/lib/sts.v
+++ b/iris/base_logic/lib/sts.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Export sts.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** The CMRA we need. *)
diff --git a/theories/base_logic/lib/viewshifts.v b/iris/base_logic/lib/viewshifts.v
similarity index 98%
rename from theories/base_logic/lib/viewshifts.v
rename to iris/base_logic/lib/viewshifts.v
index 04b3358364c02d6eeb98d2ecefb8c9c50c47944a..5aa7b55e25e1a3ea6951ff3a4db1579538e7f9d8 100644
--- a/theories/base_logic/lib/viewshifts.v
+++ b/iris/base_logic/lib/viewshifts.v
@@ -1,6 +1,6 @@
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition vs `{!invG Σ} (E1 E2 : coPset) (P Q : iProp Σ) : iProp Σ :=
   □ (P -∗ |={E1,E2}=> Q).
diff --git a/theories/base_logic/lib/wsat.v b/iris/base_logic/lib/wsat.v
similarity index 99%
rename from theories/base_logic/lib/wsat.v
rename to iris/base_logic/lib/wsat.v
index c64dcebcdb96e2f3fcba1871562f5dad402eec01..d33c9105bb808080bd0626f4b4094978016c9bbb 100644
--- a/theories/base_logic/lib/wsat.v
+++ b/iris/base_logic/lib/wsat.v
@@ -2,7 +2,7 @@ From stdpp Require Export coPset.
 From iris.algebra Require Import gmap_view gset coPset.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export own.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** All definitions in this file are internal to [fancy_updates] with the
 exception of what's in the [invG] module. The module [invG] is thus exported in
diff --git a/theories/base_logic/proofmode.v b/iris/base_logic/proofmode.v
similarity index 97%
rename from theories/base_logic/proofmode.v
rename to iris/base_logic/proofmode.v
index 04d05d104117f3e38cc3341aa986e6c4fbeb5de6..dfebe074204cd4c611ce3f8b0d2dd4c06a459b9f 100644
--- a/theories/base_logic/proofmode.v
+++ b/iris/base_logic/proofmode.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import proofmode_classes.
 From iris.proofmode Require Import classes.
 From iris.base_logic Require Export derived.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Import base_logic.bi.uPred.
 
diff --git a/theories/base_logic/upred.v b/iris/base_logic/upred.v
similarity index 99%
rename from theories/base_logic/upred.v
rename to iris/base_logic/upred.v
index 445ad37bad26078267ddd5c37ab0ca2e065a9068..bdb236c4e46a27b084674a053242e628666ad69f 100644
--- a/theories/base_logic/upred.v
+++ b/iris/base_logic/upred.v
@@ -1,7 +1,8 @@
 From stdpp Require Import finite.
 From iris.algebra Require Export cmra updates.
 From iris.bi Require Import notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
+
 Local Hint Extern 1 (_ ≼ _) => etrans; [eassumption|] : core.
 Local Hint Extern 1 (_ ≼ _) => etrans; [|eassumption] : core.
 Local Hint Extern 10 (_ ≤ _) => lia : core.
diff --git a/theories/bi/ascii.v b/iris/bi/ascii.v
similarity index 99%
rename from theories/bi/ascii.v
rename to iris/bi/ascii.v
index 434592fd931fdb3b7f0fe39e0c920aedc6a6bb00..287866f6b2b62f735ed9ba62a5cc5bd6531dfd45 100644
--- a/theories/bi/ascii.v
+++ b/iris/bi/ascii.v
@@ -1,5 +1,5 @@
 From iris.bi Require Import interface derived_connectives updates.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Notation "P |- Q" := (P ⊢ Q)
   (at level 99, Q at level 200, right associativity, only parsing) : stdpp_scope.
diff --git a/theories/bi/bi.v b/iris/bi/bi.v
similarity index 85%
rename from theories/bi/bi.v
rename to iris/bi/bi.v
index 66afc4ad7ea0f1b1e48c0fce76b75777b27a528e..f9ef24760a22defdb115ca31410fb57227e12191 100644
--- a/theories/bi/bi.v
+++ b/iris/bi/bi.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export derived_laws derived_laws_later big_op.
 From iris.bi Require Export updates internal_eq plainly embedding.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Module Import bi.
   Export bi.interface.bi.
diff --git a/theories/bi/big_op.v b/iris/bi/big_op.v
similarity index 99%
rename from theories/bi/big_op.v
rename to iris/bi/big_op.v
index 2f260da1223e33f590abb5daf2f3b52209cab694..09ac481d1b7936e153636975e3198e38c7ff9ef2 100644
--- a/theories/bi/big_op.v
+++ b/iris/bi/big_op.v
@@ -2,7 +2,7 @@ From stdpp Require Import countable fin_sets functions.
 From iris.algebra Require Export big_op.
 From iris.algebra Require Import list gmap.
 From iris.bi Require Import derived_laws_later.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import interface.bi derived_laws.bi derived_laws_later.bi.
 
 (** Notations for unary variants *)
diff --git a/theories/bi/derived_connectives.v b/iris/bi/derived_connectives.v
similarity index 99%
rename from theories/bi/derived_connectives.v
rename to iris/bi/derived_connectives.v
index 671a8ae13784a2815e9ecb3691b4d968da1e18db..88e7dcca53f19f56a198e9f21662aa9da0294f45 100644
--- a/theories/bi/derived_connectives.v
+++ b/iris/bi/derived_connectives.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Import monoid.
 From iris.bi Require Export interface.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition bi_iff {PROP : bi} (P Q : PROP) : PROP := ((P → Q) ∧ (Q → P))%I.
 Arguments bi_iff {_} _%I _%I : simpl never.
diff --git a/theories/bi/derived_laws.v b/iris/bi/derived_laws.v
similarity index 99%
rename from theories/bi/derived_laws.v
rename to iris/bi/derived_laws.v
index aab10e497ef6f206e84b35a0bcd383c0750ae58a..8f7c63fd052680eaa36ad5d2bd4b38cb19dcda57 100644
--- a/theories/bi/derived_laws.v
+++ b/iris/bi/derived_laws.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Import monoid.
 From iris.bi Require Export derived_connectives.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The sections add [BiAffine] and the like, which is only picked up with [Type*]. *)
 Set Default Proof Using "Type*".
diff --git a/theories/bi/derived_laws_later.v b/iris/bi/derived_laws_later.v
similarity index 99%
rename from theories/bi/derived_laws_later.v
rename to iris/bi/derived_laws_later.v
index 85b375a2c6ca203b317086b07e1611312f77401e..3f61a09c42a3d8d0b9f60bf5e3ce03fd3f9caa6b 100644
--- a/theories/bi/derived_laws_later.v
+++ b/iris/bi/derived_laws_later.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Import monoid.
 From iris.bi Require Export derived_laws.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Module bi.
 Import interface.bi.
diff --git a/theories/bi/embedding.v b/iris/bi/embedding.v
similarity index 99%
rename from theories/bi/embedding.v
rename to iris/bi/embedding.v
index bb73cf16aff25a4fce9395006c53d5d532f4ee2e..354028caabd165472d308e02fb54b0fd1c44b8ef 100644
--- a/theories/bi/embedding.v
+++ b/iris/bi/embedding.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Import monoid.
 From iris.bi Require Import interface derived_laws_later big_op.
 From iris.bi Require Import plainly updates internal_eq.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The sections add extra BI assumptions, which is only picked up with [Type*]. *)
 Set Default Proof Using "Type*".
diff --git a/theories/bi/interface.v b/iris/bi/interface.v
similarity index 99%
rename from theories/bi/interface.v
rename to iris/bi/interface.v
index dc7155fb2107c40fb631f7bf13524d146a542071..f3f66ba4f9fc016999aa3551268c999c779c39c4 100644
--- a/theories/bi/interface.v
+++ b/iris/bi/interface.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export ofe.
 From iris.bi Require Export notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Set Primitive Projections.
 
 Section bi_mixin.
diff --git a/theories/bi/internal_eq.v b/iris/bi/internal_eq.v
similarity index 99%
rename from theories/bi/internal_eq.v
rename to iris/bi/internal_eq.v
index df3f1a817bf9c7e06877cd697d1e0f2ff771d10a..4562e58717e7fde0d1f011612e4b108a647bbb60 100644
--- a/theories/bi/internal_eq.v
+++ b/iris/bi/internal_eq.v
@@ -1,5 +1,5 @@
 From iris.bi Require Import derived_laws_later big_op.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import interface.bi derived_laws.bi derived_laws_later.bi.
 
 (** This file defines a type class for BIs with a notion of internal equality.
diff --git a/theories/bi/lib/atomic.v b/iris/bi/lib/atomic.v
similarity index 99%
rename from theories/bi/lib/atomic.v
rename to iris/bi/lib/atomic.v
index d79d71a8508ad103c001ce7bf95f59c31164a694..2658652ece2efd2c39d51badde8ee80bd5c57e0b 100644
--- a/theories/bi/lib/atomic.v
+++ b/iris/bi/lib/atomic.v
@@ -2,7 +2,7 @@ From stdpp Require Import coPset namespaces.
 From iris.bi Require Export bi updates laterable.
 From iris.bi.lib Require Import fixpoint.
 From iris.proofmode Require Import coq_tactics tactics reduction.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Conveniently split a conjunction on both assumption and conclusion. *)
 Local Tactic Notation "iSplitWith" constr(H) :=
diff --git a/theories/bi/lib/core.v b/iris/bi/lib/core.v
similarity index 98%
rename from theories/bi/lib/core.v
rename to iris/bi/lib/core.v
index dc67214dc5e3844f94a5a6f8bcf082545f733d4b..3d2380430f8ad0ac1dab1bfa1849dd79e33e031b 100644
--- a/theories/bi/lib/core.v
+++ b/iris/bi/lib/core.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi plainly.
 From iris.proofmode Require Import tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (** The "core" of an assertion is its maximal persistent part,
diff --git a/theories/bi/lib/counterexamples.v b/iris/bi/lib/counterexamples.v
similarity index 99%
rename from theories/bi/lib/counterexamples.v
rename to iris/bi/lib/counterexamples.v
index de6465eca33d408387c6689333154f044a15c14a..23a96554fd7a4b1f5036c9c7231d5d4dff82b0c7 100644
--- a/theories/bi/lib/counterexamples.v
+++ b/iris/bi/lib/counterexamples.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi.
 From iris.proofmode Require Import tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The sections add extra BI assumptions, which is only picked up with "Type"*. *)
 Set Default Proof Using "Type*".
diff --git a/theories/bi/lib/fixpoint.v b/iris/bi/lib/fixpoint.v
similarity index 99%
rename from theories/bi/lib/fixpoint.v
rename to iris/bi/lib/fixpoint.v
index 8935289d8f80aaf3a634e5756d268ac029e019d8..9ca541ab8d238724d3e61a0776f9fd278a4b2a25 100644
--- a/theories/bi/lib/fixpoint.v
+++ b/iris/bi/lib/fixpoint.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi.
 From iris.proofmode Require Import tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (** Least and greatest fixpoint of a monotone function, defined entirely inside
diff --git a/theories/bi/lib/fractional.v b/iris/bi/lib/fractional.v
similarity index 99%
rename from theories/bi/lib/fractional.v
rename to iris/bi/lib/fractional.v
index 4d4b9ffa5f0661a6a677aea8257d9b4a2d2c78f5..644c47ef29330c4f3eef40004f66590acd14fca3 100644
--- a/theories/bi/lib/fractional.v
+++ b/iris/bi/lib/fractional.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi.
 From iris.proofmode Require Import classes class_instances.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Class Fractional {PROP : bi} (Φ : Qp → PROP) :=
   fractional p q : Φ (p + q)%Qp ⊣⊢ Φ p ∗ Φ q.
diff --git a/theories/bi/lib/laterable.v b/iris/bi/lib/laterable.v
similarity index 99%
rename from theories/bi/lib/laterable.v
rename to iris/bi/lib/laterable.v
index eaac68789a4775ffa7c5695d86019370bd8d3915..1d11af00ca4a59e241a5f5ddc774d70bde891c9a 100644
--- a/theories/bi/lib/laterable.v
+++ b/iris/bi/lib/laterable.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi.
 From iris.proofmode Require Import tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The class of laterable assertions *)
 Class Laterable {PROP : bi} (P : PROP) := laterable :
diff --git a/theories/bi/lib/relations.v b/iris/bi/lib/relations.v
similarity index 98%
rename from theories/bi/lib/relations.v
rename to iris/bi/lib/relations.v
index 11f5d6aa75d5e2b8d3b825d103691d909d7792e9..1d1d09ffea98017be3b11e2da4814f33b342b381 100644
--- a/theories/bi/lib/relations.v
+++ b/iris/bi/lib/relations.v
@@ -2,7 +2,7 @@
 its reflexive transitive closure. *)
 From iris.bi.lib Require Export fixpoint.
 From iris.proofmode Require Import tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* The sections add extra BI assumptions, which is only picked up with "Type"*. *)
 Set Default Proof Using "Type*".
diff --git a/theories/bi/monpred.v b/iris/bi/monpred.v
similarity index 99%
rename from theories/bi/monpred.v
rename to iris/bi/monpred.v
index f2bb21e9a3f0d255a31d0ab44790c21675dbce3d..d1f047eb42a687c9efd9993f29453a18c3c3734c 100644
--- a/theories/bi/monpred.v
+++ b/iris/bi/monpred.v
@@ -1,6 +1,6 @@
 From stdpp Require Import coPset.
 From iris.bi Require Import bi.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Definitions. *)
 Structure biIndex :=
diff --git a/theories/bi/notation.v b/iris/bi/notation.v
similarity index 99%
rename from theories/bi/notation.v
rename to iris/bi/notation.v
index bea7f6b417b49412d3a49eb7e09defa70a4af5cf..117ced195b6f84951193b3027df77d98975e2d36 100644
--- a/theories/bi/notation.v
+++ b/iris/bi/notation.v
@@ -1,4 +1,4 @@
-From iris Require Import options.
+From iris.prelude Require Import options.
 (** Just reserve the notation. *)
 
 (** * Turnstiles *)
diff --git a/theories/bi/plainly.v b/iris/bi/plainly.v
similarity index 99%
rename from theories/bi/plainly.v
rename to iris/bi/plainly.v
index c35d743797a539320a0d0e3390a20c1ee8786678..4d2439693a914b185a7799e0d7eb1bc522b72220 100644
--- a/theories/bi/plainly.v
+++ b/iris/bi/plainly.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Import monoid.
 From iris.bi Require Import derived_laws_later big_op internal_eq.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import interface.bi derived_laws.bi derived_laws_later.bi.
 
 (* The sections add [BiAffine] and the like, which is only picked up with "Type"*. *)
diff --git a/theories/bi/telescopes.v b/iris/bi/telescopes.v
similarity index 98%
rename from theories/bi/telescopes.v
rename to iris/bi/telescopes.v
index 2bef8b0e78e131b20140a3b57642ac86d031419f..b2836192c84f085f32e677d9d9c64b8ce24a9d03 100644
--- a/theories/bi/telescopes.v
+++ b/iris/bi/telescopes.v
@@ -1,6 +1,6 @@
 From stdpp Require Export telescopes.
 From iris.bi Require Export bi.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (* This cannot import the proofmode because it is imported by the proofmode! *)
diff --git a/theories/bi/updates.v b/iris/bi/updates.v
similarity index 99%
rename from theories/bi/updates.v
rename to iris/bi/updates.v
index 0674386abc4d2714d604fbd9c6128a51d077baf9..65b06d2514aefb11ca3637ec0a40c9bd17111239 100644
--- a/theories/bi/updates.v
+++ b/iris/bi/updates.v
@@ -1,6 +1,6 @@
 From stdpp Require Import coPset.
 From iris.bi Require Import interface derived_laws_later big_op plainly.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import interface.bi derived_laws.bi derived_laws_later.bi.
 
 (* The sections add extra BI assumptions, which is only picked up with "Type"*. *)
diff --git a/theories/bi/weakestpre.v b/iris/bi/weakestpre.v
similarity index 99%
rename from theories/bi/weakestpre.v
rename to iris/bi/weakestpre.v
index ee7181d5cdefbe4c500410a268f0e7a31a0c1760..75963fa02e3b407c9c0864c02b89d1b6febf3a98 100644
--- a/theories/bi/weakestpre.v
+++ b/iris/bi/weakestpre.v
@@ -1,7 +1,7 @@
 From stdpp Require Export coPset.
 From iris.bi Require Import interface derived_connectives.
 From iris.program_logic Require Import language.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Inductive stuckness := NotStuck | MaybeStuck.
 
diff --git a/theories/options.v b/iris/prelude/options.v
similarity index 93%
rename from theories/options.v
rename to iris/prelude/options.v
index 1e4c1f31180de56458fb5f0c68d15a150293786e..22d74e4a485069bc1cc8ce71dcf386d6e840b23a 100644
--- a/theories/options.v
+++ b/iris/prelude/options.v
@@ -12,5 +12,5 @@ Export Set Default Goal Selector "!".
 
 (* "Fake" import to whitelist this file for the check that ensures we import
 this file everywhere.
-From iris Require Import options.
+From iris.prelude Require Import options.
 *)
diff --git a/theories/program_logic/adequacy.v b/iris/program_logic/adequacy.v
similarity index 99%
rename from theories/program_logic/adequacy.v
rename to iris/program_logic/adequacy.v
index 612af7f2996ec4101ee3209c06c81e4f18be33f0..ef2abff218b916020e2fb5dd7de661babd2feb06 100644
--- a/theories/program_logic/adequacy.v
+++ b/iris/program_logic/adequacy.v
@@ -2,7 +2,7 @@ From iris.algebra Require Import gmap auth agree gset coPset.
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Import wsat.
 From iris.program_logic Require Export weakestpre.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** This file contains the adequacy statements of the Iris program logic. First
diff --git a/theories/program_logic/atomic.v b/iris/program_logic/atomic.v
similarity index 99%
rename from theories/program_logic/atomic.v
rename to iris/program_logic/atomic.v
index 13be0ce35f1feccebdedc00a519b03f293f3dfa1..04a07d03ef49c36280da23a82ed4f7c72a028d7a 100644
--- a/theories/program_logic/atomic.v
+++ b/iris/program_logic/atomic.v
@@ -4,7 +4,7 @@ From iris.bi.lib Require Export atomic.
 From iris.proofmode Require Import tactics classes.
 From iris.program_logic Require Export weakestpre.
 From iris.base_logic Require Import invariants.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* This hard-codes the inner mask to be empty, because we have yet to find an
 example where we want it to be anything else. *)
diff --git a/theories/program_logic/ectx_language.v b/iris/program_logic/ectx_language.v
similarity index 99%
rename from theories/program_logic/ectx_language.v
rename to iris/program_logic/ectx_language.v
index ebf94a86747033358269852e0dcf7fed32816f05..a76f590edcf6cff23fa1f8fba2289b525ca8f81f 100644
--- a/theories/program_logic/ectx_language.v
+++ b/iris/program_logic/ectx_language.v
@@ -2,7 +2,7 @@
     that this gives rise to a "language" in the Iris sense. *)
 From iris.algebra Require Export base.
 From iris.program_logic Require Import language.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** TAKE CARE: When you define an [ectxLanguage] canonical structure for your
 language, you need to also define a corresponding [language] canonical
diff --git a/theories/program_logic/ectx_lifting.v b/iris/program_logic/ectx_lifting.v
similarity index 99%
rename from theories/program_logic/ectx_lifting.v
rename to iris/program_logic/ectx_lifting.v
index 926ae75c554eb27f2e558bde25d825ee3bf28608..11372d1c7750545bf738f4381d06dce5be7713e7 100644
--- a/theories/program_logic/ectx_lifting.v
+++ b/iris/program_logic/ectx_lifting.v
@@ -1,7 +1,7 @@
 (** Some derived lemmas for ectx-based languages *)
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export ectx_language weakestpre lifting.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section wp.
 Context {Λ : ectxLanguage} `{!irisG Λ Σ} {Hinh : Inhabited (state Λ)}.
diff --git a/theories/program_logic/ectxi_language.v b/iris/program_logic/ectxi_language.v
similarity index 99%
rename from theories/program_logic/ectxi_language.v
rename to iris/program_logic/ectxi_language.v
index e9e9477c5f5a7a61ff9b1b534c87a3b936fa9058..e3a245b2e4912303db0bed39c08ef405452a9878 100644
--- a/theories/program_logic/ectxi_language.v
+++ b/iris/program_logic/ectxi_language.v
@@ -2,7 +2,7 @@
     a proof that these are instances of general ectx-based languages. *)
 From iris.algebra Require Export base.
 From iris.program_logic Require Import language ectx_language.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** TAKE CARE: When you define an [ectxiLanguage] canonical structure for your
 language, you need to also define a corresponding [language] and [ectxLanguage]
diff --git a/theories/program_logic/hoare.v b/iris/program_logic/hoare.v
similarity index 99%
rename from theories/program_logic/hoare.v
rename to iris/program_logic/hoare.v
index b08d144fbf58be19cb1f5b1fc59932d77ba06fe3..45f9702cda33308c10701ed9f6ce8411141801a5 100644
--- a/theories/program_logic/hoare.v
+++ b/iris/program_logic/hoare.v
@@ -1,7 +1,7 @@
 From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export viewshifts.
 From iris.program_logic Require Export weakestpre.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition ht `{!irisG Λ Σ} (s : stuckness) (E : coPset) (P : iProp Σ)
     (e : expr Λ) (Φ : val Λ → iProp Σ) : iProp Σ :=
diff --git a/theories/program_logic/language.v b/iris/program_logic/language.v
similarity index 99%
rename from theories/program_logic/language.v
rename to iris/program_logic/language.v
index 603391006be668ebc30a8b6e1223414199da8f10..c599f97c93ea499bb182593cad42ef426fe65913 100644
--- a/theories/program_logic/language.v
+++ b/iris/program_logic/language.v
@@ -1,5 +1,5 @@
 From iris.algebra Require Export ofe.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section language_mixin.
   Context {expr val state observation : Type}.
diff --git a/theories/program_logic/lifting.v b/iris/program_logic/lifting.v
similarity index 99%
rename from theories/program_logic/lifting.v
rename to iris/program_logic/lifting.v
index bb5fa43d662c2d450ab3c0edfbef4498ff35574e..9b532e703650ff8286a6d1c2082d79f7a3006ae3 100644
--- a/theories/program_logic/lifting.v
+++ b/iris/program_logic/lifting.v
@@ -3,7 +3,7 @@ semantics to the program logic. *)
 
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section lifting.
 Context `{!irisG Λ Σ}.
diff --git a/theories/program_logic/ownp.v b/iris/program_logic/ownp.v
similarity index 99%
rename from theories/program_logic/ownp.v
rename to iris/program_logic/ownp.v
index 78e6ffcf9bdc044edb08677675c277bf42f4fc3f..9b8e438be1a5e1f2bcb549a5366ed79bc8da59e3 100644
--- a/theories/program_logic/ownp.v
+++ b/iris/program_logic/ownp.v
@@ -3,7 +3,7 @@ From iris.proofmode Require Import tactics classes.
 From iris.program_logic Require Export weakestpre.
 From iris.program_logic Require Import lifting adequacy.
 From iris.program_logic Require ectx_language.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (**
 This module provides an interface to handling ownership of the global state that
diff --git a/theories/program_logic/total_adequacy.v b/iris/program_logic/total_adequacy.v
similarity index 99%
rename from theories/program_logic/total_adequacy.v
rename to iris/program_logic/total_adequacy.v
index 1825b3cd9779245e1de2c2f0e3c3c590c4b1998e..19ffe2810756a8e749fecc599089ddc6d8eeafb3 100644
--- a/theories/program_logic/total_adequacy.v
+++ b/iris/program_logic/total_adequacy.v
@@ -2,7 +2,7 @@ From iris.algebra Require Import gmap auth agree gset coPset list.
 From iris.bi Require Import big_op fixpoint.
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export total_weakestpre adequacy.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 Section adequacy.
diff --git a/theories/program_logic/total_ectx_lifting.v b/iris/program_logic/total_ectx_lifting.v
similarity index 98%
rename from theories/program_logic/total_ectx_lifting.v
rename to iris/program_logic/total_ectx_lifting.v
index 99c34b6d3b85db35fff72f208b3aa6046af791f2..2d0d1043db9ecb81b232e7cee3fbf3e56277aa9c 100644
--- a/theories/program_logic/total_ectx_lifting.v
+++ b/iris/program_logic/total_ectx_lifting.v
@@ -1,7 +1,7 @@
 (** Some derived lemmas for ectx-based languages *)
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export ectx_language total_weakestpre total_lifting.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section wp.
 Context {Λ : ectxLanguage} `{!irisG Λ Σ} {Hinh : Inhabited (state Λ)}.
diff --git a/theories/program_logic/total_lifting.v b/iris/program_logic/total_lifting.v
similarity index 98%
rename from theories/program_logic/total_lifting.v
rename to iris/program_logic/total_lifting.v
index 19b9af5a28a72f19f3234397d44ab6adf2b952c4..c1e4eb617859d4f803e99ecda46b97f82a276233 100644
--- a/theories/program_logic/total_lifting.v
+++ b/iris/program_logic/total_lifting.v
@@ -1,7 +1,7 @@
 From iris.bi Require Export big_op.
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export total_weakestpre.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Section lifting.
 Context `{!irisG Λ Σ}.
diff --git a/theories/program_logic/total_weakestpre.v b/iris/program_logic/total_weakestpre.v
similarity index 99%
rename from theories/program_logic/total_weakestpre.v
rename to iris/program_logic/total_weakestpre.v
index 1fa5c032451c0deda1c75b38eb8a6a57143415e2..e1aa91555d668bf9a8203af1bf5861bca5206474 100644
--- a/theories/program_logic/total_weakestpre.v
+++ b/iris/program_logic/total_weakestpre.v
@@ -1,7 +1,7 @@
 From iris.bi Require Import fixpoint big_op.
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 (** The definition of total weakest preconditions is very similar to the
diff --git a/theories/program_logic/weakestpre.v b/iris/program_logic/weakestpre.v
similarity index 99%
rename from theories/program_logic/weakestpre.v
rename to iris/program_logic/weakestpre.v
index e0d639fb6695e7c444be1b52e18ac02f97c323b8..a80ee8512f2bf454398fb19b54f2e1203365e9a9 100644
--- a/theories/program_logic/weakestpre.v
+++ b/iris/program_logic/weakestpre.v
@@ -4,7 +4,7 @@ From iris.program_logic Require Export language.
 (* FIXME: If we import iris.bi.weakestpre earlier texan triples do not
    get pretty-printed correctly. *)
 From iris.bi Require Export weakestpre.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 Class irisG (Λ : language) (Σ : gFunctors) := IrisG {
diff --git a/theories/proofmode/base.v b/iris/proofmode/base.v
similarity index 98%
rename from theories/proofmode/base.v
rename to iris/proofmode/base.v
index abf4e1361f3018b81cf72a25d2a288f61c5a1a23..5a969fea020a852e90c570fc14d6705255698481 100644
--- a/theories/proofmode/base.v
+++ b/iris/proofmode/base.v
@@ -1,7 +1,7 @@
 From Coq Require Export Ascii.
 From stdpp Require Export strings.
 From iris.algebra Require Export base.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** * Utility definitions used by the proofmode *)
 
diff --git a/theories/proofmode/class_instances.v b/iris/proofmode/class_instances.v
similarity index 99%
rename from theories/proofmode/class_instances.v
rename to iris/proofmode/class_instances.v
index 502326653c7672a06f2219b79cf99bfbb91bba18..8b5f315fbffb79d0bcb632ee3e7133b97406065c 100644
--- a/theories/proofmode/class_instances.v
+++ b/iris/proofmode/class_instances.v
@@ -2,7 +2,7 @@ From stdpp Require Import nat_cancel.
 From iris.bi Require Import bi telescopes.
 From iris.proofmode Require Import base modality_instances classes.
 From iris.proofmode Require Import ltac_tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (* FIXME(Coq #6294): needs new unification *)
diff --git a/theories/proofmode/class_instances_embedding.v b/iris/proofmode/class_instances_embedding.v
similarity index 99%
rename from theories/proofmode/class_instances_embedding.v
rename to iris/proofmode/class_instances_embedding.v
index c75f275345fa173a6eadf31178ac849ec2179c89..e355153ea361e7aab078879ab328390a35218201 100644
--- a/theories/proofmode/class_instances_embedding.v
+++ b/iris/proofmode/class_instances_embedding.v
@@ -1,6 +1,6 @@
 From iris.bi Require Import bi.
 From iris.proofmode Require Import modality_instances classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (** We add a useless hypothesis [BiEmbed PROP PROP'] in order to make sure this
diff --git a/theories/proofmode/class_instances_internal_eq.v b/iris/proofmode/class_instances_internal_eq.v
similarity index 98%
rename from theories/proofmode/class_instances_internal_eq.v
rename to iris/proofmode/class_instances_internal_eq.v
index c75ead317fd516cc433597c003cc86ee774ba5e4..a8cf210e73777010b3b723b6abfcc798e1fbd089 100644
--- a/theories/proofmode/class_instances_internal_eq.v
+++ b/iris/proofmode/class_instances_internal_eq.v
@@ -1,7 +1,7 @@
 From stdpp Require Import nat_cancel.
 From iris.bi Require Import bi.
 From iris.proofmode Require Import modality_instances classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Section class_instances_internal_eq.
diff --git a/theories/proofmode/class_instances_later.v b/iris/proofmode/class_instances_later.v
similarity index 99%
rename from theories/proofmode/class_instances_later.v
rename to iris/proofmode/class_instances_later.v
index ffab7068c7775a9012011705441a422f8b652f5c..d4c7e2d3ab7c29bdab0946e2b340a679bfdbf776 100644
--- a/theories/proofmode/class_instances_later.v
+++ b/iris/proofmode/class_instances_later.v
@@ -1,7 +1,7 @@
 From stdpp Require Import nat_cancel.
 From iris.bi Require Import bi.
 From iris.proofmode Require Import modality_instances classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Section class_instances_later.
diff --git a/theories/proofmode/class_instances_plainly.v b/iris/proofmode/class_instances_plainly.v
similarity index 99%
rename from theories/proofmode/class_instances_plainly.v
rename to iris/proofmode/class_instances_plainly.v
index f3eba370e60e2c96f850a1b3bda79af5454bc51f..b49f42a76c3a2ac3d24ca5a53c147eef3cccd943 100644
--- a/theories/proofmode/class_instances_plainly.v
+++ b/iris/proofmode/class_instances_plainly.v
@@ -1,6 +1,6 @@
 From iris.bi Require Import bi.
 From iris.proofmode Require Import modality_instances classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Section class_instances_plainly.
diff --git a/theories/proofmode/class_instances_updates.v b/iris/proofmode/class_instances_updates.v
similarity index 99%
rename from theories/proofmode/class_instances_updates.v
rename to iris/proofmode/class_instances_updates.v
index 9bc9f38aa36b7772b16d121c721bbe02e328a089..0e0a116d5fa08d7dad97919d44201df2dda12390 100644
--- a/theories/proofmode/class_instances_updates.v
+++ b/iris/proofmode/class_instances_updates.v
@@ -2,7 +2,7 @@ From stdpp Require Import nat_cancel.
 From iris.bi Require Import bi.
 From iris.proofmode Require Import modality_instances classes.
 From iris.proofmode Require Import ltac_tactics class_instances.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Section class_instances_updates.
diff --git a/theories/proofmode/classes.v b/iris/proofmode/classes.v
similarity index 99%
rename from theories/proofmode/classes.v
rename to iris/proofmode/classes.v
index 9c1d7af95e05a9d120ed2ca5facdee8b2c6dbb2a..b71455cd7e8605a794b309a902db41a99f9e10c6 100644
--- a/theories/proofmode/classes.v
+++ b/iris/proofmode/classes.v
@@ -2,7 +2,7 @@ From stdpp Require Import namespaces.
 From iris.bi Require Export bi.
 From iris.proofmode Require Import base.
 From iris.proofmode Require Export ident_name modalities.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Class FromAssumption {PROP : bi} (p : bool) (P Q : PROP) :=
diff --git a/theories/proofmode/coq_tactics.v b/iris/proofmode/coq_tactics.v
similarity index 99%
rename from theories/proofmode/coq_tactics.v
rename to iris/proofmode/coq_tactics.v
index 3987d63bc92de67854812fad90236c13a031103f..5aee11b50a4af7d5b3b11cb778ac7388e73dd8ad 100644
--- a/theories/proofmode/coq_tactics.v
+++ b/iris/proofmode/coq_tactics.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi telescopes.
 From iris.proofmode Require Export base environments classes modality_instances.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 Import env_notations.
 
diff --git a/theories/proofmode/environments.v b/iris/proofmode/environments.v
similarity index 99%
rename from theories/proofmode/environments.v
rename to iris/proofmode/environments.v
index e77b6b44eff752ee9062629c38aed7470aa7e9ff..e185690dc538dc25a5d149fe0731876c52d169d2 100644
--- a/theories/proofmode/environments.v
+++ b/iris/proofmode/environments.v
@@ -1,7 +1,7 @@
 From iris.algebra Require Export base.
 From iris.bi Require Export bi.
 From iris.proofmode Require Import base.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Inductive env (A : Type) : Type :=
diff --git a/theories/proofmode/frame_instances.v b/iris/proofmode/frame_instances.v
similarity index 99%
rename from theories/proofmode/frame_instances.v
rename to iris/proofmode/frame_instances.v
index 11c96ddcc689c2bb5598e96087d1cabd974fb16c..291e326b71f7171665b8a6ba309f19c83fcabc58 100644
--- a/theories/proofmode/frame_instances.v
+++ b/iris/proofmode/frame_instances.v
@@ -1,7 +1,7 @@
 From stdpp Require Import nat_cancel.
 From iris.bi Require Import bi telescopes.
 From iris.proofmode Require Import classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (** This file defines the instances that make up the framing machinery. *)
diff --git a/theories/proofmode/ident_name.v b/iris/proofmode/ident_name.v
similarity index 97%
rename from theories/proofmode/ident_name.v
rename to iris/proofmode/ident_name.v
index 136493f1305ab4de09300b0d561ebd2035e47f9c..709205e3e2082d41de2c355dd40d9fcb71710019 100644
--- a/theories/proofmode/ident_name.v
+++ b/iris/proofmode/ident_name.v
@@ -1,5 +1,5 @@
 From stdpp Require Import base.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** [ident_name] is a way to remember an identifier within the binder of a
 (trivial) function, which can be constructed and retrieved with Ltac but is easy
diff --git a/theories/proofmode/intro_patterns.v b/iris/proofmode/intro_patterns.v
similarity index 99%
rename from theories/proofmode/intro_patterns.v
rename to iris/proofmode/intro_patterns.v
index d5895ebdcfa6c267dbb18d9dadf0b436aab46bad..4847e2aca14d192056a36eaa6c9e7090ec6120b6 100644
--- a/theories/proofmode/intro_patterns.v
+++ b/iris/proofmode/intro_patterns.v
@@ -1,6 +1,6 @@
 From stdpp Require Export strings.
 From iris.proofmode Require Import base tokens sel_patterns.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Inductive gallina_ident :=
   | IGallinaNamed : string → gallina_ident
diff --git a/theories/proofmode/ltac_tactics.v b/iris/proofmode/ltac_tactics.v
similarity index 99%
rename from theories/proofmode/ltac_tactics.v
rename to iris/proofmode/ltac_tactics.v
index 6cd5e2e4c6b9f187281eab5151656f8997ce54ba..5cb16a875a70da6928a5aa79c89412ce073f498f 100644
--- a/theories/proofmode/ltac_tactics.v
+++ b/iris/proofmode/ltac_tactics.v
@@ -3,7 +3,7 @@ From iris.bi Require Export bi telescopes.
 From iris.proofmode Require Import base intro_patterns spec_patterns
                                    sel_patterns coq_tactics reduction.
 From iris.proofmode Require Export classes notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Export ident.
 
 (** For most of the tactics, we want to have tight control over the order and
diff --git a/theories/proofmode/modalities.v b/iris/proofmode/modalities.v
similarity index 99%
rename from theories/proofmode/modalities.v
rename to iris/proofmode/modalities.v
index cc33f63bd1c3a5f3712a78d5142400c20f2da66c..1e65317da69d07e0b76f6623903d0475bfa6e589 100644
--- a/theories/proofmode/modalities.v
+++ b/iris/proofmode/modalities.v
@@ -1,6 +1,6 @@
 From stdpp Require Import namespaces.
 From iris.bi Require Export bi.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 (** The `iModIntro` tactic is not tied the Iris modalities, but can be
diff --git a/theories/proofmode/modality_instances.v b/iris/proofmode/modality_instances.v
similarity index 98%
rename from theories/proofmode/modality_instances.v
rename to iris/proofmode/modality_instances.v
index 23d93c65e33cbbd392e48304fafa74359270e381..ea0d67984b7965c661132a95d3a443aef8d3dc72 100644
--- a/theories/proofmode/modality_instances.v
+++ b/iris/proofmode/modality_instances.v
@@ -1,6 +1,6 @@
 From iris.bi Require Import bi.
 From iris.proofmode Require Export classes.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import bi.
 
 Section modalities.
diff --git a/theories/proofmode/monpred.v b/iris/proofmode/monpred.v
similarity index 99%
rename from theories/proofmode/monpred.v
rename to iris/proofmode/monpred.v
index e9012f26876348a470bc834fde5e439fa9534d96..f59f09245a46da1b9618fd3d39cf9e93765e7134 100644
--- a/theories/proofmode/monpred.v
+++ b/iris/proofmode/monpred.v
@@ -1,7 +1,7 @@
 From iris.bi Require Export monpred.
 From iris.bi Require Import plainly.
 From iris.proofmode Require Import tactics modality_instances.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Class MakeMonPredAt {I : biIndex} {PROP : bi} (i : I)
       (P : monPred I PROP) (𝓟 : PROP) :=
diff --git a/theories/proofmode/notation.v b/iris/proofmode/notation.v
similarity index 97%
rename from theories/proofmode/notation.v
rename to iris/proofmode/notation.v
index d2812ef7a44f24bf2ded5eb1a0ab87bce1c48fef..0f4fd26c0b8a1816f68921a4ea9c21519593959d 100644
--- a/theories/proofmode/notation.v
+++ b/iris/proofmode/notation.v
@@ -1,6 +1,6 @@
 From stdpp Require Export strings.
 From iris.proofmode Require Import coq_tactics environments.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Declare Scope proof_scope.
 Delimit Scope proof_scope with env.
diff --git a/theories/proofmode/reduction.v b/iris/proofmode/reduction.v
similarity index 97%
rename from theories/proofmode/reduction.v
rename to iris/proofmode/reduction.v
index c92ba206bd0ccaa7e8cf5201d298bc2a595931b4..b70aef0a39f3fb4edde630b0d2657e13902ca3ba 100644
--- a/theories/proofmode/reduction.v
+++ b/iris/proofmode/reduction.v
@@ -1,6 +1,6 @@
 From iris.bi Require Import bi telescopes.
 From iris.proofmode Require Import base environments.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Called by all tactics to perform computation to lookup items in the
     context.  We avoid reducing anything user-visible here to make sure we
diff --git a/theories/proofmode/sel_patterns.v b/iris/proofmode/sel_patterns.v
similarity index 96%
rename from theories/proofmode/sel_patterns.v
rename to iris/proofmode/sel_patterns.v
index 0b360c19647ea0f0e05004d9d5bfa6c293a2285d..6f498a36560fd998624152ebf123f497ff1bdfa2 100644
--- a/theories/proofmode/sel_patterns.v
+++ b/iris/proofmode/sel_patterns.v
@@ -1,6 +1,6 @@
 From stdpp Require Export strings.
 From iris.proofmode Require Import base tokens.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Inductive sel_pat :=
   | SelPure
diff --git a/theories/proofmode/spec_patterns.v b/iris/proofmode/spec_patterns.v
similarity index 98%
rename from theories/proofmode/spec_patterns.v
rename to iris/proofmode/spec_patterns.v
index b2edc3b4c8181b4e7cf91479c559193b3254abb7..983b6d260479db08838c0de29ca30e22ba54b9df 100644
--- a/theories/proofmode/spec_patterns.v
+++ b/iris/proofmode/spec_patterns.v
@@ -1,6 +1,6 @@
 From stdpp Require Export strings.
 From iris.proofmode Require Import base tokens.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Inductive goal_kind := GSpatial | GModal | GIntuitionistic.
 
diff --git a/theories/proofmode/tactics.v b/iris/proofmode/tactics.v
similarity index 90%
rename from theories/proofmode/tactics.v
rename to iris/proofmode/tactics.v
index 6fdca9b1e416ceb7bdb9f55fb2c72185b6675cda..f7680f074e4b30ff099cf9ab1235c10dcd2d3c51 100644
--- a/theories/proofmode/tactics.v
+++ b/iris/proofmode/tactics.v
@@ -5,4 +5,4 @@ From iris.proofmode Require Import class_instances class_instances_later
   class_instances_updates class_instances_embedding
   class_instances_plainly class_instances_internal_eq.
 From iris.proofmode Require Import frame_instances modality_instances.
-From iris Require Import options.
+From iris.prelude Require Import options.
diff --git a/theories/proofmode/tokens.v b/iris/proofmode/tokens.v
similarity index 98%
rename from theories/proofmode/tokens.v
rename to iris/proofmode/tokens.v
index b7d075007d0f8b129785f27750eb11af79bcd1f2..a450d6c2fea4d9c4959174ab547df052370fad5b 100644
--- a/theories/proofmode/tokens.v
+++ b/iris/proofmode/tokens.v
@@ -1,5 +1,5 @@
 From iris.proofmode Require Import base.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Inductive token :=
   | TName : string → token
diff --git a/theories/si_logic/bi.v b/iris/si_logic/bi.v
similarity index 99%
rename from theories/si_logic/bi.v
rename to iris/si_logic/bi.v
index 6dbcd41a34c1c9529af05f1d7c3b3846c46e2490..dc8be0254f5409df314fbe055b779af1ca3c18f5 100644
--- a/theories/si_logic/bi.v
+++ b/iris/si_logic/bi.v
@@ -1,6 +1,6 @@
 From iris.bi Require Export bi.
 From iris.si_logic Require Export siprop.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import siProp_primitive.
 
 (** BI instances for [siProp], and re-stating the remaining primitive laws in
diff --git a/theories/si_logic/siprop.v b/iris/si_logic/siprop.v
similarity index 99%
rename from theories/si_logic/siprop.v
rename to iris/si_logic/siprop.v
index 30343ff494346216306dfd3917d5e3768d14f97d..345994a211c472d5b5643c68c0ccca3d8b4879bd 100644
--- a/theories/si_logic/siprop.v
+++ b/iris/si_logic/siprop.v
@@ -1,6 +1,6 @@
 From iris.algebra Require Export ofe.
 From iris.bi Require Import notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The type [siProp] defines "plain" step-indexed propositions, on which we
 define the usual connectives of higher-order logic, and prove that these satisfy
diff --git a/theories/heap_lang/adequacy.v b/iris_heap_lang/adequacy.v
similarity index 96%
rename from theories/heap_lang/adequacy.v
rename to iris_heap_lang/adequacy.v
index ed24c8ae31e48f1d1cb52651002b124ea9837a15..a1d218d3d91f0edc36bea6a5f6edc052dc116481 100644
--- a/theories/heap_lang/adequacy.v
+++ b/iris_heap_lang/adequacy.v
@@ -2,7 +2,7 @@ From iris.algebra Require Import auth.
 From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre adequacy.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Class heapPreG Σ := HeapPreG {
   heap_preG_iris :> invPreG Σ;
diff --git a/theories/heap_lang/derived_laws.v b/iris_heap_lang/derived_laws.v
similarity index 99%
rename from theories/heap_lang/derived_laws.v
rename to iris_heap_lang/derived_laws.v
index 4a394f6b61070c69a0f76ba688108bce23634226..addf300bad70e2ce2290ef2449e2956b792fe269 100644
--- a/theories/heap_lang/derived_laws.v
+++ b/iris_heap_lang/derived_laws.v
@@ -9,7 +9,7 @@ From iris.bi Require Import lib.fractional.
 From iris.proofmode Require Import tactics.
 From iris.heap_lang Require Export primitive_laws.
 From iris.heap_lang Require Import tactics notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The [array] connective is a version of [mapsto] that works
 with lists of values. *)
diff --git a/theories/heap_lang/lang.v b/iris_heap_lang/lang.v
similarity index 99%
rename from theories/heap_lang/lang.v
rename to iris_heap_lang/lang.v
index 7d4f4f0b53a600fa18ceb84c43655982e23a9da6..226b4e183ce1985c7ca20207036bdb5095e89bbc 100644
--- a/theories/heap_lang/lang.v
+++ b/iris_heap_lang/lang.v
@@ -3,7 +3,7 @@ From stdpp Require Import gmap.
 From iris.algebra Require Export ofe.
 From iris.program_logic Require Export language ectx_language ectxi_language.
 From iris.heap_lang Require Export locations.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** heap_lang.  A fairly simple language used for common Iris examples.
 
diff --git a/theories/heap_lang/lib/arith.v b/iris_heap_lang/lib/arith.v
similarity index 97%
rename from theories/heap_lang/lib/arith.v
rename to iris_heap_lang/lib/arith.v
index 501cfbabc553961293159f97b3f09c584ac61d68..8a2165ce6becbac4b2e21575bfa4ef66d3abcd62 100644
--- a/theories/heap_lang/lib/arith.v
+++ b/iris_heap_lang/lib/arith.v
@@ -2,7 +2,7 @@ From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** A library defining binary [minimum] and [maximum] functions, together with
 their expected specs. These operations come up often when working manipulating
diff --git a/theories/heap_lang/lib/array.v b/iris_heap_lang/lib/array.v
similarity index 99%
rename from theories/heap_lang/lib/array.v
rename to iris_heap_lang/lib/array.v
index f7e2bd7bd9c082739d4290c6c2063e1118782ce7..40f8387df0c82536d53deb2401e276caad9c7d63 100644
--- a/theories/heap_lang/lib/array.v
+++ b/iris_heap_lang/lib/array.v
@@ -2,7 +2,7 @@ From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export derived_laws.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Provides some array utilities:
 
diff --git a/theories/heap_lang/lib/assert.v b/iris_heap_lang/lib/assert.v
similarity index 95%
rename from theories/heap_lang/lib/assert.v
rename to iris_heap_lang/lib/assert.v
index db8adb8d66004abb466db5c50c685babc34c13e3..1397a3380b8fdd0c53c76a44ddaf63f2cfc8ed87 100644
--- a/theories/heap_lang/lib/assert.v
+++ b/iris_heap_lang/lib/assert.v
@@ -2,7 +2,7 @@ From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition assert : val :=
   λ: "v", if: "v" #() then #() else #0 #0. (* #0 #0 is unsafe *)
diff --git a/theories/heap_lang/lib/atomic_heap.v b/iris_heap_lang/lib/atomic_heap.v
similarity index 99%
rename from theories/heap_lang/lib/atomic_heap.v
rename to iris_heap_lang/lib/atomic_heap.v
index f39fc9d07de43e278ffecb761c0b28b8955b321d..0679e493f1fee8ea436cf78da9558db95e85fe8f 100644
--- a/theories/heap_lang/lib/atomic_heap.v
+++ b/iris_heap_lang/lib/atomic_heap.v
@@ -3,7 +3,7 @@ From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export atomic.
 From iris.heap_lang Require Export derived_laws.
 From iris.heap_lang Require Import notation proofmode.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** A general logically atomic interface for a heap. *)
 Class atomic_heap {Σ} `{!heapG Σ} := AtomicHeap {
diff --git a/theories/heap_lang/lib/clairvoyant_coin.v b/iris_heap_lang/lib/clairvoyant_coin.v
similarity index 98%
rename from theories/heap_lang/lib/clairvoyant_coin.v
rename to iris_heap_lang/lib/clairvoyant_coin.v
index 70673ad50872c46a134b9ae74d333e8cefcce568..e840732bbfcb50fa08eda7d641f65d85af76a940 100644
--- a/theories/heap_lang/lib/clairvoyant_coin.v
+++ b/iris_heap_lang/lib/clairvoyant_coin.v
@@ -2,7 +2,7 @@ From iris.base_logic Require Export invariants.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang proofmode notation.
 From iris.heap_lang.lib Require Export nondet_bool.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** The clairvoyant coin predicts all the values that it will
 *non-deterministically* choose throughout the execution of the
diff --git a/theories/heap_lang/lib/counter.v b/iris_heap_lang/lib/counter.v
similarity index 99%
rename from theories/heap_lang/lib/counter.v
rename to iris_heap_lang/lib/counter.v
index 48537d024b8dd3b26a95d3055bcb2bcbc61d8308..378b03fcf0552dff46e9d612e154903fd7ec48c9 100644
--- a/theories/heap_lang/lib/counter.v
+++ b/iris_heap_lang/lib/counter.v
@@ -4,7 +4,7 @@ From iris.base_logic.lib Require Export invariants.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition newcounter : val := λ: <>, ref #0.
 Definition incr : val := rec: "incr" "l" :=
diff --git a/theories/heap_lang/lib/diverge.v b/iris_heap_lang/lib/diverge.v
similarity index 96%
rename from theories/heap_lang/lib/diverge.v
rename to iris_heap_lang/lib/diverge.v
index 393445f46dc820636a3aaaa8d761e18de35dcdca..18a27c2f2cd7bf135804e6d313e901f24c00623e 100644
--- a/theories/heap_lang/lib/diverge.v
+++ b/iris_heap_lang/lib/diverge.v
@@ -2,7 +2,7 @@ From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** This library provides a [diverge] function that goes into an infinite loop
 when provided with an (arbitrary) argument value. This function can be used to
diff --git a/theories/heap_lang/lib/increment.v b/iris_heap_lang/lib/increment.v
similarity index 99%
rename from theories/heap_lang/lib/increment.v
rename to iris_heap_lang/lib/increment.v
index bf71e6f3b72336af0834728ee6c88ae3ac2d966a..604ecac1bb2543ff22b08b45fe4e3fc80e9249e4 100644
--- a/theories/heap_lang/lib/increment.v
+++ b/iris_heap_lang/lib/increment.v
@@ -3,7 +3,7 @@ From iris.proofmode Require Import tactics.
 From iris.base_logic.lib Require Export invariants.
 From iris.program_logic Require Export atomic.
 From iris.heap_lang Require Import proofmode notation atomic_heap par.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Show that implementing fetch-and-add on top of CAS preserves logical
 atomicity. *)
diff --git a/theories/heap_lang/lib/lazy_coin.v b/iris_heap_lang/lib/lazy_coin.v
similarity index 97%
rename from theories/heap_lang/lib/lazy_coin.v
rename to iris_heap_lang/lib/lazy_coin.v
index 315cc5f3f88f28ee9030e6db500407934d690b42..588380e97c42dac16a12d085b897a179ff44d242 100644
--- a/theories/heap_lang/lib/lazy_coin.v
+++ b/iris_heap_lang/lib/lazy_coin.v
@@ -2,7 +2,7 @@ From iris.base_logic Require Export invariants.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang proofmode notation.
 From iris.heap_lang.lib Require Export nondet_bool.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition new_coin: val := λ: <>, (ref NONE, NewProph).
 
diff --git a/theories/heap_lang/lib/lock.v b/iris_heap_lang/lib/lock.v
similarity index 97%
rename from theories/heap_lang/lib/lock.v
rename to iris_heap_lang/lib/lock.v
index 8edd581e41b0f4ea071e6b026be64b4c116c3ee4..c34a7736899cc0a3ba85f2d3a06d4b18fdb55dfb 100644
--- a/theories/heap_lang/lib/lock.v
+++ b/iris_heap_lang/lib/lock.v
@@ -1,6 +1,6 @@
 From iris.base_logic.lib Require Export invariants.
 From iris.heap_lang Require Import primitive_laws notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Structure lock Σ `{!heapG Σ} := Lock {
   (** * Operations *)
diff --git a/theories/heap_lang/lib/nondet_bool.v b/iris_heap_lang/lib/nondet_bool.v
similarity index 94%
rename from theories/heap_lang/lib/nondet_bool.v
rename to iris_heap_lang/lib/nondet_bool.v
index 98aec67e0dd8f8ffad59782dca8f547316de6589..f81d48ccebbe3e877eb3fa33f4336586fd5556f2 100644
--- a/theories/heap_lang/lib/nondet_bool.v
+++ b/iris_heap_lang/lib/nondet_bool.v
@@ -1,7 +1,7 @@
 From iris.base_logic Require Export invariants.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition nondet_bool : val :=
   λ: <>, let: "l" := ref #true in Fork ("l" <- #false);; !"l".
diff --git a/theories/heap_lang/lib/par.v b/iris_heap_lang/lib/par.v
similarity index 97%
rename from theories/heap_lang/lib/par.v
rename to iris_heap_lang/lib/par.v
index fb33eb8003808a792c6c09a7974c16d040bc9a69..ad40461004a8d3050db35a43eddf937c261b8684 100644
--- a/theories/heap_lang/lib/par.v
+++ b/iris_heap_lang/lib/par.v
@@ -1,6 +1,6 @@
 From iris.heap_lang Require Import proofmode notation.
 From iris.heap_lang Require Export spawn.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 Definition parN : namespace := nroot .@ "par".
diff --git a/theories/heap_lang/lib/spawn.v b/iris_heap_lang/lib/spawn.v
similarity index 98%
rename from theories/heap_lang/lib/spawn.v
rename to iris_heap_lang/lib/spawn.v
index 0d033c5d1079ea5b8e266f27d3b965c54b916afc..8be6983d54146c1538c272ef277f5d1f8791755b 100644
--- a/theories/heap_lang/lib/spawn.v
+++ b/iris_heap_lang/lib/spawn.v
@@ -4,7 +4,7 @@ From iris.base_logic.lib Require Export invariants.
 From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition spawn : val :=
   λ: "f",
diff --git a/theories/heap_lang/lib/spin_lock.v b/iris_heap_lang/lib/spin_lock.v
similarity index 99%
rename from theories/heap_lang/lib/spin_lock.v
rename to iris_heap_lang/lib/spin_lock.v
index 8f4986496c807a4cd75a824dd95079590a0f2079..a847b985a51807641c25957b52b0b357e3ceae11 100644
--- a/theories/heap_lang/lib/spin_lock.v
+++ b/iris_heap_lang/lib/spin_lock.v
@@ -4,7 +4,7 @@ From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
 From iris.heap_lang.lib Require Import lock.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition newlock : val := λ: <>, ref #false.
 Definition try_acquire : val := λ: "l", CAS "l" #false #true.
diff --git a/theories/heap_lang/lib/ticket_lock.v b/iris_heap_lang/lib/ticket_lock.v
similarity index 99%
rename from theories/heap_lang/lib/ticket_lock.v
rename to iris_heap_lang/lib/ticket_lock.v
index 5b202eaed32f998c5b48d80cf83e6d491486c7cc..55856b30467f3adc3694787e031d81c5a31e306f 100644
--- a/theories/heap_lang/lib/ticket_lock.v
+++ b/iris_heap_lang/lib/ticket_lock.v
@@ -4,7 +4,7 @@ From iris.program_logic Require Export weakestpre.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import proofmode notation.
 From iris.heap_lang.lib Require Export lock.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition wait_loop: val :=
   rec: "wait_loop" "x" "lk" :=
diff --git a/theories/heap_lang/locations.v b/iris_heap_lang/locations.v
similarity index 97%
rename from theories/heap_lang/locations.v
rename to iris_heap_lang/locations.v
index 146b3816aca6f39d7b4b56f5909e9c5d6b8a3041..7cca50788928e1b14fead5d0599d624751d8e762 100644
--- a/theories/heap_lang/locations.v
+++ b/iris_heap_lang/locations.v
@@ -1,6 +1,6 @@
 From stdpp Require Import countable numbers gmap.
 From iris.algebra Require Import base.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Record loc := { loc_car : Z }.
 
diff --git a/theories/heap_lang/metatheory.v b/iris_heap_lang/metatheory.v
similarity index 99%
rename from theories/heap_lang/metatheory.v
rename to iris_heap_lang/metatheory.v
index 106a1242398fde8492313962bbae567fc9e56cb8..54619aa4ab41e61826153a9089e78797fa18dd19 100644
--- a/theories/heap_lang/metatheory.v
+++ b/iris_heap_lang/metatheory.v
@@ -1,6 +1,6 @@
 From stdpp Require Import gmap.
 From iris.heap_lang Require Export lang.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (* This file contains some metatheory about the heap_lang language,
   which is not needed for verifying programs. *)
diff --git a/theories/heap_lang/notation.v b/iris_heap_lang/notation.v
similarity index 99%
rename from theories/heap_lang/notation.v
rename to iris_heap_lang/notation.v
index f9948af37616d34af23209e3c10426d537324c3b..6ea7e8eaab90a9a81d1d5ca063b227d732ceafbf 100644
--- a/theories/heap_lang/notation.v
+++ b/iris_heap_lang/notation.v
@@ -1,6 +1,6 @@
 From iris.program_logic Require Import language.
 From iris.heap_lang Require Export lang.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** Coercions to make programs easier to type. *)
 Coercion LitInt : Z >-> base_lit.
diff --git a/theories/heap_lang/primitive_laws.v b/iris_heap_lang/primitive_laws.v
similarity index 99%
rename from theories/heap_lang/primitive_laws.v
rename to iris_heap_lang/primitive_laws.v
index ce297d8e6eeca46222ac65b49b069b2d8b2f9b2a..36deec1e87495d631f0525283e756acff936e750 100644
--- a/theories/heap_lang/primitive_laws.v
+++ b/iris_heap_lang/primitive_laws.v
@@ -10,7 +10,7 @@ From iris.program_logic Require Export weakestpre total_weakestpre.
 From iris.program_logic Require Import ectx_lifting total_ectx_lifting.
 From iris.heap_lang Require Export lang.
 From iris.heap_lang Require Import tactics notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Class heapG Σ := HeapG {
   heapG_invG : invG Σ;
diff --git a/theories/heap_lang/proofmode.v b/iris_heap_lang/proofmode.v
similarity index 99%
rename from theories/heap_lang/proofmode.v
rename to iris_heap_lang/proofmode.v
index 6eaf109e165a6c201af66b34e84a8a945c963222..8826570fa48047f6ec29d893c13bcba692daa9f1 100644
--- a/theories/heap_lang/proofmode.v
+++ b/iris_heap_lang/proofmode.v
@@ -3,7 +3,7 @@ From iris.proofmode Require Export tactics.
 From iris.program_logic Require Import atomic.
 From iris.heap_lang Require Export tactics derived_laws.
 From iris.heap_lang Require Import notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import uPred.
 
 Lemma tac_wp_expr_eval `{!heapG Σ} Δ s E Φ e e' :
diff --git a/theories/heap_lang/proph_erasure.v b/iris_heap_lang/proph_erasure.v
similarity index 99%
rename from theories/heap_lang/proph_erasure.v
rename to iris_heap_lang/proph_erasure.v
index 4cfeef1bc4497d9e00bedd0bb33f58f5c842ce87..750b55bd4a852230ce59d89eb47a2c8fe6cfc6da 100644
--- a/theories/heap_lang/proph_erasure.v
+++ b/iris_heap_lang/proph_erasure.v
@@ -1,6 +1,6 @@
 From iris.program_logic Require Export adequacy.
 From iris.heap_lang Require Export lang notation tactics.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 (** This file contains the proof that prophecies can be safely erased
 from programs. We erase a program by replacing prophecy identifiers
diff --git a/theories/heap_lang/tactics.v b/iris_heap_lang/tactics.v
similarity index 98%
rename from theories/heap_lang/tactics.v
rename to iris_heap_lang/tactics.v
index 9b19bb9a638b24c9eef139c409bb07887535284e..f29521e8bdcc89984aa381418a37298067e148f4 100644
--- a/theories/heap_lang/tactics.v
+++ b/iris_heap_lang/tactics.v
@@ -1,5 +1,5 @@
 From iris.heap_lang Require Export lang.
-From iris Require Import options.
+From iris.prelude Require Import options.
 Import heap_lang.
 
 (** The tactic [reshape_expr e tac] decomposes the expression [e] into an
diff --git a/theories/heap_lang/total_adequacy.v b/iris_heap_lang/total_adequacy.v
similarity index 94%
rename from theories/heap_lang/total_adequacy.v
rename to iris_heap_lang/total_adequacy.v
index 4d07855593ec88efbcc91a0046d2187b26852055..cdda3d0677c776720b2ee81bc996d793460b1df7 100644
--- a/theories/heap_lang/total_adequacy.v
+++ b/iris_heap_lang/total_adequacy.v
@@ -2,7 +2,7 @@ From iris.proofmode Require Import tactics.
 From iris.program_logic Require Export total_adequacy.
 From iris.heap_lang Require Export adequacy.
 From iris.heap_lang Require Import proofmode notation.
-From iris Require Import options.
+From iris.prelude Require Import options.
 
 Definition heap_total Σ `{!heapPreG Σ} s e σ φ :
   (∀ `{!heapG Σ}, ⊢ inv_heap_inv -∗ WP e @ s; ⊤ [{ v, ⌜φ v⌝ }]) →
diff --git a/make-package b/make-package
new file mode 100755
index 0000000000000000000000000000000000000000..55c051a9f6b9b3d25936782b46e6b55dc35fa4ab
--- /dev/null
+++ b/make-package
@@ -0,0 +1,32 @@
+#!/bin/bash
+set -e
+# Helper script to build and/or install just one package out of this repository.
+# Assumes that all the other packages it depends on have been installed already!
+
+PROJECT="$1"
+shift
+
+COQFILE="_CoqProject.$PROJECT"
+MAKEFILE="Makefile.package.$PROJECT"
+
+if ! egrep -q "^$PROJECT/" _CoqProject; then
+    echo "No files in $PROJECT/ found in _CoqProject; this does not seem to be a valid project name."
+    exit 1
+fi
+
+# Generate _CoqProject file and Makefile
+rm -f "$COQFILE"
+# Get the right "-Q" line.
+egrep "^-Q $PROJECT[ /]" _CoqProject >> "$COQFILE"
+# Get everything until the first empty line except for the "-Q" lines.
+sed -n '/./!q;p' _CoqProject | egrep -v "^-Q " >> "$COQFILE"
+# Get the files.
+egrep "^$PROJECT/" _CoqProject >> "$COQFILE"
+# Now we can run coq_makefile.
+"${COQBIN}coq_makefile" -f "$COQFILE" -o "$MAKEFILE"
+
+# Run build
+make -f "$MAKEFILE" "$@"
+
+# Cleanup
+rm -f ".$MAKEFILE.d" "$MAKEFILE"*