diff --git a/Makefile b/Makefile
index a8778388f11e575a45e484e4b14ffc369e629a0b..9eaed1ee49ecbfa36ab4bbecef316619fe07970c 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@
 
 #
 # This Makefile was generated by the command line :
-# coq_makefile lib/ModuRes -R lib/ModuRes ModuRes core_lang.v iris_core.v iris_vs.v iris_wp.v lang.v masks.v world_prop.v -o Makefile 
+# coq_makefile lib/ModuRes -R lib/ModuRes ModuRes core_lang.v iris_core.v iris_unsafe.v iris_vs.v iris_wp.v lang.v masks.v world_prop.v -o Makefile 
 #
 
 .DEFAULT_GOAL := all
@@ -50,14 +50,14 @@ COQDOCLIBS?=-R lib/ModuRes ModuRes
 
 
 OPT?=
-COQDEP?=$(COQBIN)coqdep -c
+COQDEP?="$(COQBIN)coqdep" -c
 COQFLAGS?=-q $(OPT) $(COQLIBS) $(OTHERFLAGS) $(COQ_XML)
 COQCHKFLAGS?=-silent -o
 COQDOCFLAGS?=-interpolate -utf8
-COQC?=$(COQBIN)coqc
-GALLINA?=$(COQBIN)gallina
-COQDOC?=$(COQBIN)coqdoc
-COQCHK?=$(COQBIN)coqchk
+COQC?="$(COQBIN)coqc"
+GALLINA?="$(COQBIN)gallina"
+COQDOC?="$(COQBIN)coqdoc"
+COQCHK?="$(COQBIN)coqchk"
 
 ##################
 #                #
@@ -66,12 +66,12 @@ COQCHK?=$(COQBIN)coqchk
 ##################
 
 ifdef USERINSTALL
-XDG_DATA_HOME?=$(HOME)/.local/share
+XDG_DATA_HOME?="$(HOME)/.local/share"
 COQLIBINSTALL=$(XDG_DATA_HOME)/coq
 COQDOCINSTALL=$(XDG_DATA_HOME)/doc/coq
 else
-COQLIBINSTALL=${COQLIB}user-contrib
-COQDOCINSTALL=${DOCDIR}user-contrib
+COQLIBINSTALL="${COQLIB}user-contrib"
+COQDOCINSTALL="${DOCDIR}user-contrib"
 endif
 
 ######################
@@ -82,6 +82,7 @@ endif
 
 VFILES:=core_lang.v\
   iris_core.v\
+  iris_unsafe.v\
   iris_vs.v\
   iris_wp.v\
   lang.v\
@@ -175,12 +176,12 @@ install:
 	for i in $(VOFILESINC); do \
 	 install -m 0644 $$i $(DSTROOT)$(COQLIBINSTALL)/ModuRes/`basename $$i`; \
 	done
-	(cd ./lib/ModuRes; $(MAKE) DSTROOT=$(DSTROOT) INSTALLDEFAULTROOT=$(INSTALLDEFAULTROOT)/./lib/ModuRes install)
+	+cd ./lib/ModuRes && $(MAKE) DSTROOT="$(DSTROOT)" INSTALLDEFAULTROOT="$(INSTALLDEFAULTROOT)/./lib/ModuRes" install
 
 install-doc:
-	install -d $(DSTROOT)$(COQDOCINSTALL)/ModuRes/html
+	install -d "$(DSTROOT)"$(COQDOCINSTALL)/ModuRes/html
 	for i in html/*; do \
-	 install -m 0644 $$i $(DSTROOT)$(COQDOCINSTALL)/ModuRes/$$i;\
+	 install -m 0644 $$i "$(DSTROOT)"$(COQDOCINSTALL)/ModuRes/$$i;\
 	done
 
 clean:
@@ -194,13 +195,13 @@ archclean:
 	(cd ./lib/ModuRes ; $(MAKE) archclean)
 
 printenv:
-	@$(COQBIN)coqtop -config
-	@echo CAMLC =	$(CAMLC)
-	@echo CAMLOPTC =	$(CAMLOPTC)
-	@echo PP =	$(PP)
-	@echo COQFLAGS =	$(COQFLAGS)
-	@echo COQLIBINSTALL =	$(COQLIBINSTALL)
-	@echo COQDOCINSTALL =	$(COQDOCINSTALL)
+	@"$(COQBIN)coqtop" -config
+	@echo 'CAMLC =	$(CAMLC)'
+	@echo 'CAMLOPTC =	$(CAMLOPTC)'
+	@echo 'PP =	$(PP)'
+	@echo 'COQFLAGS =	$(COQFLAGS)'
+	@echo 'COQLIBINSTALL =	$(COQLIBINSTALL)'
+	@echo 'COQDOCINSTALL =	$(COQDOCINSTALL)'
 
 ###################
 #                 #
@@ -227,7 +228,7 @@ printenv:
 	$(COQDOC) $(COQDOCFLAGS) -latex -g $< -o $@
 
 %.g.html: %.v %.glob
-	$(COQDOC)$(COQDOCFLAGS)  -html -g $< -o $@
+	$(COQDOC) $(COQDOCFLAGS)  -html -g $< -o $@
 
 %.v.d: %.v
 	$(COQDEP) -slash $(COQLIBS) "$<" > "$@" || ( RV=$$?; rm -f "$@"; exit $${RV} )
diff --git a/README.txt b/README.txt
index 7b737cec8028f2cf6c070ea22b6f05f647b11176..083a4b2af5799dd6595202841003d9791c101798 100644
--- a/README.txt
+++ b/README.txt
@@ -62,6 +62,8 @@ CONTENTS
   
   * iris_wp.v defines weakest preconditions and proves the rules for
     Hoare triples
+  
+  * iris_unsafe.v proves rules for unsafe Hoare triples
 
   The development uses ModuRes, a Coq library by Sieczkowski et al. to
   solve the recursive domain equation (see the paper for a reference)
diff --git a/iris_unsafe.v b/iris_unsafe.v
new file mode 100644
index 0000000000000000000000000000000000000000..92763d58508e1346ceffc7489b606dcb795f4ca3
--- /dev/null
+++ b/iris_unsafe.v
@@ -0,0 +1,47 @@
+Set Automatic Coercions Import.
+Require Import ssreflect ssrfun ssrbool eqtype seq fintype.
+Require Import core_lang masks iris_wp.
+Require Import ModuRes.PCM ModuRes.UPred ModuRes.BI ModuRes.PreoMet ModuRes.Finmap.
+
+Set Implicit Arguments.
+Unset Strict Implicit.
+Unset Printing Implicit Defensive.
+
+(******************************************************************)
+(** * Rules for unsafe triples **)
+(******************************************************************)
+
+Module RobustSafety (RL : PCM_T) (C : CORE_LANG).
+
+  Module Export Iris := IrisWP RL C.
+  Local Open Scope iris_scope.
+  Local Open Scope mask_scope.
+  Local Open Scope pcm_scope.
+  Local Open Scope bi_scope.
+  Local Open Scope lang_scope.
+
+  Implicit Types (P Q R : Props) (i : nat) (safe : bool) (m : mask) (e : expr) (φ : value -n> Props) (r : res) (w : Wld).
+
+  Lemma wpUnsafe m e φ : wp true m e φ ⊑ wp false m e φ.
+  Proof.
+    move=> w n r He; move: n e φ w r He; elim/wf_nat_ind; move=> n IH e φ w r /unfold_wp He.
+    rewrite unfold_wp; move=> w' k s rf mf σ HSw HLt HD Hw.
+    move: {IH} (IH _ HLt) => IH.
+    move: {He HSw HLt HD Hw} (He _ _ _ _ _ _ HSw HLt HD Hw) => [HV [HS [HF _] ] ].
+    split; [done | clear HV; split; [clear HF | split; [clear HS | done] ] ].
+    - move=> σ' ei ei' K HK Hstep.
+      move: {HS HK Hstep} (HS _ _ _ _ HK Hstep) => [w'' [r' [s' [HSw' [He' Hw'] ] ] ] ].
+      exists w'' r' s'; split; [done | split; [exact: IH | done] ].
+    move=> e' K HK.
+    move: {HF HK} (HF _ _ HK) => [w'' [rfk [rret [s' [HSw' [Hk [He' Hw'] ] ] ] ] ] ].
+    exists w'' rfk rret s'; split; [done | split; [exact: IH | split; [exact: IH | done] ] ].
+  Qed.
+
+  Lemma htUnsafe m P e φ : ht true m P e φ ⊑ ht false m P e φ.
+  Proof.
+    move=> w n rz He w' HSw n' r HLe Hr HP.
+    move: {He P w n rz HSw HLe Hr HP} (He _ HSw _ _ HLe Hr HP).
+    exact: wpUnsafe.
+  Qed.
+
+End RobustSafety.