diff --git a/.gitignore b/.gitignore
index bdb3108122dfc5be1fb0370483837d395c0524bd..d192c02799c5c98832458e9f76acc7ae1890be31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 *.glob
 *.vo
 *.html
+*.aux
diff --git a/Makefile b/Makefile
index eee18ff8e634826c5cc1dfaebbaeecfb1fe1d609..f00672eacc07f5cff53eeff0d55ff11bce98b08f 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
 ##  v      #                   The Coq Proof Assistant                     ##
 ## <O___,, #                INRIA - CNRS - LIX - LRI - PPS                 ##
 ##   \VV/  #                                                               ##
-##    //   #  Makefile automagically generated by coq_makefile V8.4pl4     ##
+##    //   #  Makefile automagically generated by coq_makefile V8.5pl1     ##
 #############################################################################
 
 # WARNING
@@ -14,14 +14,15 @@
 
 #
 # This Makefile was generated by the command line :
-# coq_makefile -R . rt ./util/fixedpoint.v ./util/ssromega.v ./util/bigcat.v ./util/nat.v ./util/notation.v ./util/list.v ./util/powerset.v ./util/all.v ./util/sorting.v ./util/tactics.v ./util/bigord.v ./util/exists.v ./util/induction.v ./util/sum.v ./util/divround.v ./util/counting.v ./implementation/basic/bertogna_edf_example.v ./implementation/basic/task.v ./implementation/basic/schedule.v ./implementation/basic/job.v ./implementation/basic/arrival_sequence.v ./implementation/jitter/bertogna_edf_example.v ./implementation/jitter/task.v ./implementation/jitter/schedule.v ./implementation/jitter/job.v ./implementation/jitter/arrival_sequence.v ./analysis/basic/bertogna_fp_theory.v ./analysis/basic/interference_bound_edf.v ./analysis/basic/interference_bound_fp.v ./analysis/basic/interference_bound.v ./analysis/basic/bertogna_edf_comp.v ./analysis/basic/bertogna_fp_comp.v ./analysis/basic/bertogna_edf_theory.v ./analysis/basic/workload_bound.v ./analysis/parallel/bertogna_fp_theory.v ./analysis/parallel/interference_bound_edf.v ./analysis/parallel/interference_bound_fp.v ./analysis/parallel/interference_bound.v ./analysis/parallel/bertogna_edf_comp.v ./analysis/parallel/bertogna_fp_comp.v ./analysis/parallel/bertogna_edf_theory.v ./analysis/parallel/workload_bound.v ./analysis/jitter/bertogna_fp_theory.v ./analysis/jitter/interference_bound_edf.v ./analysis/jitter/interference_bound_fp.v ./analysis/jitter/interference_bound.v ./analysis/jitter/bertogna_edf_comp.v ./analysis/jitter/bertogna_fp_comp.v ./analysis/jitter/bertogna_edf_theory.v ./analysis/jitter/workload_bound.v ./model/basic/time.v ./model/basic/schedulability.v ./model/basic/task.v ./model/basic/task_arrival.v ./model/basic/platform.v ./model/basic/schedule.v ./model/basic/priority.v ./model/basic/interference_edf.v ./model/basic/interference.v ./model/basic/workload.v ./model/basic/job.v ./model/basic/arrival_sequence.v ./model/basic/response_time.v ./model/basic/platform_fp.v ./model/jitter/time.v ./model/jitter/schedulability.v ./model/jitter/task.v ./model/jitter/task_arrival.v ./model/jitter/platform.v ./model/jitter/schedule.v ./model/jitter/priority.v ./model/jitter/interference_edf.v ./model/jitter/interference.v ./model/jitter/workload.v ./model/jitter/job.v ./model/jitter/arrival_sequence.v ./model/jitter/response_time.v ./model/jitter/platform_fp.v -o Makefile 
+# coq_makefile -f _CoqProject ./util/fixedpoint.v ./util/ssromega.v ./util/bigcat.v ./util/nat.v ./util/notation.v ./util/list.v ./util/powerset.v ./util/all.v ./util/sorting.v ./util/tactics.v ./util/bigord.v ./util/exists.v ./util/induction.v ./util/sum.v ./util/divround.v ./util/counting.v ./implementation/basic/bertogna_edf_example.v ./implementation/basic/task.v ./implementation/basic/schedule.v ./implementation/basic/job.v ./implementation/basic/arrival_sequence.v ./implementation/jitter/bertogna_edf_example.v ./implementation/jitter/task.v ./implementation/jitter/schedule.v ./implementation/jitter/job.v ./implementation/jitter/arrival_sequence.v ./analysis/basic/bertogna_fp_theory.v ./analysis/basic/interference_bound_edf.v ./analysis/basic/interference_bound_fp.v ./analysis/basic/interference_bound.v ./analysis/basic/bertogna_edf_comp.v ./analysis/basic/bertogna_fp_comp.v ./analysis/basic/bertogna_edf_theory.v ./analysis/basic/workload_bound.v ./analysis/parallel/bertogna_fp_theory.v ./analysis/parallel/interference_bound_edf.v ./analysis/parallel/interference_bound_fp.v ./analysis/parallel/interference_bound.v ./analysis/parallel/bertogna_edf_comp.v ./analysis/parallel/bertogna_fp_comp.v ./analysis/parallel/bertogna_edf_theory.v ./analysis/parallel/workload_bound.v ./analysis/jitter/bertogna_fp_theory.v ./analysis/jitter/interference_bound_edf.v ./analysis/jitter/interference_bound_fp.v ./analysis/jitter/interference_bound.v ./analysis/jitter/bertogna_edf_comp.v ./analysis/jitter/bertogna_fp_comp.v ./analysis/jitter/bertogna_edf_theory.v ./analysis/jitter/workload_bound.v ./model/basic/time.v ./model/basic/schedulability.v ./model/basic/task.v ./model/basic/task_arrival.v ./model/basic/platform.v ./model/basic/schedule.v ./model/basic/priority.v ./model/basic/interference_edf.v ./model/basic/interference.v ./model/basic/workload.v ./model/basic/job.v ./model/basic/arrival_sequence.v ./model/basic/response_time.v ./model/basic/platform_fp.v ./model/jitter/time.v ./model/jitter/schedulability.v ./model/jitter/task.v ./model/jitter/task_arrival.v ./model/jitter/platform.v ./model/jitter/schedule.v ./model/jitter/priority.v ./model/jitter/interference_edf.v ./model/jitter/interference.v ./model/jitter/workload.v ./model/jitter/job.v ./model/jitter/arrival_sequence.v ./model/jitter/response_time.v ./model/jitter/platform_fp.v -o Makefile 
 #
 
 .DEFAULT_GOAL := all
 
-# 
 # This Makefile may take arguments passed as environment variables:
 # COQBIN to specify the directory where Coq binaries resides;
+# TIMECMD set a command to log .v compilation time;
+# TIMED if non empty, use the default time command as TIMECMD;
 # ZDEBUG/COQDEBUG to specify debug flags for ocamlc&ocamlopt/coqc;
 # DSTROOT to specify a prefix to install path.
 
@@ -33,14 +34,25 @@ endef
 includecmdwithout@ = $(eval $(subst @,$(donewline),$(shell { $(1) | tr -d '\r' | tr '\n' '@'; })))
 $(call includecmdwithout@,$(COQBIN)coqtop -config)
 
+TIMED=
+TIMECMD=
+STDTIME?=/usr/bin/time -f "$* (user: %U mem: %M ko)"
+TIMER=$(if $(TIMED), $(STDTIME), $(TIMECMD))
+
+vo_to_obj = $(addsuffix .o,\
+  $(filter-out Warning: Error:,\
+  $(shell $(COQBIN)coqtop -q -noinit -batch -quiet -print-mod-uid $(1))))
+
 ##########################
 #                        #
 # Libraries definitions. #
 #                        #
 ##########################
 
-COQLIBS?= -R . rt
-COQDOCLIBS?=-R . rt
+COQLIBS?=\
+  -R "." rt
+COQDOCLIBS?=\
+  -R "." rt
 
 ##########################
 #                        #
@@ -50,14 +62,15 @@ COQDOCLIBS?=-R . rt
 
 
 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?=$(TIMER) "$(COQBIN)coqc"
+GALLINA?="$(COQBIN)gallina"
+COQDOC?="$(COQBIN)coqdoc"
+COQCHK?="$(COQBIN)coqchk"
+COQMKTOP?="$(COQBIN)coqmktop"
 
 ##################
 #                #
@@ -66,12 +79,13 @@ 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"
+COQTOPINSTALL="${COQLIB}toploop"
 endif
 
 ######################
@@ -159,15 +173,25 @@ VFILES:=util/fixedpoint.v\
   model/jitter/response_time.v\
   model/jitter/platform_fp.v
 
+ifneq ($(filter-out archclean clean cleanall printenv,$(MAKECMDGOALS)),)
+-include $(addsuffix .d,$(VFILES))
+else
+ifeq ($(MAKECMDGOALS),)
 -include $(addsuffix .d,$(VFILES))
+endif
+endif
+
 .SECONDARY: $(addsuffix .d,$(VFILES))
 
-VOFILES:=$(VFILES:.v=.vo)
+VO=vo
+VOFILES:=$(VFILES:.v=.$(VO))
 GLOBFILES:=$(VFILES:.v=.glob)
-VIFILES:=$(VFILES:.v=.vi)
 GFILES:=$(VFILES:.v=.g)
 HTMLFILES:=$(VFILES:.v=.html)
 GHTMLFILES:=$(VFILES:.v=.g.html)
+OBJFILES=$(call vo_to_obj,$(VOFILES))
+ALLNATIVEFILES=$(OBJFILES:.o=.cmi) $(OBJFILES:.o=.cmo) $(OBJFILES:.o=.cmx) $(OBJFILES:.o=.cmxs)
+NATIVEFILES=$(foreach f, $(ALLNATIVEFILES), $(wildcard $f))
 ifeq '$(HASNATDYNLINK)' 'true'
 HASNATDYNLINK_OR_EMPTY := yes
 else
@@ -182,8 +206,12 @@ endif
 
 all: $(VOFILES) 
 
-spec: $(VIFILES)
+quick: $(VOFILES:.vo=.vio)
 
+vio2vo:
+	$(COQC) $(COQDEBUG) $(COQFLAGS) -schedule-vio2vo $(J) $(VOFILES:%.vo=%.vio)
+checkproofs:
+	$(COQC) $(COQDEBUG) $(COQFLAGS) -schedule-vio-checking $(J) $(VOFILES:%.vo=%.vio)
 gallina: $(GFILES)
 
 html: $(GLOBFILES) $(VFILES)
@@ -214,7 +242,7 @@ beautify: $(VFILES:=.beautified)
 	@echo 'Do not do "make clean" until you are sure that everything went well!'
 	@echo 'If there were a problem, execute "for file in $$(find . -name \*.v.old -print); do mv $${file} $${file%.old}; done" in your shell/'
 
-.PHONY: all opt byte archclean clean install userinstall depend html validate
+.PHONY: all archclean beautify byte clean cleanall gallina gallinahtml html install install-doc install-natdynlink install-toploop opt printenv quick uninstall userinstall validate vio2vo
 
 ####################
 #                  #
@@ -232,33 +260,72 @@ userinstall:
 	+$(MAKE) USERINSTALL=true install
 
 install:
-	for i in $(VOFILES); do \
-	 install -d `dirname $(DSTROOT)$(COQLIBINSTALL)/rt/$$i`; \
-	 install -m 0644 $$i $(DSTROOT)$(COQLIBINSTALL)/rt/$$i; \
+	cd "." && for i in $(VOFILES) $(VFILES) $(GLOBFILES) $(NATIVEFILES) $(CMOFILES) $(CMIFILES) $(CMAFILES); do \
+	 install -d "`dirname "$(DSTROOT)"$(COQLIBINSTALL)/rt/$$i`"; \
+	 install -m 0644 $$i "$(DSTROOT)"$(COQLIBINSTALL)/rt/$$i; \
 	done
 
 install-doc:
-	install -d $(DSTROOT)$(COQDOCINSTALL)/rt/html
+	install -d "$(DSTROOT)"$(COQDOCINSTALL)/rt/html
 	for i in html/*; do \
-	 install -m 0644 $$i $(DSTROOT)$(COQDOCINSTALL)/rt/$$i;\
+	 install -m 0644 $$i "$(DSTROOT)"$(COQDOCINSTALL)/rt/$$i;\
 	done
 
-clean:
-	rm -f $(VOFILES) $(VIFILES) $(GFILES) $(VFILES:.v=.v.d) $(VFILES:=.beautified) $(VFILES:=.old)
+uninstall_me.sh: Makefile
+	echo '#!/bin/sh' > $@
+	printf 'cd "$${DSTROOT}"$(COQLIBINSTALL)/rt && rm -f $(VOFILES) $(VFILES) $(GLOBFILES) $(NATIVEFILES) $(CMOFILES) $(CMIFILES) $(CMAFILES) && find . -type d -and -empty -delete\ncd "$${DSTROOT}"$(COQLIBINSTALL) && find "rt" -maxdepth 0 -and -empty -exec rmdir -p \{\} \;\n' >> "$@"
+	printf 'cd "$${DSTROOT}"$(COQDOCINSTALL)/rt \\\n' >> "$@"
+	printf '&& rm -f $(shell find "html" -maxdepth 1 -and -type f -print)\n' >> "$@"
+	printf 'cd "$${DSTROOT}"$(COQDOCINSTALL) && find rt/html -maxdepth 0 -and -empty -exec rmdir -p \{\} \;\n' >> "$@"
+	chmod +x $@
+
+uninstall: uninstall_me.sh
+	sh $<
+
+.merlin:
+	@echo 'FLG -rectypes' > .merlin
+	@echo "B $(COQLIB) kernel" >> .merlin
+	@echo "B $(COQLIB) lib" >> .merlin
+	@echo "B $(COQLIB) library" >> .merlin
+	@echo "B $(COQLIB) parsing" >> .merlin
+	@echo "B $(COQLIB) pretyping" >> .merlin
+	@echo "B $(COQLIB) interp" >> .merlin
+	@echo "B $(COQLIB) printing" >> .merlin
+	@echo "B $(COQLIB) intf" >> .merlin
+	@echo "B $(COQLIB) proofs" >> .merlin
+	@echo "B $(COQLIB) tactics" >> .merlin
+	@echo "B $(COQLIB) tools" >> .merlin
+	@echo "B $(COQLIB) toplevel" >> .merlin
+	@echo "B $(COQLIB) stm" >> .merlin
+	@echo "B $(COQLIB) grammar" >> .merlin
+	@echo "B $(COQLIB) config" >> .merlin
+
+clean::
+	rm -f $(OBJFILES) $(OBJFILES:.o=.native) $(NATIVEFILES)
+	find . -name .coq-native -type d -empty -delete
+	rm -f $(VOFILES) $(VOFILES:.vo=.vio) $(GFILES) $(VFILES:.v=.v.d) $(VFILES:=.beautified) $(VFILES:=.old)
 	rm -f all.ps all-gal.ps all.pdf all-gal.pdf all.glob $(VFILES:.v=.glob) $(VFILES:.v=.tex) $(VFILES:.v=.g.tex) all-mli.tex
-	- rm -rf html mlihtml
+	- rm -rf html mlihtml uninstall_me.sh
+
+cleanall:: clean
+	rm -f $(patsubst %.v,.%.aux,$(VFILES))
 
-archclean:
+archclean::
 	rm -f *.cmx *.o
 
 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)'
+
+Makefile: _CoqProject
+	mv -f $@ $@.bak
+	"$(COQBIN)coq_makefile" -f $< -o $@
+
 
 ###################
 #                 #
@@ -266,31 +333,34 @@ printenv:
 #                 #
 ###################
 
-%.vo %.glob: %.v
+$(VOFILES): %.vo: %.v
+	$(COQC) $(COQDEBUG) $(COQFLAGS) $*
+
+$(GLOBFILES): %.glob: %.v
 	$(COQC) $(COQDEBUG) $(COQFLAGS) $*
 
-%.vi: %.v
-	$(COQC) -i $(COQDEBUG) $(COQFLAGS) $*
+$(VFILES:.v=.vio): %.vio: %.v
+	$(COQC) -quick $(COQDEBUG) $(COQFLAGS) $*
 
-%.g: %.v
+$(GFILES): %.g: %.v
 	$(GALLINA) $<
 
-%.tex: %.v
+$(VFILES:.v=.tex): %.tex: %.v
 	$(COQDOC) $(COQDOCFLAGS) -latex $< -o $@
 
-%.html: %.v %.glob
+$(HTMLFILES): %.html: %.v %.glob
 	$(COQDOC) $(COQDOCFLAGS) -html $< -o $@
 
-%.g.tex: %.v
+$(VFILES:.v=.g.tex): %.g.tex: %.v
 	$(COQDOC) $(COQDOCFLAGS) -latex -g $< -o $@
 
-%.g.html: %.v %.glob
-	$(COQDOC)$(COQDOCFLAGS)  -html -g $< -o $@
+$(GHTMLFILES): %.g.html: %.v %.glob
+	$(COQDOC) $(COQDOCFLAGS)  -html -g $< -o $@
 
-%.v.d: %.v
-	$(COQDEP) -slash $(COQLIBS) "$<" > "$@" || ( RV=$$?; rm -f "$@"; exit $${RV} )
+$(addsuffix .d,$(VFILES)): %.v.d: %.v
+	$(COQDEP) $(COQLIBS) "$<" > "$@" || ( RV=$$?; rm -f "$@"; exit $${RV} )
 
-%.v.beautified:
+$(addsuffix .beautified,$(VFILES)): %.v.beautified:
 	$(COQC) $(COQDEBUG) $(COQFLAGS) -beautify $*
 
 # WARNING
diff --git a/_CoqProject b/_CoqProject
new file mode 100644
index 0000000000000000000000000000000000000000..dcdf97e03d88df736a8e2720bf6fb99636751905
--- /dev/null
+++ b/_CoqProject
@@ -0,0 +1 @@
+-R . rt
\ No newline at end of file
diff --git a/analysis/basic/bertogna_edf_comp.v b/analysis/basic/bertogna_edf_comp.v
index 8edd7cf42499b20bbb4a794ed81c076d4fb6ddc4..d9493644e86d3a567ec61e0984c3510492750c81 100755
--- a/analysis/basic/bertogna_edf_comp.v
+++ b/analysis/basic/bertogna_edf_comp.v
@@ -1,7 +1,6 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.analysis.basic.bertogna_edf_theory.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeIterationEDF.
 
@@ -238,7 +237,7 @@ Module ResponseTimeIterationEDF.
         Proof.
           intros l; unfold all_le; rewrite eq_refl andTb.
           destruct l; first by done.
-          by apply/(zipP (fun x y => snd x <= snd y)).
+          by apply/(zipP t (fun x y => snd x <= snd y)).
         Qed.
 
         (* ... and transitive. *)
@@ -247,8 +246,8 @@ Module ResponseTimeIterationEDF.
           unfold transitive, all_le.
           move => y x z /andP [/eqP ZIPxy LExy] /andP [/eqP ZIPyz LEyz].
           apply/andP; split; first by rewrite ZIPxy -ZIPyz.
-          move: LExy => /(zipP (fun x y => snd x <= snd y)) LExy.
-          move: LEyz => /(zipP (fun x y => snd x <= snd y)) LEyz.
+          move: LExy => /(zipP _ (fun x y => snd x <= snd y)) LExy.
+          move: LEyz => /(zipP _ (fun x y => snd x <= snd y)) LEyz.
           assert (SIZExy: size (unzip1 x) = size (unzip1 y)).
             by rewrite ZIPxy.
           assert (SIZEyz: size (unzip1 y) = size (unzip1 z)).
@@ -259,21 +258,22 @@ Module ResponseTimeIterationEDF.
             apply size0nil in SIZExy; symmetry in SIZEyz.
             by apply size0nil in SIZEyz; subst.
           }
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (t, 0) | by rewrite SIZExy -SIZEyz|]. 
+          rewrite -SIZExy in SIZEyz.
+          have ZIP := zipP t  (fun x y => snd x <= snd y) _  _ SIZEyz.
+          apply/ZIP. 
           intros i LTi.
+          specialize (LExy t); specialize (LEyz t).
           exploit LExy; first by rewrite SIZExy.
           {
-            rewrite size_zip -SIZEyz -SIZExy minnn in LTi.
-            by rewrite size_zip -SIZExy minnn; apply LTi.
+            rewrite size_zip -SIZExy minnn.
+            rewrite size_zip -SIZEyz minnn in LTi; apply LTi.
           }
-          instantiate (1 := t); intro LE.
-          exploit LEyz; first by apply SIZEyz.
+          intro LE.
+          exploit LEyz; first by rewrite -SIZExy.
           {
-            rewrite size_zip SIZExy SIZEyz minnn in LTi.
-            by rewrite size_zip SIZEyz minnn; apply LTi.
+            by rewrite size_zip -SIZExy -size_zip; apply LTi.
           }
-          by instantiate (1 := t); intro LE'; apply (leq_trans LE).
+          by intro LE'; apply (leq_trans LE).
         Qed.
 
         (* At any step of the iteration, the corresponding list
@@ -294,8 +294,8 @@ Module ResponseTimeIterationEDF.
             by rewrite iterSr IHstep.
           }
 
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (tsk0,0)|by rewrite edf_claimed_bounds_size size_map |].
+          apply/(zipP (tsk0,0) (fun x y => snd x <= snd y));
+            first by rewrite edf_claimed_bounds_size size_map.
 
           intros i LTi; rewrite iterS; unfold edf_rta_iteration at 1.
           have MAP := @nth_map _ (tsk0,0) _ (tsk0,0).
@@ -349,10 +349,9 @@ Module ResponseTimeIterationEDF.
           apply f_equal with (B := nat) (f := fun x => size x) in UNZIP'.
           rename UNZIP' into SIZE.
           rewrite size_map [size (unzip1 _)]size_map in SIZE.
-          move: LE => /(zipP (fun x y => snd x <= snd y)) LE.
+          move: LE => /(zipP _ (fun x y => snd x <= snd y)) LE.
           destruct x1 as [| p0 x1'], x2 as [| p0' x2']; try (by ins).
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (p0,0) | by done |].
+          apply/(zipP p0 (fun x y => snd x <= snd y)); first by done.
 
           intros i LTi.
           exploit LE; first by rewrite 2!size_map in SIZE.
@@ -420,7 +419,7 @@ Module ResponseTimeIterationEDF.
           assert (GE_COST: all (fun p => task_cost (fst p) <= snd p) ((tsk0, R0) :: x1')). 
           {
             clear LE; move: LEinit => /andP [/eqP UNZIP' LE].
-            move: LE => /(zipP (fun x y => snd x <= snd y)) LE.
+            move: LE => /(zipP _ (fun x y => snd x <= snd y)) LE.
             specialize (LE (tsk0, R0)).
             apply/(all_nthP (tsk0,R0)).
             intros j LTj; generalize UNZIP'; simpl; intro SIZE'.
@@ -614,6 +613,8 @@ Module ResponseTimeIterationEDF.
             k <= max_steps ts ->
             \sum_((tsk, R) <- f k) (R - task_cost tsk) + 1 > k.
         Proof.
+          have INC := bertogna_edf_comp_f_increases.
+          have MONO := bertogna_edf_comp_iteration_monotonic.
           rename H_at_least_one_task into NONEMPTY.
           unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
           rename H_valid_task_parameters into VALID.
@@ -661,12 +662,12 @@ Module ResponseTimeIterationEDF.
             }
             rewrite -2!big_seq_cond.
            
-            have LT := bertogna_edf_comp_f_increases step (ltnW LE).
-            have MONO := bertogna_edf_comp_iteration_monotonic step.
+            have LT := INC step (ltnW LE).
+            specialize (MONO step).
             
             move: LT => /andP [_ LT]; move: LT => /hasP LT.
             destruct LT as [[x1 x2] INzip LT]; simpl in *.
-            move: MONO => /andP [_ /(zipP (fun x y => snd x <= snd y)) MONO].
+            move: MONO => /andP [_ /(zipP _ (fun x y => snd x <= snd y)) MONO].
             rewrite 2!(big_nth (elem, 0)).
             apply mem_zip_exists with (elem := (elem, 0)) (elem' := (elem, 0)) in INzip; des;
               last by rewrite size_map.
@@ -940,6 +941,9 @@ Module ResponseTimeIterationEDF.
       Theorem taskset_schedulable_by_edf_rta :
         forall tsk, tsk \in ts -> no_deadline_missed_by_task tsk.
       Proof.
+        have RLIST := (edf_analysis_yields_response_time_bounds).
+        have DL := (edf_claimed_bounds_le_deadline ts).
+        have HAS := (edf_claimed_bounds_has_R_for_every_task ts).
         unfold no_deadline_missed_by_task, task_misses_no_deadline,
                job_misses_no_deadline, completed,
                edf_schedulable,
@@ -953,10 +957,6 @@ Module ResponseTimeIterationEDF.
                H_test_succeeds into TEST.
         
         move => tsk INtsk j JOBtsk.
-        have RLIST := (edf_analysis_yields_response_time_bounds).
-        have DL := (edf_claimed_bounds_le_deadline ts).
-        have HAS := (edf_claimed_bounds_has_R_for_every_task ts).
-        
         destruct (edf_claimed_bounds ts) as [rt_bounds |] eqn:SOME; last by ins.
         exploit (HAS rt_bounds tsk); [by ins | by ins | clear HAS; intro HAS; des].
         have COMPLETED := RLIST tsk R HAS j JOBtsk.
diff --git a/analysis/basic/bertogna_edf_theory.v b/analysis/basic/bertogna_edf_theory.v
index beb2917777f805ad5787205ec92ea31cfaea6d32..b76bc4784d570fc6e6c1487efbe411aa755fd732 100644
--- a/analysis/basic/bertogna_edf_theory.v
+++ b/analysis/basic/bertogna_edf_theory.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.task_arrival
                rt.model.basic.schedule rt.model.basic.platform rt.model.basic.interference
                rt.model.basic.workload rt.model.basic.schedulability rt.model.basic.priority
                rt.model.basic.platform rt.model.basic.response_time.
 Require Import rt.analysis.basic.workload_bound rt.analysis.basic.interference_bound_edf.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeAnalysisEDF.
 
@@ -284,8 +283,8 @@ Module ResponseTimeAnalysisEDF.
           | by apply JOBtsk | by apply BACK | ].
         {
           intros j0 tsk0 TSK0 LE.
-          cut (tsk0 \in unzip1 rt_bounds); [intro IN | by rewrite UNZIP -TSK0 FROMTS].
-          move: IN => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
+          cut (tsk0 \in unzip1 rt_bounds = true); last by rewrite UNZIP -TSK0 FROMTS.
+          move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
           apply completion_monotonic with (t0 := job_arrival j0 + R0); try (by done).
           {
             rewrite leq_add2l TSK0.
@@ -362,6 +361,7 @@ Module ResponseTimeAnalysisEDF.
       Lemma bertogna_edf_all_cpus_busy :
         \sum_(tsk_k <- ts_interf) x tsk_k = X * num_cpus.
       Proof.
+        have DIFFTASK := bertogna_edf_interference_by_different_tasks.
         rename H_all_jobs_from_taskset into FROMTS,
                H_valid_task_parameters into PARAMS,
                H_job_of_tsk into JOBtsk, H_sporadic_tasks into SPO,
@@ -397,7 +397,7 @@ Module ResponseTimeAnalysisEDF.
         }
         rewrite mem_filter; apply/andP; split; last by apply FROMTS.
         unfold jldp_can_interfere_with.
-        apply bertogna_edf_interference_by_different_tasks with (t := t); [by auto | by done |].
+        apply DIFFTASK with (t := t); [by auto | by done |].
         by apply/existsP; exists cpu; apply/eqP.
       Qed.
 
@@ -416,8 +416,8 @@ Module ResponseTimeAnalysisEDF.
                H_all_jobs_from_taskset into FROMTS,
                H_all_previous_jobs_completed_on_time into BEFOREok.
         intros t j0 LEt LE.
-        cut ((job_task j0) \in unzip1 rt_bounds); [intro IN | by rewrite UNZIP FROMTS].
-        move: IN => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
+        cut ((job_task j0) \in unzip1 rt_bounds = true); last by rewrite UNZIP FROMTS.
+        move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
         apply completion_monotonic with (t0 := job_arrival j0 + R0); first by done.
         {
           rewrite leq_add2l; apply leq_trans with (n := task_deadline (job_task j0));
@@ -442,6 +442,8 @@ Module ResponseTimeAnalysisEDF.
           0 < cardGE delta < num_cpus ->
           \sum_(i <- ts_interf | x i < delta) x i >= delta * (num_cpus - cardGE delta).
       Proof.
+        have COMP := bertogna_edf_all_previous_jobs_complete_by_their_period.
+        have INV := bertogna_edf_scheduling_invariant.
         rename H_all_jobs_from_taskset into FROMTS,
                H_valid_task_parameters into PARAMS,
                H_job_of_tsk into JOBtsk,
@@ -515,7 +517,7 @@ Module ResponseTimeAnalysisEDF.
             (job_cost0 := job_cost) (job_task0 := job_task) (sched0 := sched) (j0 := j) (t0 := t);
             rewrite ?JOBtsk ?SAMEtsk //; first by apply PARAMS; rewrite -JOBtsk FROMTS.
             intros j0 tsk0 TSK0 LE.
-            by apply (bertogna_edf_all_previous_jobs_complete_by_their_period t); rewrite ?TSK0.
+            by apply (COMP t); rewrite ?TSK0.
           }
           by subst j2; apply SEQ with (j := j1) (t := t).
         }
@@ -549,9 +551,8 @@ Module ResponseTimeAnalysisEDF.
           eapply leq_trans with (n := count (predC (fun tsk => delta <= x tsk)) _);
             last by apply eq_leq, eq_in_count; red; ins; rewrite ltnNge.
           rewrite leq_subLR count_predC size_filter.
-          apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
-            first by rewrite bertogna_edf_scheduling_invariant.
-          by rewrite count_filter.
+          by apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
+            [by rewrite INV | by rewrite count_filter].
         }
         {
           unfold x at 2, total_interference_B.
@@ -624,9 +625,12 @@ Module ResponseTimeAnalysisEDF.
         \sum_((tsk_other, R_other) <- rt_bounds | jldp_can_interfere_with tsk tsk_other)
           minn (x tsk_other) (R - task_cost tsk + 1) > I tsk R.
       Proof.
+        have GE_COST := bertogna_edf_R_other_ge_cost.
+        have EXCEEDS := bertogna_edf_minimum_exceeds_interference.
+        have ALLBUSY := bertogna_edf_all_cpus_busy.
+        have TOOMUCH := bertogna_edf_too_much_interference.
         rename H_rt_bounds_contains_all_tasks into UNZIP,
           H_response_time_is_fixed_point into REC.
-        have GE_COST := bertogna_edf_R_other_ge_cost.
         apply leq_trans with (n := \sum_(tsk_other <- ts_interf) minn (x tsk_other) (R - task_cost tsk + 1));
           last first.
         {
@@ -654,11 +658,10 @@ Module ResponseTimeAnalysisEDF.
         rewrite -addn1 -leq_subLR.
         rewrite -[R + 1 - _]subh1; last by apply GE_COST.
         rewrite leq_divRL; last by apply H_at_least_one_cpu.
-        apply bertogna_edf_minimum_exceeds_interference.
+        apply EXCEEDS.
         apply leq_trans with (n := X * num_cpus);
-          last by rewrite bertogna_edf_all_cpus_busy.
-        rewrite leq_mul2r; apply/orP; right.
-        by apply bertogna_edf_too_much_interference.
+          last by rewrite ALLBUSY.
+        by rewrite leq_mul2r; apply/orP; right; apply TOOMUCH.
       Qed.
 
       (* 8) After concluding that the sum of the minimum exceeds (R - e_i + 1),
@@ -669,6 +672,9 @@ Module ResponseTimeAnalysisEDF.
           (tsk_other, R_other) \in rt_bounds /\
           (minn (x tsk_other) (R - task_cost tsk + 1) > interference_bound tsk_other R_other).
       Proof.
+        have SUM := bertogna_edf_sum_exceeds_total_interference.
+        have BOUND := bertogna_edf_workload_bounds_interference.
+        have EDFBOUND := bertogna_edf_specific_bound_holds.
         rename H_rt_bounds_contains_all_tasks into UNZIP.
         assert (HAS: has (fun tup : task_with_response_time =>
                             let (tsk_other, R_other) := tup in
@@ -679,7 +685,6 @@ Module ResponseTimeAnalysisEDF.
         {
           apply/negP; unfold not; intro NOTHAS.
           move: NOTHAS => /negP /hasPn ALL.
-          have SUM := bertogna_edf_sum_exceeds_total_interference.
           rewrite -[_ < _]negbK in SUM.
           move: SUM => /negP SUM; apply SUM; rewrite -leqNgt.
           unfold I, total_interference_bound_edf.
@@ -692,11 +697,11 @@ Module ResponseTimeAnalysisEDF.
             unfold interference_bound; rewrite leq_min; apply/andP; split;
               last by rewrite geq_minr.
             apply leq_trans with (n := x tsk_k); first by rewrite geq_minl.
-            by apply bertogna_edf_workload_bounds_interference.
+            by apply BOUND.
           }
           {
             apply leq_trans with (n := x tsk_k); first by rewrite geq_minl.
-            by apply bertogna_edf_specific_bound_holds.
+            by apply EDFBOUND.
           }
         }
         move: HAS => /hasP HAS; destruct HAS as [[tsk_k R_k] HPk MIN].
diff --git a/analysis/basic/bertogna_fp_comp.v b/analysis/basic/bertogna_fp_comp.v
index 8a1019fcfec7202c16b6d1bbe2be73e034d065d5..dfa823f813dfcdf1e1ed3fd1a5abd4ba5a3c62e6 100644
--- a/analysis/basic/bertogna_fp_comp.v
+++ b/analysis/basic/bertogna_fp_comp.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.analysis.basic.bertogna_fp_theory.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeIterationFP.
 
@@ -444,6 +443,7 @@ Module ResponseTimeIterationFP.
             k <= max_steps tsk ->
             f k > k + task_cost tsk - 1.
         Proof.
+          have INC := bertogna_fp_comp_f_increases.
           rename H_valid_task_parameters into TASK_PARAMS.
           unfold valid_sporadic_taskset, is_valid_sporadic_task in *; des.
           exploit (TASK_PARAMS tsk);
@@ -457,15 +457,12 @@ Module ResponseTimeIterationFP.
           {
             intros LT.
             specialize (IHk (ltnW LT)).
-            apply leq_ltn_trans with (n := f k);
-              last by apply bertogna_fp_comp_f_increases, ltnW.
+            apply leq_ltn_trans with (n := f k); last by apply INC, ltnW.
             rewrite -addn1 -addnA [1 + _]addnC addnA -addnBA // subnn addn0.
             rewrite -(ltn_add2r 1) in IHk.
-            rewrite subh1 in IHk; last first.
-            {
-              apply leq_trans with (n := task_cost tsk); last by apply leq_addl.
-              by apply PARAMS.
-            }
+            rewrite subh1 in IHk;
+              last by apply leq_trans with (n := task_cost tsk);
+                [by apply PARAMS | by apply leq_addl].
             by rewrite -addnBA // subnn addn0 addn1 ltnS in IHk.
           }  
         Qed.
@@ -476,6 +473,8 @@ Module ResponseTimeIterationFP.
       Lemma per_task_rta_converges:
         f (max_steps tsk) = f (max_steps tsk).+1.
       Proof.
+        have TOOMUCH := bertogna_fp_comp_rt_grows_too_much.
+        have INC := bertogna_fp_comp_f_increases.
         rename H_no_larger_than_deadline into LE,
                H_valid_task_parameters into TASK_PARAMS.
         unfold valid_sporadic_taskset, is_valid_sporadic_task in *; des.
@@ -493,18 +492,19 @@ Module ResponseTimeIterationFP.
         move: EX => /forall_inP EX.
         rewrite leqNgt in LE; move: LE => /negP LE.
         exfalso; apply LE.
-        have TOOMUCH := bertogna_fp_comp_rt_grows_too_much _ (max_steps tsk).
-        exploit TOOMUCH; [| by apply leqnn |].
+
+        assert (DIFF: forall k : nat, k <= max_steps tsk -> f k != f k.+1).
         {
           intros k LEk; rewrite -ltnS in LEk.
-          by exploit (EX (Ordinal LEk)); [by done | intro DIFF].
-        }
-        unfold max_steps at 1.
+          by exploit (EX (Ordinal LEk)); [by done | intro DIFF; apply DIFF].
+        }          
+        exploit TOOMUCH; [by apply DIFF | by apply leq_addr |].
         exploit (TASK_PARAMS tsk);
           [by rewrite mem_rcons in_cons eq_refl orTb | intro PARAMS; des].
-        rewrite -addnA [1 + _]addnC addnA -addnBA // subnn addn0.
         rewrite subh1; last by apply PARAMS2.
-        by rewrite -addnBA // subnn addn0.
+        rewrite -addnBA // subnn addn0 subn1 prednK //.
+        intros LT; apply (leq_ltn_trans LT).
+        by rewrite /max_steps [_ - _ + 1]addn1; apply INC, leq_addr.
       Qed.
       
     End Convergence.
@@ -657,7 +657,7 @@ Module ResponseTimeIterationFP.
               (job_task0 := job_task) (ts0 := ts) (hp_bounds0 := take idx hp_bounds)
               (higher_eq_priority := higher_priority); try (by done).
         {
-          cut (NTH idx \in hp_bounds); [intros IN | by apply mem_nth].
+          cut (NTH idx \in hp_bounds = true); [intros IN | by apply mem_nth].
           by rewrite -UNZIP; apply/mapP; exists (TASK idx, RESP idx); rewrite PAIR.
         }
         {
@@ -688,15 +688,15 @@ Module ResponseTimeIterationFP.
       Theorem taskset_schedulable_by_fp_rta :
         forall tsk, tsk \in ts -> no_deadline_missed_by_task tsk.
       Proof.
+        have RLIST := (fp_analysis_yields_response_time_bounds).
+        have UNZIP := (fp_claimed_bounds_unzip ts).
+        have DL := (fp_claimed_bounds_le_deadline ts).
+
         unfold no_deadline_missed_by_task, task_misses_no_deadline,
                job_misses_no_deadline, completed,
                fp_schedulable, valid_sporadic_job in *.
         rename H_valid_job_parameters into JOBPARAMS.
         move => tsk INtsk j JOBtsk.
-        have RLIST := (fp_analysis_yields_response_time_bounds).
-        have UNZIP := (fp_claimed_bounds_unzip ts).
-        have DL := (fp_claimed_bounds_le_deadline ts).
-
         destruct (fp_claimed_bounds ts) as [rt_bounds |]; last by ins.
         feed (UNZIP rt_bounds); first by done.
         assert (EX: exists R, (tsk, R) \in rt_bounds).
diff --git a/analysis/basic/bertogna_fp_theory.v b/analysis/basic/bertogna_fp_theory.v
index 5fce53b10dadb037e09211adee31817d20ce53c7..250e35f2efb9053d3e0b9d49a694c2b3156c1f4f 100644
--- a/analysis/basic/bertogna_fp_theory.v
+++ b/analysis/basic/bertogna_fp_theory.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.task_arrival
                rt.model.basic.schedule rt.model.basic.platform rt.model.basic.platform_fp
                rt.model.basic.workload rt.model.basic.schedulability rt.model.basic.priority
                rt.model.basic.response_time rt.model.basic.interference.
 Require Import rt.analysis.basic.workload_bound rt.analysis.basic.interference_bound_fp.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeAnalysisFP.
 
@@ -159,7 +158,7 @@ Module ResponseTimeAnalysisFP.
             rename H_hp_bounds_has_interfering_tasks into UNZIP,
                    H_response_time_of_tsk_other into INbounds.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in ts_interf);
+            cut (tsk_other \in ts_interf = true);
               first by rewrite mem_filter; move => /andP [_ IN].
             unfold ts_interf; rewrite UNZIP.
             by apply/mapP; exists (tsk_other, R_other).
@@ -171,7 +170,7 @@ Module ResponseTimeAnalysisFP.
             rename H_hp_bounds_has_interfering_tasks into UNZIP,
                    H_response_time_of_tsk_other into INbounds.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in ts_interf);
+            cut (tsk_other \in ts_interf = true);
               first by rewrite mem_filter; move => /andP [INTERF _].
             unfold ts_interf; rewrite UNZIP.
             by apply/mapP; exists (tsk_other, R_other).
@@ -289,7 +288,7 @@ Module ResponseTimeAnalysisFP.
           {
             intros j_other tsk_other JOBother INTERF.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in unzip1 hp_bounds); last first.
+            cut (tsk_other \in unzip1 hp_bounds = true); last first.
             {
               rewrite -UNZIP mem_filter; apply/andP; split; first by done.
               by rewrite -JOBother; apply FROMTS.
@@ -301,7 +300,8 @@ Module ResponseTimeAnalysisFP.
               rewrite leq_add2l.
               apply leq_trans with (n := task_deadline tsk_other); first by apply NOMISS.
               apply RESTR.
-              cut (tsk_other \in unzip1 hp_bounds); last by apply/mapP; exists (tsk_other, R').
+              cut (tsk_other \in unzip1 hp_bounds = true);
+                last by apply/mapP; exists (tsk_other, R').
               by rewrite -UNZIP mem_filter; move => /andP [_ IN'].
             }
           }
@@ -372,6 +372,7 @@ Module ResponseTimeAnalysisFP.
         Lemma bertogna_fp_all_cpus_busy :
           \sum_(tsk_k <- ts_interf) x tsk_k = X * num_cpus.
         Proof.
+          have DIFFTASK := bertogna_fp_interference_by_different_tasks.
           rename H_work_conserving into WORK, H_enforces_FP_policy into FP,
                  H_all_jobs_from_taskset into FROMTS, H_job_of_tsk into JOBtsk.
           unfold sporadic_task_model in *.
@@ -399,7 +400,7 @@ Module ResponseTimeAnalysisFP.
             rewrite -JOBtsk; apply FP with (t := t); try by done.
             by apply/existsP; exists cpu; apply/eqP.
           }
-          apply bertogna_fp_interference_by_different_tasks with (t := t); [by auto | by done |].
+          apply DIFFTASK with (t := t); [by auto | by done |].
           by apply/existsP; exists cpu; apply/eqP.
         Qed.
 
@@ -414,7 +415,8 @@ Module ResponseTimeAnalysisFP.
           forall delta,
             0 < cardGE delta < num_cpus ->
             \sum_(i <- ts_interf | x i < delta) x i >= delta * (num_cpus - cardGE delta).
-        Proof.          
+        Proof.
+          have INV := bertogna_fp_scheduling_invariant.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_valid_task_parameters into PARAMS,
                  H_job_of_tsk into JOBtsk,
@@ -563,9 +565,8 @@ Module ResponseTimeAnalysisFP.
             eapply leq_trans with (n := count (predC (fun tsk => delta <= x tsk)) _);
               last by apply eq_leq, eq_in_count; red; ins; rewrite ltnNge.
             rewrite leq_subLR count_predC size_filter.
-            apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
-              first by rewrite bertogna_fp_scheduling_invariant.
-            by rewrite count_filter.
+            by apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
+              [by rewrite INV | by rewrite count_filter].
           }
           {
             unfold x at 2, total_interference_B.
@@ -640,6 +641,9 @@ Module ResponseTimeAnalysisFP.
           total_interference_bound_fp task_cost task_period tsk hp_bounds
                                       R higher_eq_priority.
         Proof.
+          have EXCEEDS := bertogna_fp_minimum_exceeds_interference.
+          have ALLBUSY := bertogna_fp_all_cpus_busy.
+          have TOOMUCH := bertogna_fp_too_much_interference.
           rename H_hp_bounds_has_interfering_tasks into UNZIP,
                  H_response_time_recurrence_holds into REC.
           apply leq_trans with (n := \sum_(tsk_k <- ts_interf) minn (x tsk_k) (R - task_cost tsk + 1));
@@ -657,11 +661,9 @@ Module ResponseTimeAnalysisFP.
           rewrite -addn1 -leq_subLR.
           rewrite -[R + 1 - _]subh1; last by rewrite REC; apply leq_addr.
           rewrite leq_divRL; last by apply H_at_least_one_cpu.
-          apply bertogna_fp_minimum_exceeds_interference.
-          apply leq_trans with (n := X * num_cpus);
-            last by rewrite bertogna_fp_all_cpus_busy.
-          rewrite leq_mul2r; apply/orP; right.
-          by apply bertogna_fp_too_much_interference.
+          apply EXCEEDS.
+          apply leq_trans with (n := X * num_cpus); last by rewrite ALLBUSY.
+          by rewrite leq_mul2r; apply/orP; right; apply TOOMUCH.
         Qed.
 
         (* 6) After concluding that the sum of the minimum exceeds (R - e_i + 1),
@@ -673,6 +675,8 @@ Module ResponseTimeAnalysisFP.
             (minn (x tsk_k) (R - task_cost tsk + 1) >
               minn (workload_bound tsk_k R_k) (R - task_cost tsk + 1)).
         Proof.
+          have SUM := bertogna_fp_sum_exceeds_total_interference.
+          have INTERFk := bertogna_fp_tsk_other_interferes.
           rename H_hp_bounds_has_interfering_tasks into UNZIP.
           assert (HAS: has (fun tup : task_with_response_time =>
                              let (tsk_k, R_k) := tup in
@@ -682,7 +686,6 @@ Module ResponseTimeAnalysisFP.
           {
             apply/negP; unfold not; intro NOTHAS.
             move: NOTHAS => /negP /hasPn ALL.
-            have SUM := bertogna_fp_sum_exceeds_total_interference.
             rewrite -[_ < _]negbK in SUM.
             move: SUM => /negP SUM; apply SUM; rewrite -leqNgt.
             unfold total_interference_bound_fp.
@@ -691,7 +694,7 @@ Module ResponseTimeAnalysisFP.
             apply leq_sum; move => tsk_k /andP [HPk _]; destruct tsk_k as [tsk_k R_k].
             specialize (ALL (tsk_k, R_k) HPk).
             rewrite -leqNgt in ALL.
-            have INTERFk := bertogna_fp_tsk_other_interferes tsk_k R_k HPk.
+            specialize (INTERFk tsk_k R_k HPk).
             fold (can_interfere_with_tsk); rewrite INTERFk.
             by apply ALL.
           }
@@ -707,6 +710,8 @@ Module ResponseTimeAnalysisFP.
     Theorem bertogna_cirinei_response_time_bound_fp :
       response_time_bounded_by tsk R.
     Proof.
+      have WORKLOAD := bertogna_fp_workload_bounds_interference.
+      have EX := bertogna_fp_exists_task_that_exceeds_bound.
       rename H_response_time_bounds_ge_cost into GE_COST,
              H_interfering_tasks_miss_no_deadlines into NOMISS,
              H_response_time_recurrence_holds into REC,
@@ -743,10 +748,10 @@ Module ResponseTimeAnalysisFP.
       apply negbT in NOTCOMP; exfalso.
 
       (* We derive a contradiction using the previous lemmas. *)
-      have EX := bertogna_fp_exists_task_that_exceeds_bound j JOBtsk NOTCOMP BEFOREok.
+      specialize (EX j JOBtsk NOTCOMP BEFOREok).
       destruct EX as [tsk_k [R_k [HPk LTmin]]].
       unfold minn at 1 in LTmin.
-      have WORKLOAD := bertogna_fp_workload_bounds_interference j tsk_k R_k HPk.
+      specialize (WORKLOAD j tsk_k R_k HPk).
       destruct (W task_cost task_period tsk_k R_k R < R - task_cost tsk + 1); rewrite leq_min in LTmin; 
         last by move: LTmin => /andP [_ BUG]; rewrite ltnn in BUG.
       move: LTmin => /andP [BUG _]; des.
diff --git a/analysis/basic/interference_bound.v b/analysis/basic/interference_bound.v
index d38bb4d3276908c190d2dbd0cbbf73430fcd3302..63229dee756439782224ada2545ffea7a6c154cc 100644
--- a/analysis/basic/interference_bound.v
+++ b/analysis/basic/interference_bound.v
@@ -1,8 +1,7 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.schedule.
 Require Import rt.analysis.basic.workload_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module InterferenceBoundGeneric.
 
diff --git a/analysis/basic/interference_bound_edf.v b/analysis/basic/interference_bound_edf.v
index 23c108885d0141598dca1121e291e5681a46cbc3..bf569094fe92c4d5e7aa0739082d1c804cf431df 100644
--- a/analysis/basic/interference_bound_edf.v
+++ b/analysis/basic/interference_bound_edf.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.task_arrival rt.model.basic.platform rt.model.basic.response_time
                rt.model.basic.workload rt.model.basic.priority rt.model.basic.schedulability
                rt.model.basic.interference rt.model.basic.interference_edf.
 Require Import rt.analysis.basic.workload_bound rt.analysis.basic.interference_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module InterferenceBoundEDF.
 
@@ -634,6 +633,8 @@ Module InterferenceBoundEDF.
           Lemma interference_bound_edf_holds_for_a_single_job :
             interference_caused_by j_fst t1 t2 <= interference_bound.
           Proof.
+            have ONE := interference_bound_edf_simpl_when_there's_one_job.
+            have SLACK := interference_bound_edf_interference_of_j_fst_limited_by_slack.
             rename H_many_jobs into NUM, H_only_one_job into SIZE.
             unfold interference_caused_by, interference_bound, edf_specific_interference_bound.
             fold D_i D_k p_k n_k.
@@ -645,8 +646,7 @@ Module InterferenceBoundEDF.
               rewrite interference_bound_edf_job_in_same_sequence.
               by apply mem_nth; rewrite SIZE.
             }
-            rewrite interference_bound_edf_simpl_when_there's_one_job.
-            by apply interference_bound_edf_interference_of_j_fst_limited_by_slack.
+            by rewrite ONE; apply SLACK.
           Qed.
 
         End InterferenceSingleJob.
@@ -806,7 +806,7 @@ Module InterferenceBoundEDF.
                 by rewrite sort_uniq -/interfering_jobs filter_uniq // undup_uniq.
                 by rewrite INnth INnth0.  
             }
-            by rewrite subh3 // addnC -INnth.
+            by rewrite subh3 // addnC /p_k -INnth.
           Qed.
 
           (* Using the lemma above, we prove that the ratio n_k is at least the number of
@@ -814,14 +814,14 @@ Module InterferenceBoundEDF.
           Lemma interference_bound_edf_n_k_covers_middle_jobs_plus_one :
             n_k >= num_mid_jobs.+1.
           Proof.
-            rename H_valid_task_parameters into TASK_PARAMS,
-                   H_tsk_k_in_task_set into INk.
-            unfold valid_sporadic_taskset, is_valid_sporadic_task,
-                   interference_bound, edf_specific_interference_bound in *.
             have DIST := interference_bound_edf_many_periods_in_between.
             have AFTERt1 :=
                 interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval
                 interference_bound_edf_j_fst_completed_on_time.
+            rename H_valid_task_parameters into TASK_PARAMS,
+                   H_tsk_k_in_task_set into INk.
+            unfold valid_sporadic_taskset, is_valid_sporadic_task,
+                   interference_bound, edf_specific_interference_bound in *.
             rewrite leqNgt; apply/negP; unfold not; intro LTnk; unfold n_k in LTnk.
             rewrite ltn_divLR in LTnk; last by specialize (TASK_PARAMS tsk_k INk); des.
             apply (leq_trans LTnk) in DIST; rewrite ltn_subRL in DIST.
@@ -876,8 +876,8 @@ Module InterferenceBoundEDF.
           Lemma interference_bound_edf_n_k_equals_num_mid_jobs_plus_one :
             n_k = num_mid_jobs.+1.
           Proof.
-            rename H_many_jobs into NUM, H_at_least_two_jobs into SIZE.
             have NK := interference_bound_edf_n_k_covers_middle_jobs_plus_one.
+            rename H_many_jobs into NUM, H_at_least_two_jobs into SIZE.
             move: NK; rewrite leq_eqVlt orbC; move => /orP NK; des;
              [by rewrite SIZE ltnS leqNgt NK in NUM | by done].
           Qed.
diff --git a/analysis/basic/interference_bound_fp.v b/analysis/basic/interference_bound_fp.v
index 6facd93a09b6a9e7accb6044315e26295c3204a2..35052c7e523e468f7b721b04179d16da3c2f60c1 100644
--- a/analysis/basic/interference_bound_fp.v
+++ b/analysis/basic/interference_bound_fp.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.schedule rt.model.basic.priority rt.model.basic.workload
                rt.model.basic.interference.
 Require Import rt.analysis.basic.workload_bound rt.analysis.basic.interference_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module InterferenceBoundFP.
 
diff --git a/analysis/basic/workload_bound.v b/analysis/basic/workload_bound.v
index 4658f11cb61633716a0034b4281c3e27de01d99a..70b0436acfbbfd5e0a2cce2a5215bce47f6648f4 100644
--- a/analysis/basic/workload_bound.v
+++ b/analysis/basic/workload_bound.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.task_arrival rt.model.basic.response_time
                rt.model.basic.workload rt.model.basic.schedulability.
-Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
 
 Module WorkloadBound.
   
diff --git a/analysis/jitter/bertogna_edf_comp.v b/analysis/jitter/bertogna_edf_comp.v
index dfba24def0b4b548f819eb2bbc569d1cdf56ea76..cf5a0572b4a53b25ad4b394a815fd3daa3a9815b 100755
--- a/analysis/jitter/bertogna_edf_comp.v
+++ b/analysis/jitter/bertogna_edf_comp.v
@@ -1,7 +1,6 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.analysis.jitter.bertogna_edf_theory.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeIterationEDF.
 
@@ -292,7 +291,7 @@ Module ResponseTimeIterationEDF.
         Proof.
           intros l; unfold all_le; rewrite eq_refl andTb.
           destruct l; first by done.
-          by apply/(zipP (fun x y => snd x <= snd y)).
+          by apply/(zipP t (fun x y => snd x <= snd y)).
         Qed.
 
         (* ... and transitive. *)
@@ -301,8 +300,8 @@ Module ResponseTimeIterationEDF.
           unfold transitive, all_le.
           move => y x z /andP [/eqP ZIPxy LExy] /andP [/eqP ZIPyz LEyz].
           apply/andP; split; first by rewrite ZIPxy -ZIPyz.
-          move: LExy => /(zipP (fun x y => snd x <= snd y)) LExy.
-          move: LEyz => /(zipP (fun x y => snd x <= snd y)) LEyz.
+          move: LExy => /(zipP _ (fun x y => snd x <= snd y)) LExy.
+          move: LEyz => /(zipP _ (fun x y => snd x <= snd y)) LEyz.
           assert (SIZExy: size (unzip1 x) = size (unzip1 y)).
             by rewrite ZIPxy.
           assert (SIZEyz: size (unzip1 y) = size (unzip1 z)).
@@ -313,21 +312,22 @@ Module ResponseTimeIterationEDF.
             apply size0nil in SIZExy; symmetry in SIZEyz.
             by apply size0nil in SIZEyz; subst.
           }
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (t, 0) | by rewrite SIZExy -SIZEyz|]. 
+          specialize (LExy t); specialize (LEyz t).
+          apply/(zipP t (fun x y => snd x <= snd y));
+            first by rewrite SIZExy -SIZEyz. 
           intros i LTi.
           exploit LExy; first by rewrite SIZExy.
           {
             rewrite size_zip -SIZEyz -SIZExy minnn in LTi.
             by rewrite size_zip -SIZExy minnn; apply LTi.
           }
-          instantiate (1 := t); intro LE.
+          intro LE.
           exploit LEyz; first by apply SIZEyz.
           {
             rewrite size_zip SIZExy SIZEyz minnn in LTi.
             by rewrite size_zip SIZEyz minnn; apply LTi.
           }
-          by instantiate (1 := t); intro LE'; apply (leq_trans LE).
+          by intro LE'; apply (leq_trans LE).
         Qed.
 
         (* At any step of the iteration, the corresponding list
@@ -348,8 +348,8 @@ Module ResponseTimeIterationEDF.
             by rewrite iterSr IHstep.
           }
 
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (tsk0,0)|by rewrite edf_claimed_bounds_size size_map |].
+          apply/(zipP (tsk0,0) (fun x y => snd x <= snd y));
+            first by rewrite edf_claimed_bounds_size size_map.
 
           intros i LTi; rewrite iterS; unfold edf_rta_iteration at 1.
           have MAP := @nth_map _ (tsk0,0) _ (tsk0,0).
@@ -403,10 +403,9 @@ Module ResponseTimeIterationEDF.
           apply f_equal with (B := nat) (f := fun x => size x) in UNZIP'.
           rename UNZIP' into SIZE.
           rewrite size_map [size (unzip1 _)]size_map in SIZE.
-          move: LE => /(zipP (fun x y => snd x <= snd y)) LE.
+          move: LE => /(zipP _ (fun x y => snd x <= snd y)) LE.
           destruct x1 as [| p0 x1'], x2 as [| p0' x2']; try (by ins).
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (p0,0) | by done |].
+          apply/(zipP p0 (fun x y => snd x <= snd y)); first by done.
 
           intros i LTi.
           exploit LE; first by rewrite 2!size_map in SIZE.
@@ -474,7 +473,7 @@ Module ResponseTimeIterationEDF.
           assert (GE_COST: all (fun p => task_cost (fst p) <= snd p) ((tsk0, R0) :: x1')). 
           {
             clear LE; move: LEinit => /andP [/eqP UNZIP' LE].
-            move: LE => /(zipP (fun x y => snd x <= snd y)) LE.
+            move: LE => /(zipP _ (fun x y => snd x <= snd y)) LE.
             specialize (LE (tsk0, R0)).
             apply/(all_nthP (tsk0,R0)).
             intros j LTj; generalize UNZIP'; simpl; intro SIZE'.
@@ -669,6 +668,8 @@ Module ResponseTimeIterationEDF.
             k <= max_steps ts ->
             \sum_((tsk, R) <- f k) (R - task_cost tsk) + 1 > k.
         Proof.
+          have LT := bertogna_edf_comp_f_increases.
+          have MONO := bertogna_edf_comp_iteration_monotonic.
           rename H_at_least_one_task into NONEMPTY.
           unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
           rename H_valid_task_parameters into VALID.
@@ -716,12 +717,12 @@ Module ResponseTimeIterationEDF.
             }
             rewrite -2!big_seq_cond.
            
-            have LT := bertogna_edf_comp_f_increases step (ltnW LE).
-            have MONO := bertogna_edf_comp_iteration_monotonic step.
+            specialize (LT step (ltnW LE)).
+            specialize (MONO step).
             
             move: LT => /andP [_ LT]; move: LT => /hasP LT.
             destruct LT as [[x1 x2] INzip LT]; simpl in *.
-            move: MONO => /andP [_ /(zipP (fun x y => snd x <= snd y)) MONO].
+            move: MONO => /andP [_ /(zipP _ (fun x y => snd x <= snd y)) MONO].
             rewrite 2!(big_nth (elem, 0)).
             apply mem_zip_exists with (elem := (elem, 0)) (elem' := (elem, 0)) in INzip; des;
               last by rewrite size_map.
@@ -1034,6 +1035,9 @@ Module ResponseTimeIterationEDF.
       Theorem taskset_schedulable_by_edf_rta :
         forall tsk, tsk \in ts -> no_deadline_missed_by_task tsk.
       Proof.
+        have RLIST := (edf_analysis_yields_response_time_bounds).
+        have DL := (edf_claimed_bounds_le_deadline ts).
+        have HAS := (edf_claimed_bounds_has_R_for_every_task ts).
         unfold no_deadline_missed_by_task, task_misses_no_deadline,
                job_misses_no_deadline, completed,
                edf_schedulable,
@@ -1045,12 +1049,7 @@ Module ResponseTimeIterationEDF.
                H_jobs_execute_after_jitter into AFTER,
                H_all_jobs_from_taskset into ALLJOBS,
                H_test_succeeds into TEST.
-        
         move => tsk INtsk j JOBtsk.
-        have RLIST := (edf_analysis_yields_response_time_bounds).
-        have DL := (edf_claimed_bounds_le_deadline ts).
-        have HAS := (edf_claimed_bounds_has_R_for_every_task ts).
-        
         destruct (edf_claimed_bounds ts) as [rt_bounds |] eqn:SOME; last by ins.
         exploit (HAS rt_bounds tsk); [by ins | by ins | clear HAS; intro HAS; des].
         have COMPLETED := RLIST tsk R HAS j JOBtsk.
diff --git a/analysis/jitter/bertogna_edf_theory.v b/analysis/jitter/bertogna_edf_theory.v
index ceaa3f3b4be86ba63492dd9b5c7f2dd8d9eec301..3ea4ad152dadba7bda035b648a224d03303bdadd 100644
--- a/analysis/jitter/bertogna_edf_theory.v
+++ b/analysis/jitter/bertogna_edf_theory.v
@@ -1,4 +1,3 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.job rt.model.jitter.task rt.model.jitter.task_arrival
                rt.model.jitter.schedule rt.model.jitter.platform rt.model.jitter.interference
@@ -6,7 +5,7 @@ Require Import rt.model.jitter.job rt.model.jitter.task rt.model.jitter.task_arr
                rt.model.jitter.priority rt.model.jitter.platform rt.model.jitter.response_time.
 Require Import rt.analysis.jitter.workload_bound
                rt.analysis.jitter.interference_bound_edf.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeAnalysisEDFJitter.
 
@@ -300,8 +299,8 @@ Module ResponseTimeAnalysisEDFJitter.
             | by apply JOBtsk | by apply BACK | ].
           {
             intros j0 tsk0 TSK0 LE.
-            cut (tsk0 \in unzip1 rt_bounds); [intro IN | by rewrite UNZIP -TSK0 FROMTS].
-            move: IN => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
+            cut (tsk0 \in unzip1 rt_bounds = true); last by rewrite UNZIP -TSK0 FROMTS.
+            move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
             apply completion_monotonic with (t0 := job_arrival j0 + task_jitter tsk0 + R0); try (by done).
             {
               rewrite -addnA leq_add2l TSK0.
@@ -404,6 +403,7 @@ Module ResponseTimeAnalysisEDFJitter.
         Lemma bertogna_edf_all_cpus_busy :
           \sum_(tsk_k <- ts_interf) x tsk_k = X * num_cpus.
         Proof.
+          have DIFFTASK := bertogna_edf_interference_by_different_tasks.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_valid_task_parameters into PARAMS,
                  H_job_of_tsk into JOBtsk, H_sporadic_tasks into SPO,
@@ -434,7 +434,7 @@ Module ResponseTimeAnalysisEDFJitter.
           }
           rewrite mem_filter; apply/andP; split; last by apply FROMTS.
           unfold jldp_can_interfere_with.
-          apply bertogna_edf_interference_by_different_tasks with (t := t); [by auto | by done |].
+          apply DIFFTASK with (t := t); [by auto | by done |].
           by apply/existsP; exists cpu; apply/eqP.
         Qed.
 
@@ -456,8 +456,8 @@ Module ResponseTimeAnalysisEDFJitter.
                  H_all_previous_jobs_completed_on_time into BEFOREok.
           unfold valid_sporadic_job_with_jitter, valid_sporadic_job in *.
           intros t j0 LEt LE.
-          cut ((job_task j0) \in unzip1 rt_bounds); [intro IN | by rewrite UNZIP FROMTS].
-          move: IN => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
+          cut ((job_task j0) \in unzip1 rt_bounds = true); last by rewrite UNZIP FROMTS.
+          move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
           apply completion_monotonic with (t0 := job_arrival j0 +
                                         task_jitter (job_task j0) + R0); first by done.
           {
@@ -489,15 +489,15 @@ Module ResponseTimeAnalysisEDFJitter.
             0 < cardGE delta < num_cpus ->
             \sum_(i <- ts_interf | x i < delta) x i >= delta * (num_cpus - cardGE delta).
         Proof.
+          have COMP := bertogna_edf_all_previous_jobs_complete_by_their_period.
+          have INV := bertogna_edf_scheduling_invariant.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_valid_task_parameters into PARAMS,
-                 H_job_of_tsk into JOBtsk,
-                 H_sporadic_tasks into SPO,
+                 H_job_of_tsk into JOBtsk, H_sporadic_tasks into SPO,
                  H_tsk_R_in_rt_bounds into INbounds,
                  H_all_previous_jobs_completed_on_time into BEFOREok,
                  H_tasks_miss_no_deadlines into NOMISS,
-                 H_constrained_deadlines into CONSTR,
-                 H_sequential_jobs into SEQ.
+                 H_constrained_deadlines into CONSTR, H_sequential_jobs into SEQ.
           unfold sporadic_task_model in *.
           move => delta /andP [HAS LT]. 
           rewrite -has_count in HAS.
@@ -562,8 +562,7 @@ Module ResponseTimeAnalysisEDFJitter.
                (task_deadline0 := task_deadline) (tsk0 := tsk) (job_task0 := job_task) (sched0 := sched)
                (j0 := j) (t0 := t);
               rewrite ?JOBtsk ?SAMEtsk //; first by apply PARAMS; rewrite -JOBtsk FROMTS.
-              intros j0 tsk0 TSK0 LE.
-              by apply (bertogna_edf_all_previous_jobs_complete_by_their_period t); rewrite ?TSK0.
+              by intros j0 tsk0 TSK0 LE; apply (COMP t); rewrite ?TSK0.
             }
             by subst j2; apply SEQ with (j := j1) (t := t).
           }
@@ -596,9 +595,8 @@ Module ResponseTimeAnalysisEDFJitter.
             eapply leq_trans with (n := count (predC (fun tsk => delta <= x tsk)) _);
               last by apply eq_leq, eq_in_count; red; ins; rewrite ltnNge.
             rewrite leq_subLR count_predC size_filter.
-            apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
-              first by rewrite bertogna_edf_scheduling_invariant.
-            by rewrite count_filter.
+            by apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
+              [by rewrite INV | by rewrite count_filter].
           }
           {
             unfold x at 2, total_interference_B.
@@ -671,9 +669,12 @@ Module ResponseTimeAnalysisEDFJitter.
           \sum_((tsk_other, R_other) <- rt_bounds | jldp_can_interfere_with tsk tsk_other)
             minn (x tsk_other) (R - task_cost tsk + 1) > I tsk R.
         Proof.
+          have GE_COST := bertogna_edf_R_other_ge_cost.
+          have EXCEEDS := bertogna_edf_minimum_exceeds_interference.
+          have ALLBUSY := bertogna_edf_all_cpus_busy.
+          have TOOMUCH := bertogna_edf_too_much_interference.
           rename H_rt_bounds_contains_all_tasks into UNZIP,
             H_response_time_is_fixed_point into REC.
-          have GE_COST := bertogna_edf_R_other_ge_cost.
           apply leq_trans with (n := \sum_(tsk_other <- ts_interf) minn (x tsk_other) (R - task_cost tsk + 1));
             last first.
           {
@@ -701,11 +702,9 @@ Module ResponseTimeAnalysisEDFJitter.
           rewrite -addn1 -leq_subLR.
           rewrite -[R + 1 - _]subh1; last by apply GE_COST.
           rewrite leq_divRL; last by apply H_at_least_one_cpu.
-          apply bertogna_edf_minimum_exceeds_interference.
-          apply leq_trans with (n := X * num_cpus);
-            last by rewrite bertogna_edf_all_cpus_busy.
-          rewrite leq_mul2r; apply/orP; right.
-          by apply bertogna_edf_too_much_interference.
+          apply EXCEEDS.
+          apply leq_trans with (n := X * num_cpus); last by rewrite ALLBUSY.
+          by rewrite leq_mul2r; apply/orP; right; apply TOOMUCH.
         Qed.
 
         (* 8) After concluding that the sum of the minimum exceeds (R - e_i + 1),
@@ -716,6 +715,9 @@ Module ResponseTimeAnalysisEDFJitter.
             (tsk_other, R_other) \in rt_bounds /\
             (minn (x tsk_other) (R - task_cost tsk + 1) > interference_bound tsk_other R_other).
         Proof.
+          have SUM := bertogna_edf_sum_exceeds_total_interference.
+          have BOUND := bertogna_edf_workload_bounds_interference.
+          have EDFBOUND := bertogna_edf_specific_bound_holds.
           rename H_rt_bounds_contains_all_tasks into UNZIP.
           assert (HAS: has (fun tup : task_with_response_time =>
                               let (tsk_other, R_other) := tup in
@@ -726,7 +728,6 @@ Module ResponseTimeAnalysisEDFJitter.
           {
             apply/negP; unfold not; intro NOTHAS.
             move: NOTHAS => /negP /hasPn ALL.
-            have SUM := bertogna_edf_sum_exceeds_total_interference.
             rewrite -[_ < _]negbK in SUM.
             move: SUM => /negP SUM; apply SUM; rewrite -leqNgt.
             unfold I, total_interference_bound_edf.
@@ -738,12 +739,12 @@ Module ResponseTimeAnalysisEDFJitter.
             {
               unfold interference_bound; rewrite leq_min; apply/andP; split;
                 last by rewrite geq_minr.
-              apply leq_trans with (n := x tsk_k); first by rewrite geq_minl.
-              by apply bertogna_edf_workload_bounds_interference.
+              by apply leq_trans with (n := x tsk_k);
+                [by rewrite geq_minl | by apply BOUND].
             }
             {
               apply leq_trans with (n := x tsk_k); first by rewrite geq_minl.
-              by apply bertogna_edf_specific_bound_holds.
+              by apply EDFBOUND.
             }
           }
           move: HAS => /hasP HAS; destruct HAS as [[tsk_k R_k] HPk MIN].
@@ -766,6 +767,9 @@ Module ResponseTimeAnalysisEDFJitter.
       Theorem bertogna_cirinei_response_time_bound_edf :
         response_time_bounded_by tsk (task_jitter tsk + R).
       Proof.
+        have EXISTS := bertogna_edf_exists_task_that_exceeds_bound.
+        have BASICBOUND := bertogna_edf_workload_bounds_interference.
+        have EDFBOUND := bertogna_edf_specific_bound_holds.
         rename H_valid_job_parameters into JOBPARAMS.
         unfold valid_sporadic_job_with_jitter, valid_sporadic_job in *.
         intros j JOBtsk.
@@ -806,15 +810,15 @@ Module ResponseTimeAnalysisEDFJitter.
         apply negbT in NOTCOMP; exfalso.
         
         (* Next, we derive a contradiction using the previous lemmas. *)
-        exploit (bertogna_edf_exists_task_that_exceeds_bound tsk' R' INbounds j JOBtsk NOTCOMP).
+        exploit (EXISTS tsk' R' INbounds j JOBtsk NOTCOMP).
         {
           by ins; apply IH with (tsk := tsk_other) (R := R_other).
         } 
         intro EX; destruct EX as [tsk_other [R_other [HP LTmin]]].
         unfold interference_bound_edf, interference_bound_generic in LTmin.
         rewrite minnAC in LTmin; apply min_lt_same in LTmin.
-        have BASICBOUND := bertogna_edf_workload_bounds_interference tsk' R' j JOBtsk BEFOREok tsk_other R_other HP.
-        have EDFBOUND := bertogna_edf_specific_bound_holds tsk' R' INbounds j JOBtsk BEFOREok tsk_other R_other HP.
+        specialize (BASICBOUND tsk' R' j JOBtsk BEFOREok tsk_other R_other HP).
+        specialize (EDFBOUND tsk' R' INbounds j JOBtsk BEFOREok tsk_other R_other HP).
         unfold minn in LTmin; clear -LTmin HP BASICBOUND EDFBOUND tsk; desf.
         {
           by apply (leq_ltn_trans BASICBOUND) in LTmin; rewrite ltnn in LTmin. 
diff --git a/analysis/jitter/bertogna_fp_comp.v b/analysis/jitter/bertogna_fp_comp.v
index 09ab5892e97f4ccb2f99597d59a62098fb27ae8f..5a60ea7f15cb7d53993fd7d48476f49e6ce78550 100644
--- a/analysis/jitter/bertogna_fp_comp.v
+++ b/analysis/jitter/bertogna_fp_comp.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.analysis.jitter.bertogna_fp_theory.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeIterationFP.
 
@@ -449,6 +448,7 @@ Module ResponseTimeIterationFP.
             k <= max_steps tsk ->
             f k > k + task_cost tsk - 1.
         Proof.
+          have INC := bertogna_fp_comp_f_increases.
           rename H_valid_task_parameters into TASK_PARAMS.
           unfold valid_sporadic_taskset, is_valid_sporadic_task in *; des.
           exploit (TASK_PARAMS tsk);
@@ -463,14 +463,12 @@ Module ResponseTimeIterationFP.
             intros LT.
             specialize (IHk (ltnW LT)).
             apply leq_ltn_trans with (n := f k);
-              last by apply bertogna_fp_comp_f_increases, ltnW.
+              last by apply INC, ltnW.
             rewrite -addn1 -addnA [1 + _]addnC addnA -addnBA // subnn addn0.
             rewrite -(ltn_add2r 1) in IHk.
-            rewrite subh1 in IHk; last first.
-            {
-              apply leq_trans with (n := task_cost tsk); last by apply leq_addl.
-              by apply PARAMS.
-            }
+            rewrite subh1 in IHk;
+              last by apply leq_trans with (n := task_cost tsk);
+                [by apply PARAMS | by apply leq_addl].
             by rewrite -addnBA // subnn addn0 addn1 ltnS in IHk.
           }  
         Qed.
@@ -481,6 +479,8 @@ Module ResponseTimeIterationFP.
       Lemma per_task_rta_converges:
         f (max_steps tsk) = f (max_steps tsk).+1.
       Proof.
+        have TOOMUCH := bertogna_fp_comp_rt_grows_too_much.
+        have INC := bertogna_fp_comp_f_increases.
         rename H_no_larger_than_deadline into LE,
                H_valid_task_parameters into TASK_PARAMS.
         unfold valid_sporadic_taskset, is_valid_sporadic_task in *; des.
@@ -498,18 +498,19 @@ Module ResponseTimeIterationFP.
         move: EX => /forall_inP EX.
         rewrite leqNgt in LE; move: LE => /negP LE.
         exfalso; apply LE.
-        have TOOMUCH := bertogna_fp_comp_rt_grows_too_much _ (max_steps tsk).
-        exploit TOOMUCH; [| by apply leqnn |].
+
+        assert (DIFF: forall k : nat, k <= max_steps tsk -> f k != f k.+1).
         {
           intros k LEk; rewrite -ltnS in LEk.
-          by exploit (EX (Ordinal LEk)); [by done | intro DIFF].
-        }
-        unfold max_steps at 1.
+          by exploit (EX (Ordinal LEk)); [by done | intro DIFF; apply DIFF].
+        }          
+        exploit TOOMUCH; [by apply DIFF | by apply leq_addr |].
         exploit (TASK_PARAMS tsk);
           [by rewrite mem_rcons in_cons eq_refl orTb | intro PARAMS; des].
-        rewrite -addnA [1 + _]addnC addnA -addnBA // subnn addn0.
         rewrite subh1; last by apply PARAMS2.
-        by rewrite -addnBA // subnn addn0.
+        rewrite -addnBA // subnn addn0 subn1 prednK //.
+        intros LT; apply (leq_ltn_trans LT).
+        by rewrite /max_steps [_ - _ + 1]addn1; apply INC, leq_addr.
       Qed.
       
     End Convergence.
@@ -665,7 +666,8 @@ Module ResponseTimeIterationFP.
               (job_task0 := job_task) (ts0 := ts) (hp_bounds0 := take idx hp_bounds)
               (job_jitter0 := job_jitter) (higher_eq_priority := higher_priority); try (by done).
         {
-          cut (NTH idx \in hp_bounds); [intros IN | by apply mem_nth].
+          cut (NTH idx \in hp_bounds = true);
+            [intros IN | by apply mem_nth].
           by rewrite -UNZIP; apply/mapP; exists (TASK idx, RESP idx); rewrite PAIR.
         }
         {
@@ -702,15 +704,15 @@ Module ResponseTimeIterationFP.
       Theorem taskset_schedulable_by_fp_rta :
         forall tsk, tsk \in ts -> no_deadline_missed_by_task tsk.
       Proof.
+        have RLIST := (fp_analysis_yields_response_time_bounds).
+        have UNZIP := (fp_claimed_bounds_unzip ts).
+        have DL := (fp_claimed_bounds_le_deadline ts).
         unfold no_deadline_missed_by_task, task_misses_no_deadline,
                job_misses_no_deadline, completed,
                fp_schedulable,
                valid_sporadic_job_with_jitter, valid_sporadic_job in *.
         rename H_valid_job_parameters into JOBPARAMS.
         move => tsk INtsk j JOBtsk.
-        have RLIST := (fp_analysis_yields_response_time_bounds).
-        have UNZIP := (fp_claimed_bounds_unzip ts).
-        have DL := (fp_claimed_bounds_le_deadline ts).
         destruct (fp_claimed_bounds ts) as [rt_bounds |]; last by ins.
         feed (UNZIP rt_bounds); first by done.
         assert (EX: exists R, (tsk, R) \in rt_bounds).
diff --git a/analysis/jitter/bertogna_fp_theory.v b/analysis/jitter/bertogna_fp_theory.v
index ac6124dc519f8f270bc1c77365ee93006c9c67b6..1f78d2a488f176aad2d8e6be18c1ed6f8e3a1666 100644
--- a/analysis/jitter/bertogna_fp_theory.v
+++ b/analysis/jitter/bertogna_fp_theory.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.task rt.model.jitter.job rt.model.jitter.task_arrival
                rt.model.jitter.schedule rt.model.jitter.platform rt.model.jitter.platform_fp
                rt.model.jitter.workload rt.model.jitter.schedulability rt.model.jitter.priority
                rt.model.jitter.response_time rt.model.jitter.interference.
 Require Import rt.analysis.jitter.workload_bound rt.analysis.jitter.interference_bound_fp.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeAnalysisFP.
 
@@ -168,7 +167,7 @@ Module ResponseTimeAnalysisFP.
             rename H_hp_bounds_has_interfering_tasks into UNZIP,
                    H_response_time_of_tsk_other into INbounds.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in ts_interf);
+            cut (tsk_other \in ts_interf = true);
               first by rewrite mem_filter; move => /andP [_ IN].
             unfold ts_interf; rewrite UNZIP.
             by apply/mapP; exists (tsk_other, R_other).
@@ -180,7 +179,7 @@ Module ResponseTimeAnalysisFP.
             rename H_hp_bounds_has_interfering_tasks into UNZIP,
                    H_response_time_of_tsk_other into INbounds.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in ts_interf);
+            cut (tsk_other \in ts_interf = true);
               first by rewrite mem_filter; move => /andP [INTERF _].
             unfold ts_interf; rewrite UNZIP.
             by apply/mapP; exists (tsk_other, R_other).
@@ -303,7 +302,7 @@ Module ResponseTimeAnalysisFP.
           {
             intros j_other tsk_other JOBother INTERF.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in unzip1 hp_bounds); last first.
+            cut (tsk_other \in unzip1 hp_bounds = true); last first.
             {
               rewrite -UNZIP mem_filter; apply/andP; split; first by done.
               by rewrite -JOBother; apply FROMTS.
@@ -394,6 +393,7 @@ Module ResponseTimeAnalysisFP.
         Lemma bertogna_fp_all_cpus_busy :
           \sum_(tsk_k <- ts_interf) x tsk_k = X * num_cpus.
         Proof.
+          have DIFFTASK := bertogna_fp_interference_by_different_tasks.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_valid_task_parameters into PARAMS,
                  H_job_of_tsk into JOBtsk, H_sporadic_tasks into SPO,
@@ -427,7 +427,7 @@ Module ResponseTimeAnalysisFP.
             rewrite -JOBtsk; apply FP with (t := t); try by done.
             by apply/existsP; exists cpu; apply/eqP.
           }
-          apply bertogna_fp_interference_by_different_tasks with (t := t); [by auto | by done |].
+          apply DIFFTASK with (t := t); [by auto | by done |].
           by apply/existsP; exists cpu; apply/eqP.
         Qed.
 
@@ -443,6 +443,7 @@ Module ResponseTimeAnalysisFP.
             0 < cardGE delta < num_cpus ->
             \sum_(i <- ts_interf | x i < delta) x i >= delta * (num_cpus - cardGE delta).
         Proof.
+          have INV := bertogna_fp_scheduling_invariant.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_valid_task_parameters into PARAMS,
                  H_valid_job_parameters into JOBPARAMS,
@@ -599,9 +600,8 @@ Module ResponseTimeAnalysisFP.
             eapply leq_trans with (n := count (predC (fun tsk => delta <= x tsk)) _);
               last by apply eq_leq, eq_in_count; red; ins; rewrite ltnNge.
             rewrite leq_subLR count_predC size_filter.
-            apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
-              first by rewrite bertogna_fp_scheduling_invariant.
-            by rewrite count_filter.
+            by apply leq_trans with (n := count (scheduled_task_other_than_tsk t) ts);
+              [by rewrite INV | by rewrite count_filter].            
           }
           {
             unfold x at 2, total_interference_B.
@@ -676,6 +676,9 @@ Module ResponseTimeAnalysisFP.
           total_interference_bound_fp task_cost task_period task_jitter tsk hp_bounds
                                       R higher_eq_priority.
         Proof.
+          have EXCEEDS := bertogna_fp_minimum_exceeds_interference.
+          have ALLBUSY := bertogna_fp_all_cpus_busy.
+          have TOOMUCH := bertogna_fp_too_much_interference.
           rename H_hp_bounds_has_interfering_tasks into UNZIP,
                  H_response_time_recurrence_holds into REC.
           apply leq_trans with (n := \sum_(tsk_k <- ts_interf) minn (x tsk_k) (R - task_cost tsk + 1));
@@ -695,11 +698,9 @@ Module ResponseTimeAnalysisFP.
           rewrite -addn1 -leq_subLR.
           rewrite -[R + 1 - _]subh1; last by rewrite REC; apply leq_addr.
           rewrite leq_divRL; last by apply H_at_least_one_cpu.
-          apply bertogna_fp_minimum_exceeds_interference.
-          apply leq_trans with (n := X * num_cpus);
-            last by rewrite bertogna_fp_all_cpus_busy.
-          rewrite leq_mul2r; apply/orP; right.
-          by apply bertogna_fp_too_much_interference.
+          apply EXCEEDS.
+          apply leq_trans with (n := X * num_cpus); last by rewrite ALLBUSY.
+          by rewrite leq_mul2r; apply/orP; right; apply TOOMUCH.
         Qed.
 
         (* 7) After concluding that the sum of the minimum exceeds (R' - e_i + 1),
@@ -711,6 +712,8 @@ Module ResponseTimeAnalysisFP.
             (minn (x tsk_k) (R - task_cost tsk + 1) >
               minn (workload_bound tsk_k R_k) (R - task_cost tsk + 1)).
         Proof.
+          have SUM := bertogna_fp_sum_exceeds_total_interference.
+          have INTERFk := bertogna_fp_tsk_other_interferes.
           rename H_hp_bounds_has_interfering_tasks into UNZIP.
           assert (HAS: has (fun tup : task_with_response_time =>
                              let (tsk_k, R_k) := tup in
@@ -720,7 +723,6 @@ Module ResponseTimeAnalysisFP.
           {
             apply/negP; unfold not; intro NOTHAS.
             move: NOTHAS => /negP /hasPn ALL.
-            have SUM := bertogna_fp_sum_exceeds_total_interference.
             rewrite -[_ < _]negbK in SUM.
             move: SUM => /negP SUM; apply SUM; rewrite -leqNgt.
             unfold total_interference_bound_fp.
@@ -729,7 +731,7 @@ Module ResponseTimeAnalysisFP.
             apply leq_sum; move => tsk_k /andP [HPk _]; destruct tsk_k as [tsk_k R_k].
             specialize (ALL (tsk_k, R_k) HPk).
             rewrite -leqNgt in ALL.
-            have INTERFk := bertogna_fp_tsk_other_interferes tsk_k R_k HPk.
+            specialize (INTERFk tsk_k R_k HPk).
             fold (can_interfere_with_tsk); rewrite INTERFk.
             by apply ALL.
           }
@@ -745,6 +747,8 @@ Module ResponseTimeAnalysisFP.
     Theorem bertogna_cirinei_response_time_bound_fp :
       response_time_bounded_by tsk (task_jitter tsk + R).
     Proof.
+      have EX := bertogna_fp_exists_task_that_exceeds_bound.
+      have WORKLOAD := bertogna_fp_workload_bounds_interference.
       rename H_valid_job_parameters into PARAMS.
       unfold valid_sporadic_job_with_jitter, valid_sporadic_job in *.
       intros j JOBtsk.
@@ -781,10 +785,10 @@ Module ResponseTimeAnalysisFP.
       apply negbT in NOTCOMP; exfalso.
 
       (* We derive a contradiction using the previous lemmas. *)
-      have EX := bertogna_fp_exists_task_that_exceeds_bound j JOBtsk NOTCOMP BEFOREok.
+      specialize (EX j JOBtsk NOTCOMP BEFOREok).
       destruct EX as [tsk_k [R_k [HPk LTmin]]].
       unfold minn at 1 in LTmin.
-      have WORKLOAD := bertogna_fp_workload_bounds_interference j tsk_k R_k HPk.
+      specialize (WORKLOAD j tsk_k R_k HPk).
       destruct (W_jitter task_cost task_period task_jitter tsk_k R_k R < R - task_cost tsk + 1);
         rewrite leq_min in LTmin; 
         last by move: LTmin => /andP [_ BUG]; rewrite ltnn in BUG.
diff --git a/analysis/jitter/interference_bound.v b/analysis/jitter/interference_bound.v
index 2e30af266e90a3a28a3fa407f6e5157aa3aa4c8d..41df7e005d041cffd16bcd3742acf153e3005d6a 100644
--- a/analysis/jitter/interference_bound.v
+++ b/analysis/jitter/interference_bound.v
@@ -1,9 +1,8 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.arrival_sequence rt.model.jitter.schedule
                rt.model.jitter.interference rt.model.jitter.priority.
 Require Import rt.analysis.jitter.workload_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module InterferenceBoundJitter.
 
diff --git a/analysis/jitter/interference_bound_edf.v b/analysis/jitter/interference_bound_edf.v
index 525ebeb7ea0b9a92a82885da1471f1664ec0ac28..124063581b81453cde8ae327821e3b29d4fa4dca 100644
--- a/analysis/jitter/interference_bound_edf.v
+++ b/analysis/jitter/interference_bound_edf.v
@@ -1,11 +1,10 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.job rt.model.jitter.task rt.model.jitter.task_arrival
                rt.model.jitter.schedule rt.model.jitter.platform rt.model.jitter.response_time
                rt.model.jitter.priority rt.model.jitter.workload rt.model.jitter.schedulability
                rt.model.jitter.interference rt.model.jitter.interference_edf.
 Require Import rt.analysis.jitter.workload_bound rt.analysis.jitter.interference_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module InterferenceBoundEDFJitter.
 
@@ -704,6 +703,8 @@ Module InterferenceBoundEDFJitter.
           Lemma interference_bound_edf_holds_for_a_single_job :
             interference_caused_by j_fst t1 t2 <= interference_bound.
           Proof.
+            have ONE := interference_bound_edf_simpl_when_there's_one_job.
+            have SLACK := interference_bound_edf_interference_of_j_fst_limited_by_slack.
             rename H_many_jobs into NUM, H_only_one_job into SIZE.
             unfold interference_caused_by, interference_bound, edf_specific_interference_bound.
             fold D_i D_k p_k n_k.
@@ -715,8 +716,7 @@ Module InterferenceBoundEDFJitter.
               rewrite interference_bound_edf_job_in_same_sequence.
               by apply mem_nth; rewrite SIZE.
             }
-            rewrite interference_bound_edf_simpl_when_there's_one_job.
-            by apply interference_bound_edf_interference_of_j_fst_limited_by_slack.
+            by rewrite ONE; apply SLACK.
           Qed.
 
         End InterferenceSingleJob.
@@ -886,7 +886,7 @@ Module InterferenceBoundEDFJitter.
                 by rewrite sort_uniq -/interfering_jobs filter_uniq // undup_uniq.
                 by rewrite INnth INnth0.  
             }
-            by rewrite subh3 // addnC -INnth.
+            by rewrite subh3 // addnC /p_k -INnth.
           Qed.
 
           (* Using the lemma above, we prove that the ratio n_k is at least the number of
@@ -894,14 +894,14 @@ Module InterferenceBoundEDFJitter.
           Lemma interference_bound_edf_n_k_covers_middle_jobs_plus_one :
             n_k >= num_mid_jobs.+1.
           Proof.
+            have AFTERt1 :=
+                interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval
+                interference_bound_edf_j_fst_completed_on_time.
             rename H_valid_task_parameters into TASK_PARAMS,
                    H_tsk_k_in_task_set into INk.
             unfold valid_sporadic_taskset, is_valid_sporadic_task,
                    interference_bound, edf_specific_interference_bound in *.
             have DIST := interference_bound_edf_many_periods_in_between.
-            have AFTERt1 :=
-                interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval
-                interference_bound_edf_j_fst_completed_on_time.
             rewrite leqNgt; apply/negP; unfold not; intro LTnk; unfold n_k in LTnk.
             rewrite ltn_divLR in LTnk; last by specialize (TASK_PARAMS tsk_k INk); des.
             apply (leq_trans LTnk) in DIST; rewrite ltn_subRL in DIST.
@@ -960,8 +960,8 @@ Module InterferenceBoundEDFJitter.
           Lemma interference_bound_edf_n_k_equals_num_mid_jobs_plus_one :
             n_k = num_mid_jobs.+1.
           Proof.
-            rename H_many_jobs into NUM, H_at_least_two_jobs into SIZE.
             have NK := interference_bound_edf_n_k_covers_middle_jobs_plus_one.
+            rename H_many_jobs into NUM, H_at_least_two_jobs into SIZE.
             move: NK; rewrite leq_eqVlt orbC; move => /orP NK; des;
              first by rewrite SIZE ltnS leqNgt NK in NUM.
             by rewrite NK. 
diff --git a/analysis/jitter/interference_bound_fp.v b/analysis/jitter/interference_bound_fp.v
index e24d658a33cc6774f892e169ec50e276e3cdfa18..b60d89c3d6651a5d73b827d6ce42ff9690fa8a21 100644
--- a/analysis/jitter/interference_bound_fp.v
+++ b/analysis/jitter/interference_bound_fp.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.schedule rt.model.jitter.priority rt.model.jitter.workload
                rt.model.jitter.interference.
 Require Import rt.analysis.jitter.workload_bound rt.analysis.jitter.interference_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module InterferenceBoundFP.
 
diff --git a/analysis/jitter/workload_bound.v b/analysis/jitter/workload_bound.v
index e6594b7f6586f09354a96629a635598da4180714..66bf9677b1cb382d3152e7e00c5f437cbd2b51e8 100644
--- a/analysis/jitter/workload_bound.v
+++ b/analysis/jitter/workload_bound.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.task rt.model.jitter.job rt.model.jitter.schedule
                rt.model.jitter.task_arrival rt.model.jitter.response_time
                rt.model.jitter.schedulability rt.model.jitter.workload.
-Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
 
 Module WorkloadBoundJitter.
   
@@ -659,12 +658,14 @@ Module WorkloadBoundJitter.
              service_during sched (nth elem sorted_jobs i.+1) t1 t2
           <= workload_bound.
         Proof.
+          have MID := workload_bound_service_of_middle_jobs. 
           rename H_jobs_have_valid_parameters into JOBPARAMS.
           unfold valid_sporadic_job_with_jitter in *; des.
           unfold workload_bound, W_jitter; fold n_k.
           move => NK; rewrite -NK.
           rewrite -{2}addn1 mulnDl mul1n [_* _ + _]addnC addnA addn_minl.
-          apply leq_add; last by apply workload_bound_service_of_middle_jobs. 
+          apply leq_add; last first.
+          apply MID.
           rewrite leq_min; apply/andP; split.
           {
             assert (SIZE: 0 < size sorted_jobs).
diff --git a/analysis/parallel/bertogna_edf_comp.v b/analysis/parallel/bertogna_edf_comp.v
index ffd6e4d5e757221ec30df5c9da9b99a69bc435d6..a0b40e4ecee8823be52b2558f08ff24a75e90bd7 100755
--- a/analysis/parallel/bertogna_edf_comp.v
+++ b/analysis/parallel/bertogna_edf_comp.v
@@ -1,7 +1,6 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.analysis.parallel.bertogna_edf_theory.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeIterationEDF.
 
@@ -239,7 +238,7 @@ Module ResponseTimeIterationEDF.
         Proof.
           intros l; unfold all_le; rewrite eq_refl andTb.
           destruct l; first by done.
-          by apply/(zipP (fun x y => snd x <= snd y)).
+          by apply/(zipP t (fun x y => snd x <= snd y)).
         Qed.
 
         (* ... and transitive. *)
@@ -248,8 +247,8 @@ Module ResponseTimeIterationEDF.
           unfold transitive, all_le.
           move => y x z /andP [/eqP ZIPxy LExy] /andP [/eqP ZIPyz LEyz].
           apply/andP; split; first by rewrite ZIPxy -ZIPyz.
-          move: LExy => /(zipP (fun x y => snd x <= snd y)) LExy.
-          move: LEyz => /(zipP (fun x y => snd x <= snd y)) LEyz.
+          move: LExy => /(zipP _ (fun x y => snd x <= snd y)) LExy.
+          move: LEyz => /(zipP _ (fun x y => snd x <= snd y)) LEyz.
           assert (SIZExy: size (unzip1 x) = size (unzip1 y)).
             by rewrite ZIPxy.
           assert (SIZEyz: size (unzip1 y) = size (unzip1 z)).
@@ -260,8 +259,8 @@ Module ResponseTimeIterationEDF.
             apply size0nil in SIZExy; symmetry in SIZEyz.
             by apply size0nil in SIZEyz; subst.
           }
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (t, 0) | by rewrite SIZExy -SIZEyz|]. 
+          apply/(zipP t (fun x y => snd x <= snd y));
+            first by rewrite SIZExy -SIZEyz. 
           intros i LTi.
           exploit LExy; first by rewrite SIZExy.
           {
@@ -295,8 +294,8 @@ Module ResponseTimeIterationEDF.
             by rewrite iterSr IHstep.
           }
 
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (tsk0,0)|by rewrite edf_claimed_bounds_size size_map |].
+          apply/(zipP (tsk0,0) (fun x y => snd x <= snd y));
+            first by rewrite edf_claimed_bounds_size size_map.
 
           intros i LTi; rewrite iterS; unfold edf_rta_iteration at 1.
           have MAP := @nth_map _ (tsk0,0) _ (tsk0,0).
@@ -350,10 +349,9 @@ Module ResponseTimeIterationEDF.
           apply f_equal with (B := nat) (f := fun x => size x) in UNZIP'.
           rename UNZIP' into SIZE.
           rewrite size_map [size (unzip1 _)]size_map in SIZE.
-          move: LE => /(zipP (fun x y => snd x <= snd y)) LE.
+          move: LE => /(zipP _ (fun x y => snd x <= snd y)) LE.
           destruct x1 as [| p0 x1'], x2 as [| p0' x2']; try (by ins).
-          apply/(zipP (fun x y => snd x <= snd y));
-            [by apply (p0,0) | by done |].
+          apply/(zipP p0 (fun x y => snd x <= snd y)); first by done.
 
           intros i LTi.
           exploit LE; first by rewrite 2!size_map in SIZE.
@@ -421,7 +419,7 @@ Module ResponseTimeIterationEDF.
           assert (GE_COST: all (fun p => task_cost (fst p) <= snd p) ((tsk0, R0) :: x1')). 
           {
             clear LE; move: LEinit => /andP [/eqP UNZIP' LE].
-            move: LE => /(zipP (fun x y => snd x <= snd y)) LE.
+            move: LE => /(zipP _ (fun x y => snd x <= snd y)) LE.
             specialize (LE (tsk0, R0)).
             apply/(all_nthP (tsk0,R0)).
             intros j LTj; generalize UNZIP'; simpl; intro SIZE'.
@@ -615,6 +613,8 @@ Module ResponseTimeIterationEDF.
             k <= max_steps ts ->
             \sum_((tsk, R) <- f k) (R - task_cost tsk) + 1 > k.
         Proof.
+          have LT := bertogna_edf_comp_f_increases.
+          have MONO := bertogna_edf_comp_iteration_monotonic.
           rename H_at_least_one_task into NONEMPTY.
           unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
           rename H_valid_task_parameters into VALID.
@@ -625,10 +625,7 @@ Module ResponseTimeIterationEDF.
             by exists tsk0.
           } destruct DUMMY as [elem _].
 
-          induction step.
-          {
-            by rewrite addn1.
-          }
+          induction step; first by rewrite addn1.
           {
             rewrite -addn1 ltn_add2r.
             apply leq_ltn_trans with (n := \sum_(i <- f step) (let '(tsk, R) := i in R - task_cost tsk)).
@@ -662,12 +659,11 @@ Module ResponseTimeIterationEDF.
             }
             rewrite -2!big_seq_cond.
            
-            have LT := bertogna_edf_comp_f_increases step (ltnW LE).
-            have MONO := bertogna_edf_comp_iteration_monotonic step.
-            
+            specialize (LT step (ltnW LE)).
+            specialize (MONO step).
             move: LT => /andP [_ LT]; move: LT => /hasP LT.
             destruct LT as [[x1 x2] INzip LT]; simpl in *.
-            move: MONO => /andP [_ /(zipP (fun x y => snd x <= snd y)) MONO].
+            move: MONO => /andP [_ /(zipP _ (fun x y => snd x <= snd y)) MONO].
             rewrite 2!(big_nth (elem, 0)).
             apply mem_zip_exists with (elem := (elem, 0)) (elem' := (elem, 0)) in INzip; des;
               last by rewrite size_map.
@@ -939,6 +935,9 @@ Module ResponseTimeIterationEDF.
       Theorem taskset_schedulable_by_edf_rta :
         forall tsk, tsk \in ts -> no_deadline_missed_by_task tsk.
       Proof.
+        have RLIST := (edf_analysis_yields_response_time_bounds).
+        have DL := (edf_claimed_bounds_le_deadline ts).
+        have HAS := (edf_claimed_bounds_has_R_for_every_task ts).
         unfold no_deadline_missed_by_task, task_misses_no_deadline,
                job_misses_no_deadline, completed,
                edf_schedulable,
@@ -952,10 +951,6 @@ Module ResponseTimeIterationEDF.
                H_test_succeeds into TEST.
         
         move => tsk INtsk j JOBtsk.
-        have RLIST := (edf_analysis_yields_response_time_bounds).
-        have DL := (edf_claimed_bounds_le_deadline ts).
-        have HAS := (edf_claimed_bounds_has_R_for_every_task ts).
-        
         destruct (edf_claimed_bounds ts) as [rt_bounds |] eqn:SOME; last by ins.
         exploit (HAS rt_bounds tsk); [by ins | by ins | clear HAS; intro HAS; des].
         have COMPLETED := RLIST tsk R HAS j JOBtsk.
diff --git a/analysis/parallel/bertogna_edf_theory.v b/analysis/parallel/bertogna_edf_theory.v
index e08261eff3bfd9d7a61ec94a099d899cc5078c26..8448eaf546f939352f1c84c1c972f12e63e2a21c 100644
--- a/analysis/parallel/bertogna_edf_theory.v
+++ b/analysis/parallel/bertogna_edf_theory.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.task_arrival
                rt.model.basic.schedule rt.model.basic.platform rt.model.basic.interference
                rt.model.basic.workload rt.model.basic.schedulability rt.model.basic.priority
                rt.model.basic.platform rt.model.basic.response_time.
 Require Import rt.analysis.parallel.workload_bound rt.analysis.parallel.interference_bound_edf.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeAnalysisEDF.
 
@@ -340,9 +339,11 @@ apply scheduled_implies_pending with (job_cost0 := job_cost) in PENDING; try (by
         \sum_((tsk_other, R_other) <- rt_bounds | jldp_can_interfere_with tsk tsk_other)
           x tsk_other > I tsk R.
       Proof.
+        have GE_COST := bertogna_edf_R_other_ge_cost.
+        have ALLBUSY := bertogna_edf_all_cpus_busy.
+        have TOOMUCH := bertogna_edf_too_much_interference.
         rename H_rt_bounds_contains_all_tasks into UNZIP,
                H_response_time_is_fixed_point into REC.
-        have GE_COST := bertogna_edf_R_other_ge_cost.
         apply leq_trans with (n := \sum_(tsk_other <- ts_interf) x tsk_other);
           last first.
         {
@@ -368,9 +369,8 @@ apply scheduled_implies_pending with (job_cost0 := job_cost) in PENDING; try (by
         rewrite -addn1 -leq_subLR.
         rewrite -[R + 1 - _]subh1; last by apply GE_COST.
         rewrite leq_divRL; last by apply H_at_least_one_cpu.
-        rewrite bertogna_edf_all_cpus_busy.
-        rewrite leq_mul2r; apply/orP; right.
-        by apply bertogna_edf_too_much_interference.
+        rewrite ALLBUSY.
+        by rewrite leq_mul2r; apply/orP; right; apply TOOMUCH.
       Qed.
 
       (* 3) After concluding that the sum of the minimum exceeds (R - e_i + 1),
@@ -381,6 +381,9 @@ apply scheduled_implies_pending with (job_cost0 := job_cost) in PENDING; try (by
           (tsk_other, R_other) \in rt_bounds /\
           x tsk_other > interference_bound tsk_other R_other.
       Proof.
+        have SUM := bertogna_edf_sum_exceeds_total_interference.
+        have BOUND := bertogna_edf_workload_bounds_interference.
+        have EDFBOUND := bertogna_edf_specific_bound_holds.
         rename H_rt_bounds_contains_all_tasks into UNZIP.
         assert (HAS: has (fun tup : task_with_response_time =>
                        let (tsk_other, R_other) := tup in
@@ -390,7 +393,6 @@ apply scheduled_implies_pending with (job_cost0 := job_cost) in PENDING; try (by
         {
           apply/negP; unfold not; intro NOTHAS.
           move: NOTHAS => /negP /hasPn ALL.
-          have SUM := bertogna_edf_sum_exceeds_total_interference.
           rewrite -[_ < _]negbK in SUM.
           move: SUM => /negP SUM; apply SUM; rewrite -leqNgt.
           unfold I, total_interference_bound_edf.
@@ -398,13 +400,8 @@ apply scheduled_implies_pending with (job_cost0 := job_cost) in PENDING; try (by
           apply leq_sum; move => tsk_k /andP [INBOUNDSk INTERFk]; destruct tsk_k as [tsk_k R_k].
           specialize (ALL (tsk_k, R_k) INBOUNDSk).
           unfold interference_bound_edf; simpl in *.
-          rewrite leq_min; apply/andP; split.
-          {
-            by apply bertogna_edf_workload_bounds_interference.
-          }
-          {
-            by apply bertogna_edf_specific_bound_holds.
-          }
+          by rewrite leq_min; apply/andP; split;
+            [by apply BOUND | by apply EDFBOUND].
         }
         move: HAS => /hasP HAS; destruct HAS as [[tsk_k R_k] HPk MIN].
         move: MIN => /andP [/andP [INts INTERFk] MINk].
diff --git a/analysis/parallel/bertogna_fp_comp.v b/analysis/parallel/bertogna_fp_comp.v
index 572d56f90af8c69a77b6feedc3f609550936c651..58beffe3dfbbd92ffbdc246df921df30255d25a6 100644
--- a/analysis/parallel/bertogna_fp_comp.v
+++ b/analysis/parallel/bertogna_fp_comp.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.analysis.parallel.bertogna_fp_theory.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeIterationFP.
 
@@ -437,6 +436,7 @@ Module ResponseTimeIterationFP.
             k <= max_steps tsk ->
             f k > k + task_cost tsk - 1.
         Proof.
+          have INC := bertogna_fp_comp_f_increases.
           rename H_valid_task_parameters into TASK_PARAMS.
           unfold valid_sporadic_taskset, is_valid_sporadic_task in *; des.
           exploit (TASK_PARAMS tsk);
@@ -450,15 +450,12 @@ Module ResponseTimeIterationFP.
           {
             intros LT.
             specialize (IHk (ltnW LT)).
-            apply leq_ltn_trans with (n := f k);
-              last by apply bertogna_fp_comp_f_increases, ltnW.
+            apply leq_ltn_trans with (n := f k); last by apply INC, ltnW.
             rewrite -addn1 -addnA [1 + _]addnC addnA -addnBA // subnn addn0.
             rewrite -(ltn_add2r 1) in IHk.
-            rewrite subh1 in IHk; last first.
-            {
-              apply leq_trans with (n := task_cost tsk); last by apply leq_addl.
-              by apply PARAMS.
-            }
+            rewrite subh1 in IHk;
+              last by apply leq_trans with (n := task_cost tsk);
+                [by apply PARAMS | by apply leq_addl].
             by rewrite -addnBA // subnn addn0 addn1 ltnS in IHk.
           }  
         Qed.
@@ -469,6 +466,8 @@ Module ResponseTimeIterationFP.
       Lemma per_task_rta_converges:
         f (max_steps tsk) = f (max_steps tsk).+1.
       Proof.
+        have TOOMUCH := bertogna_fp_comp_rt_grows_too_much.
+        have INC := bertogna_fp_comp_f_increases.
         rename H_no_larger_than_deadline into LE,
                H_valid_task_parameters into TASK_PARAMS.
         unfold valid_sporadic_taskset, is_valid_sporadic_task in *; des.
@@ -486,18 +485,19 @@ Module ResponseTimeIterationFP.
         move: EX => /forall_inP EX.
         rewrite leqNgt in LE; move: LE => /negP LE.
         exfalso; apply LE.
-        have TOOMUCH := bertogna_fp_comp_rt_grows_too_much _ (max_steps tsk).
-        exploit TOOMUCH; [| by apply leqnn |].
+
+        assert (DIFF: forall k : nat, k <= max_steps tsk -> f k != f k.+1).
         {
           intros k LEk; rewrite -ltnS in LEk.
-          by exploit (EX (Ordinal LEk)); [by done | intro DIFF].
-        }
-        unfold max_steps at 1.
+          by exploit (EX (Ordinal LEk)); [by done | intro DIFF; apply DIFF].
+        }          
+        exploit TOOMUCH; [by apply DIFF | by apply leq_addr |].
         exploit (TASK_PARAMS tsk);
           [by rewrite mem_rcons in_cons eq_refl orTb | intro PARAMS; des].
-        rewrite -addnA [1 + _]addnC addnA -addnBA // subnn addn0.
         rewrite subh1; last by apply PARAMS2.
-        by rewrite -addnBA // subnn addn0.
+        rewrite -addnBA // subnn addn0 subn1 prednK //.
+        intros LT; apply (leq_ltn_trans LT).
+        by rewrite /max_steps [_ - _ + 1]addn1; apply INC, leq_addr.
       Qed.
       
     End Convergence.
@@ -648,7 +648,8 @@ Module ResponseTimeIterationFP.
               (job_task0 := job_task) (ts0 := ts) (hp_bounds0 := take idx hp_bounds)
               (higher_eq_priority := higher_priority); try (by done).
         {
-          cut (NTH idx \in hp_bounds); [intros IN | by apply mem_nth].
+          cut (NTH idx \in hp_bounds = true);
+            [intros IN | by apply mem_nth].
           by rewrite -UNZIP; apply/mapP; exists (TASK idx, RESP idx); rewrite PAIR.
         }
         {
@@ -671,15 +672,15 @@ Module ResponseTimeIterationFP.
       Theorem taskset_schedulable_by_fp_rta :
         forall tsk, tsk \in ts -> no_deadline_missed_by_task tsk.
       Proof.
+        have RLIST := (fp_analysis_yields_response_time_bounds).
+        have UNZIP := (fp_claimed_bounds_unzip ts).
+        have DL := (fp_claimed_bounds_le_deadline ts).
         unfold no_deadline_missed_by_task, task_misses_no_deadline,
                job_misses_no_deadline, completed,
                fp_schedulable, valid_sporadic_job in *.
         rename H_valid_job_parameters into JOBPARAMS.
         move => tsk INtsk j JOBtsk.
-        have RLIST := (fp_analysis_yields_response_time_bounds).
-        have UNZIP := (fp_claimed_bounds_unzip ts).
-        have DL := (fp_claimed_bounds_le_deadline ts).
-
+        
         destruct (fp_claimed_bounds ts) as [rt_bounds |]; last by ins.
         feed (UNZIP rt_bounds); first by done.
         assert (EX: exists R, (tsk, R) \in rt_bounds).
diff --git a/analysis/parallel/bertogna_fp_theory.v b/analysis/parallel/bertogna_fp_theory.v
index a990c5ff6a0bf00224da838978d09826f35725e3..243cb9b33168511d13ef067c1cfe90ff06a2ffe9 100644
--- a/analysis/parallel/bertogna_fp_theory.v
+++ b/analysis/parallel/bertogna_fp_theory.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.task_arrival
                rt.model.basic.schedule rt.model.basic.platform rt.model.basic.platform_fp
                rt.model.basic.workload rt.model.basic.schedulability rt.model.basic.priority
                rt.model.basic.response_time rt.model.basic.interference.
 Require Import rt.analysis.parallel.workload_bound rt.analysis.parallel.interference_bound_fp.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module ResponseTimeAnalysisFP.
 
@@ -149,7 +148,7 @@ Module ResponseTimeAnalysisFP.
             rename H_hp_bounds_has_interfering_tasks into UNZIP,
                    H_response_time_of_tsk_other into INbounds.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in ts_interf);
+            cut (tsk_other \in ts_interf = true);
               first by rewrite mem_filter; move => /andP [_ IN].
             unfold ts_interf; rewrite UNZIP.
             by apply/mapP; exists (tsk_other, R_other).
@@ -161,7 +160,7 @@ Module ResponseTimeAnalysisFP.
             rename H_hp_bounds_has_interfering_tasks into UNZIP,
                    H_response_time_of_tsk_other into INbounds.
             move: UNZIP => UNZIP.
-            cut (tsk_other \in ts_interf);
+            cut (tsk_other \in ts_interf = true);
               first by rewrite mem_filter; move => /andP [INTERF _].
             unfold ts_interf; rewrite UNZIP.
             by apply/mapP; exists (tsk_other, R_other).
@@ -337,6 +336,7 @@ Module ResponseTimeAnalysisFP.
            x tsk_k > total_interference_bound_fp task_cost task_period tsk
                                             hp_bounds R higher_eq_priority.
         Proof.
+          have TOOMUCH := bertogna_fp_too_much_interference.
           rename H_hp_bounds_has_interfering_tasks into UNZIP,
                  H_response_time_recurrence_holds into REC.
           apply leq_trans with (n := \sum_(tsk_k <- ts_interf) x tsk_k);
@@ -355,8 +355,7 @@ Module ResponseTimeAnalysisFP.
           rewrite -[R + 1 - _]subh1; last by rewrite REC; apply leq_addr.
           rewrite leq_divRL; last by apply H_at_least_one_cpu.
           rewrite bertogna_fp_all_cpus_busy.
-          rewrite leq_mul2r; apply/orP; right.
-          by apply bertogna_fp_too_much_interference.
+          by rewrite leq_mul2r; apply/orP; right; apply TOOMUCH.
         Qed.
 
         (* 3) After concluding that the sum of the minimum exceeds (R - e_i + 1),
@@ -366,6 +365,8 @@ Module ResponseTimeAnalysisFP.
             (tsk_k, R_k) \in hp_bounds /\
             x tsk_k > workload_bound tsk_k R_k.
         Proof.
+          have INTERFk := bertogna_fp_tsk_other_interferes.
+          have SUM := bertogna_fp_sum_exceeds_total_interference.
           rename H_hp_bounds_has_interfering_tasks into UNZIP.
           assert (HAS: has (fun tup : task_with_response_time =>
                              let (tsk_k, R_k) := tup in
@@ -374,7 +375,6 @@ Module ResponseTimeAnalysisFP.
           {
             apply/negP; unfold not; intro NOTHAS.
             move: NOTHAS => /negP /hasPn ALL.
-            have SUM := bertogna_fp_sum_exceeds_total_interference.
             rewrite -[_ < _]negbK in SUM.
             move: SUM => /negP SUM; apply SUM; rewrite -leqNgt.
             unfold total_interference_bound_fp.
@@ -383,7 +383,7 @@ Module ResponseTimeAnalysisFP.
             apply leq_sum; move => tsk_k /andP [HPk _]; destruct tsk_k as [tsk_k R_k].
             specialize (ALL (tsk_k, R_k) HPk).
             rewrite -leqNgt in ALL.
-            have INTERFk := bertogna_fp_tsk_other_interferes tsk_k R_k HPk.
+            specialize (INTERFk tsk_k R_k HPk).
             fold (can_interfere_with_tsk); rewrite INTERFk.
             unfold interference_bound_generic. by apply ALL.
           }
@@ -399,6 +399,8 @@ Module ResponseTimeAnalysisFP.
     Theorem bertogna_cirinei_response_time_bound_fp :
       response_time_bounded_by tsk R.
     Proof.
+      have EX := bertogna_fp_exists_task_that_exceeds_bound.
+      have BOUND := bertogna_fp_workload_bounds_interference.
       rename H_response_time_recurrence_holds into REC,
              H_response_time_of_interfering_tasks_is_known into RESP,
              H_hp_bounds_has_interfering_tasks into UNZIP,
@@ -433,10 +435,10 @@ Module ResponseTimeAnalysisFP.
       apply negbT in NOTCOMP; exfalso.
 
       (* We derive a contradiction using the previous lemmas. *)
-      have EX := bertogna_fp_exists_task_that_exceeds_bound j JOBtsk NOTCOMP BEFOREok.
+      specialize (EX j JOBtsk NOTCOMP BEFOREok).
       destruct EX as [tsk_k [R_k [HPk LTmin]]].
-      have BUG := bertogna_fp_workload_bounds_interference j tsk_k R_k HPk.
-      by apply (leq_ltn_trans BUG) in LTmin; rewrite ltnn in LTmin.
+      specialize (BOUND j tsk_k R_k HPk).
+      by apply (leq_ltn_trans BOUND) in LTmin; rewrite ltnn in LTmin.
     Qed.
 
   End ResponseTimeBound.
diff --git a/analysis/parallel/interference_bound.v b/analysis/parallel/interference_bound.v
index 1d4e69309e5b0bbc9da768d3c0c900123434e71c..63fed92913d98b4ac6e3698adff0d1c61510feeb 100644
--- a/analysis/parallel/interference_bound.v
+++ b/analysis/parallel/interference_bound.v
@@ -1,8 +1,7 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.schedule.
 Require Import rt.analysis.parallel.workload_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module InterferenceBoundGeneric.
 
diff --git a/analysis/parallel/interference_bound_edf.v b/analysis/parallel/interference_bound_edf.v
index b7721cf74ff4aaa2dbda4011d03f418366c776ae..a06f5532dcb1a53c0bb5badbda1b264da8b81820 100644
--- a/analysis/parallel/interference_bound_edf.v
+++ b/analysis/parallel/interference_bound_edf.v
@@ -1,11 +1,10 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.task_arrival rt.model.basic.platform rt.model.basic.response_time
                rt.model.basic.workload rt.model.basic.priority rt.model.basic.schedulability
                rt.model.basic.interference rt.model.basic.interference_edf.
 Require Import rt.analysis.parallel.workload_bound rt.analysis.parallel.interference_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div path.
 
 Module InterferenceBoundEDF.
 
@@ -620,7 +619,7 @@ Module InterferenceBoundEDF.
                 by rewrite sort_uniq -/interfering_jobs filter_uniq // undup_uniq.
                 by rewrite INnth INnth0.  
             }
-            by rewrite subh3 // addnC -INnth.
+            by rewrite subh3 // addnC /p_k -INnth.
           Qed.
 
           Lemma interference_bound_edf_slack_le_delta:
@@ -648,13 +647,14 @@ Module InterferenceBoundEDF.
           Lemma interference_bound_edf_n_k_covers_all_jobs :
             n_k >= num_mid_jobs.+2.
           Proof.
+            have AFTERt1 :=
+                interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval
+                interference_bound_edf_j_fst_completed_on_time.
+            have SLACK := interference_bound_edf_slack_le_delta.
             rename H_valid_task_parameters into TASK_PARAMS,
                    H_tsk_k_in_task_set into INk.
             unfold valid_sporadic_taskset, is_valid_sporadic_task,
                    interference_bound, edf_specific_interference_bound in *.
-            have AFTERt1 :=
-                interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval
-                interference_bound_edf_j_fst_completed_on_time.
             have DIST := interference_bound_edf_many_periods_in_between.
             rewrite leqNgt; apply/negP; unfold not; rewrite ltnS;  intro LTnk.
             assert (BUG: a_lst - a_fst > D_i + R_k - D_k).
@@ -668,7 +668,6 @@ Module InterferenceBoundEDF.
                 - by rewrite dvdn_eq in DIV; move: DIV => /eqP DIV; rewrite DIV addn1.
                 - by rewrite -addn1; apply ltnW, ltn_ceil.      
             }
-            have SLACK := interference_bound_edf_slack_le_delta.
             rewrite leq_subLR in SLACK.
             rewrite -(leq_add2r a_fst) subh1 in BUG;
               last by apply interference_bound_edf_j_fst_before_j_lst.
diff --git a/analysis/parallel/interference_bound_fp.v b/analysis/parallel/interference_bound_fp.v
index 905e7e59fba70760548cb85fd723e933fe577e67..49ed78f3decee2a4f91708322b586af34c0b854f 100644
--- a/analysis/parallel/interference_bound_fp.v
+++ b/analysis/parallel/interference_bound_fp.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.schedule rt.model.basic.priority rt.model.basic.workload
                rt.model.basic.interference.
 Require Import rt.analysis.parallel.workload_bound rt.analysis.parallel.interference_bound.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module InterferenceBoundFP.
 
diff --git a/analysis/parallel/workload_bound.v b/analysis/parallel/workload_bound.v
index 008ef46ff5eb8bd9b19a59c9765f0155cf373888..6cae44aec99594d0e10902b2cf81a1892b311f03 100644
--- a/analysis/parallel/workload_bound.v
+++ b/analysis/parallel/workload_bound.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.task_arrival rt.model.basic.response_time
                rt.model.basic.workload rt.model.basic.schedulability.
-Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
 
 Module WorkloadBound.
   
diff --git a/create_makefile.sh b/create_makefile.sh
index a8cd7b5e76077e3def8f2ad6b929ab724dacb54f..25f27433e4f9f189d09e77cab48150eef6ee1ca8 100755
--- a/create_makefile.sh
+++ b/create_makefile.sh
@@ -1,6 +1,6 @@
 # Compile all *.v files (except the ones that define the decidable equality). Those
 # are directly included in other files.
-coq_makefile -R . rt $(find -name "*.v" ! -name "*#*" ! -name "*eqdec*.v" -print) -o Makefile
+coq_makefile -f _CoqProject $(find -name "*.v" ! -name "*#*" ! -name "*eqdec*.v" -print) -o Makefile
 
 # Fix the 'make validate' command. It doesn't handle the library prefix properly
 # and cause clashes for files with the same name. This forces full filenames and
diff --git a/implementation/basic/arrival_sequence.v b/implementation/basic/arrival_sequence.v
index c0143d317172063ff6ecd81f6b5e3386402bccf5..96089dc1546e8460cd92de5ebd0e643b98c7ec1c 100644
--- a/implementation/basic/arrival_sequence.v
+++ b/implementation/basic/arrival_sequence.v
@@ -1,9 +1,8 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.arrival_sequence rt.model.basic.job
                rt.model.basic.task rt.model.basic.task_arrival.
 Require Import rt.implementation.basic.task rt.implementation.basic.job.
-Require Import ssreflect ssrbool ssrfun ssrnat eqtype seq div.
+From mathcomp Require Import ssreflect ssrbool ssrfun ssrnat eqtype seq div.
 
 Module ConcreteArrivalSequence.
 
diff --git a/implementation/basic/bertogna_edf_example.v b/implementation/basic/bertogna_edf_example.v
index 3d9af57d2d91ea1d092fc97e4e8e9d55f9960ee0..661197da575fd0778e82987f936aa91761d16bac 100644
--- a/implementation/basic/bertogna_edf_example.v
+++ b/implementation/basic/bertogna_edf_example.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.job rt.model.basic.task
                rt.model.basic.schedule rt.model.basic.schedulability
@@ -10,7 +9,7 @@ Require Import rt.implementation.basic.job
                rt.implementation.basic.task
                rt.implementation.basic.schedule
                rt.implementation.basic.arrival_sequence.
-Require Import ssreflect ssrbool ssrnat eqtype seq bigop div.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype seq bigop div.
 
 Module ResponseTimeAnalysisEDF.
 
diff --git a/implementation/basic/job.v b/implementation/basic/job.v
index 0d0bf8128538720613ef6e211e51ffb64204bb74..db1a3c372939e72e20b185dc6382b143d96f3e4e 100644
--- a/implementation/basic/job.v
+++ b/implementation/basic/job.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.model.basic.time rt.util.all.
 Require Import rt.implementation.basic.task.
-Require Import ssreflect ssrbool ssrnat eqtype seq.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype seq.
 
 Module ConcreteJob.
 
diff --git a/implementation/basic/schedule.v b/implementation/basic/schedule.v
index c8c28fb75f49c31568595fd624de887f492fa2ef..c4ba99cc8467fe63b174ce1a5cb21710dbf71415 100644
--- a/implementation/basic/schedule.v
+++ b/implementation/basic/schedule.v
@@ -1,8 +1,7 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.job rt.model.basic.arrival_sequence rt.model.basic.schedule
                rt.model.basic.platform rt.model.basic.priority.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat fintype bigop seq path.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat fintype bigop seq path.
 
 Module ConcreteScheduler.
 
diff --git a/implementation/basic/task.v b/implementation/basic/task.v
index 4025b88383f2253c17a3fdb450066f87226e26aa..fe158837bc9def7383f85be212782bbc596ea5f9 100644
--- a/implementation/basic/task.v
+++ b/implementation/basic/task.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.model.basic.time rt.util.all.
 Require Import rt.model.basic.task.
-Require Import ssreflect ssrbool ssrnat eqtype seq.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype seq.
 
 Module ConcreteTask.
 
diff --git a/implementation/jitter/arrival_sequence.v b/implementation/jitter/arrival_sequence.v
index b1382aa4a3832004358787bf2e47ced543856cd6..4a66266ea2b77ddf4a2239e775cacb0357091761 100644
--- a/implementation/jitter/arrival_sequence.v
+++ b/implementation/jitter/arrival_sequence.v
@@ -1,9 +1,8 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.arrival_sequence rt.model.jitter.job
                rt.model.jitter.task rt.model.jitter.task_arrival.
 Require Import rt.implementation.jitter.task rt.implementation.jitter.job.
-Require Import ssreflect ssrbool ssrfun ssrnat eqtype seq div.
+From mathcomp Require Import ssreflect ssrbool ssrfun ssrnat eqtype seq div.
 
 Module ConcreteArrivalSequence.
 
diff --git a/implementation/jitter/bertogna_edf_example.v b/implementation/jitter/bertogna_edf_example.v
index 98746e9459e48893f8c3674a0321a235571fe4de..6cfdd6ac69d61c8a4135037adcf1ab2aa7dc8b14 100644
--- a/implementation/jitter/bertogna_edf_example.v
+++ b/implementation/jitter/bertogna_edf_example.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.job rt.model.jitter.task
                rt.model.jitter.schedule rt.model.jitter.schedulability
@@ -10,7 +9,7 @@ Require Import rt.implementation.jitter.job
                rt.implementation.jitter.task
                rt.implementation.jitter.schedule
                rt.implementation.jitter.arrival_sequence.
-Require Import ssreflect ssrbool ssrnat eqtype seq bigop div.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype seq bigop div.
 
 Module ResponseTimeAnalysisEDF.
 
diff --git a/implementation/jitter/job.v b/implementation/jitter/job.v
index d320385624e29efc0c8927caa86576e5c518b4b8..3eb0633ca68f781c5cd1404fedaa830410dd1783 100644
--- a/implementation/jitter/job.v
+++ b/implementation/jitter/job.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.implementation.jitter.task.
-Require Import ssreflect ssrbool ssrnat eqtype seq.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype seq.
 
 Module ConcreteJob.
 
diff --git a/implementation/jitter/schedule.v b/implementation/jitter/schedule.v
index cc099f56eddaa948ca21546e06abf7f9590d2324..d4fc05aa6b11a9d22f76aa0edcd485ed6265cbbc 100644
--- a/implementation/jitter/schedule.v
+++ b/implementation/jitter/schedule.v
@@ -1,8 +1,7 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.job rt.model.jitter.arrival_sequence rt.model.jitter.schedule
                rt.model.jitter.platform rt.model.jitter.priority.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat fintype bigop seq path.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat fintype bigop seq path.
 
 Module ConcreteScheduler.
 
diff --git a/implementation/jitter/task.v b/implementation/jitter/task.v
index d09078a25344273cd228aef9965f8cb341e05546..4e0238f398222124292718ef810c58c88b52cc74 100644
--- a/implementation/jitter/task.v
+++ b/implementation/jitter/task.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.task.
-Require Import ssreflect ssrbool ssrnat eqtype seq.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype seq.
 
 Module ConcreteTask.
 
diff --git a/model/basic/arrival_sequence.v b/model/basic/arrival_sequence.v
index 660c5e9113a928152e5a73f08d4bd4bcc0f5686d..d84e7664dec68a015deeaf3a8d55ecc82fa63e43 100644
--- a/model/basic/arrival_sequence.v
+++ b/model/basic/arrival_sequence.v
@@ -1,6 +1,5 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all rt.model.basic.job rt.model.basic.task rt.model.basic.time.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 (* Definitions and properties of job arrival sequences. *)
 Module ArrivalSequence.
diff --git a/model/basic/interference.v b/model/basic/interference.v
index 496342b6305ab1e44fe7ab16b68d4372bcc249f4..9cf6985e57ad2de5d835d72b9ce3e130f3f7def3 100644
--- a/model/basic/interference.v
+++ b/model/basic/interference.v
@@ -1,8 +1,7 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.priority rt.model.basic.workload.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module Interference.
 
@@ -120,7 +119,6 @@ Module Interference.
         by rewrite big_const_nat iter_addn mul1n addn0 leqnn.
       Qed.
 
-
       Lemma job_interference_le_service :
         forall j_other t1 t2,
           job_interference j_other t1 t2 <= service_during sched j_other t1 t2.
@@ -187,7 +185,8 @@ Module Interference.
 
     (* The sequential per-job interference bounds the actual interference. *)    
     Section BoundUsingPerJobInterference.
-    Lemma interference_le_interference_joblist :
+      
+      Lemma interference_le_interference_joblist :
         forall tsk t1 t2,
           task_interference tsk t1 t2 <= task_interference_joblist tsk t1 t2.
       Proof.
diff --git a/model/basic/interference_edf.v b/model/basic/interference_edf.v
index fa427fa278ccf31149c11cfd7173e9136f0cd2ea..1058ed3ed750be87988a614fc2ee721c1f62409f 100644
--- a/model/basic/interference_edf.v
+++ b/model/basic/interference_edf.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.priority rt.model.basic.task_arrival rt.model.basic.interference
                rt.model.basic.arrival_sequence rt.model.basic.platform.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 Module InterferenceEDF.
 
diff --git a/model/basic/job.v b/model/basic/job.v
index e65f567224c2adf0f9fb964f78dc09aa31055441..f2fa9885261e5dfc4bdf46b1f260150f90273a52 100644
--- a/model/basic/job.v
+++ b/model/basic/job.v
@@ -1,6 +1,5 @@
-Add LoadPath "../../" as rt.
 Require Import rt.model.basic.time rt.model.basic.task.
-Require Import ssrnat ssrbool eqtype.  
+From mathcomp Require Import ssrnat ssrbool eqtype.  
 
 (* Properties of different types of job: *)
 Module Job.
diff --git a/model/basic/platform.v b/model/basic/platform.v
index b95db94caa3d96be28fe72be68de1de58d9501f3..f89ff7697319f22f16b75e399f151216fb51334d 100644
--- a/model/basic/platform.v
+++ b/model/basic/platform.v
@@ -1,8 +1,7 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.priority rt.model.basic.task_arrival rt.model.basic.interference.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 Module Platform.
 
@@ -149,7 +148,7 @@ Module Platform.
                 rewrite -addn1 addnC [_ + 1]addnC -addnA.
                 apply leq_add; first by done.
                 rewrite eq_fun_ord_to_nat; unfold make_sequence at 2; rewrite EX /= add0n. 
-                apply leq_add; apply leq_sum; ins; unfold fun_ord_to_nat; des_eqrefl2; try done;
+                apply leq_add; apply leq_sum; ins; unfold fun_ord_to_nat; des_eqrefl; try done;
                 by unfold make_sequence; desf.
               }
             }
@@ -247,6 +246,7 @@ Module Platform.
         Lemma platform_cpus_busy_with_interfering_tasks :      
           count (scheduled_task_other_than tsk) ts = num_cpus.
         Proof.
+          have UNIQ := platform_at_most_one_pending_job_of_each_task.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_sequential_jobs into SEQUENTIAL,
                  H_work_conserving into WORK,
@@ -265,7 +265,6 @@ Module Platform.
                  sporadic_task_model, is_valid_sporadic_task,
                  jobs_of_same_task_dont_execute_in_parallel,
                  sequential_jobs in *.  
-          have UNIQ := platform_at_most_one_pending_job_of_each_task.
           apply/eqP; rewrite eqn_leq; apply/andP; split.
           {
             apply leq_trans with (n := count (fun x => task_is_scheduled job_task sched x t) ts);
diff --git a/model/basic/platform_fp.v b/model/basic/platform_fp.v
index 4b434d6cf5402e0c33c096a863a23bf58ca8fa11..6befe703964baad39a7873e65c7fd76589d6a6df 100644
--- a/model/basic/platform_fp.v
+++ b/model/basic/platform_fp.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule
                rt.model.basic.task_arrival rt.model.basic.interference
                rt.model.basic.priority rt.model.basic.platform.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 Module PlatformFP.
 
@@ -175,6 +174,8 @@ Module PlatformFP.
       Lemma platform_fp_cpus_busy_with_interfering_tasks :      
         count (scheduled_task_with_higher_eq_priority tsk) ts = num_cpus.
       Proof.
+        have UNIQ := platform_fp_no_multiple_jobs_of_interfering_tasks.
+        have UNIQ' := platform_fp_no_multiple_jobs_of_tsk. 
         rename H_all_jobs_from_taskset into FROMTS,
                H_sequential_jobs into SEQUENTIAL,
                H_work_conserving into WORK,
@@ -196,8 +197,6 @@ Module PlatformFP.
                jobs_of_same_task_dont_execute_in_parallel,
                sequential_jobs,
                can_interfere_with_tsk in *.
-        have UNIQ := platform_fp_no_multiple_jobs_of_interfering_tasks.
-        have UNIQ' := platform_fp_no_multiple_jobs_of_tsk. 
         apply/eqP; rewrite eqn_leq; apply/andP; split.
         {
           apply leq_trans with (n := count (fun x => task_is_scheduled job_task sched x t) ts);
diff --git a/model/basic/priority.v b/model/basic/priority.v
index 8ea503b28b4434d9e6f4cd024bba2e61dda2f2dd..b96753c05474719c6d5b4354753c4c827ee9bda6 100644
--- a/model/basic/priority.v
+++ b/model/basic/priority.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule.
-Require Import ssreflect ssrbool eqtype ssrnat seq.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq.
 Set Implicit Arguments.
 
 (* Definitions of FP and JLFP/JLDP priority relations. *)
diff --git a/model/basic/response_time.v b/model/basic/response_time.v
index 5949f5f9042b835d2511f35a3446d033ab443532..68fd3a16d5ea435730189bc56b354e8278da1b02 100644
--- a/model/basic/response_time.v
+++ b/model/basic/response_time.v
@@ -1,8 +1,7 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.task_arrival
                rt.model.basic.schedule.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Definition of response-time bound and some simple lemmas. *)
 Module ResponseTime.
diff --git a/model/basic/schedulability.v b/model/basic/schedulability.v
index fd80738e96d68721d7b7969181a80c7439597a6f..88bdb99d3b43854356a6c419acad48e6e47e2318 100644
--- a/model/basic/schedulability.v
+++ b/model/basic/schedulability.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.job rt.model.basic.task rt.model.basic.schedule.
-Require Import ssreflect eqtype ssrbool ssrnat seq bigop.
+From mathcomp Require Import ssreflect eqtype ssrbool ssrnat seq bigop.
 
 (* Definitions of deadline miss. *)
 Module Schedulability.
diff --git a/model/basic/schedule.v b/model/basic/schedule.v
index 5246d415560869715ba629ddc9799e38eb367b26..47cfa1baa78ea77d0324bebb0074efb3650547f7 100644
--- a/model/basic/schedule.v
+++ b/model/basic/schedule.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all
                rt.model.basic.job rt.model.basic.task rt.model.basic.arrival_sequence.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Definition, properties and lemmas about schedules. *)
 Module Schedule.
diff --git a/model/basic/task.v b/model/basic/task.v
index b3dcbec66085cd02e3cab2124880bd61938d116a..df65a6d58a6d3af7539050109ff51b0781064369 100644
--- a/model/basic/task.v
+++ b/model/basic/task.v
@@ -1,6 +1,5 @@
-Add LoadPath "../../" as rt.
 Require Import rt.model.basic.time rt.util.all.
-Require Import ssrnat ssrbool eqtype fintype seq.
+From mathcomp Require Import ssrnat ssrbool eqtype fintype seq.
 
 (* Attributes of a valid sporadic task. *)
 Module SporadicTask.
diff --git a/model/basic/task_arrival.v b/model/basic/task_arrival.v
index a9308b04d91e9d518f6945cfea27b4de322c5814..44a769db2d57c7f640a4f86e57aa8bd0242f3351 100644
--- a/model/basic/task_arrival.v
+++ b/model/basic/task_arrival.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.task rt.model.basic.job rt.model.basic.schedule.
-Require Import ssreflect ssrbool eqtype ssrnat seq.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq.
 
 (* Properties of the job arrival. *)
 Module SporadicTaskArrival.
diff --git a/model/basic/workload.v b/model/basic/workload.v
index f80d0e83254adbe32331d2229971a2987953dde7..78f8f1a60cb4d494ea99aec7c87a32ab6635d148 100644
--- a/model/basic/workload.v
+++ b/model/basic/workload.v
@@ -1,9 +1,8 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.basic.job rt.model.basic.task rt.model.basic.schedule
                rt.model.basic.task_arrival rt.model.basic.response_time
                rt.model.basic.schedulability.
-Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq div fintype bigop path.
 
 Module Workload.
 
diff --git a/model/jitter/arrival_sequence.v b/model/jitter/arrival_sequence.v
index 17e5f45edf4b60547fa71a919742921ad99ad417..316a75b8a6796c29c6aa5f64e58d34b07c0a8272 100644
--- a/model/jitter/arrival_sequence.v
+++ b/model/jitter/arrival_sequence.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* All definitions from arrival sequence can be safely imported. *)
 Require Export rt.model.basic.arrival_sequence.
\ No newline at end of file
diff --git a/model/jitter/interference.v b/model/jitter/interference.v
index 583240d1b40b731d73af46ede2f6b77af7bb2b55..63dca9f75da1e18564d34a73523a09f0a3274e4b 100644
--- a/model/jitter/interference.v
+++ b/model/jitter/interference.v
@@ -1,9 +1,8 @@
-Add LoadPath "../../" as rt.
 
 Require Import rt.util.all.
 Require Import rt.model.jitter.task rt.model.jitter.job rt.model.jitter.schedule
                rt.model.jitter.priority rt.model.jitter.workload.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Module Interference.
 
diff --git a/model/jitter/interference_edf.v b/model/jitter/interference_edf.v
index 1277e3ee0cd395ce9c39a853074e59a018063e1d..6a9d4d1e2ac6358e3ef2edf5d300c4fef08b3231 100644
--- a/model/jitter/interference_edf.v
+++ b/model/jitter/interference_edf.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.task rt.model.jitter.job rt.model.jitter.schedule
                rt.model.jitter.priority rt.model.jitter.task_arrival rt.model.jitter.interference
                rt.model.jitter.arrival_sequence rt.model.jitter.platform.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 Module InterferenceEDF.
 
diff --git a/model/jitter/job.v b/model/jitter/job.v
index abf4244934f81fe3dbda2a0fbb9f1828cb184102..35e395f385918a895c36189c81207b6935823538 100644
--- a/model/jitter/job.v
+++ b/model/jitter/job.v
@@ -1,6 +1,5 @@
-Add LoadPath "../../" as rt.
 Require Import rt.model.jitter.time rt.model.jitter.task.
-Require Import ssrnat ssrbool eqtype.  
+From mathcomp Require Import ssrnat ssrbool eqtype.  
 
 Require Export rt.model.basic.job.
 
diff --git a/model/jitter/platform.v b/model/jitter/platform.v
index e02219128c675c696bcecf5640e1a481028f6083..ad283f800cb28ee2bf9cabd7a450bbe7046675c3 100644
--- a/model/jitter/platform.v
+++ b/model/jitter/platform.v
@@ -1,8 +1,7 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.task rt.model.jitter.job rt.model.jitter.schedule
                rt.model.jitter.priority rt.model.jitter.task_arrival rt.model.jitter.interference.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 Module Platform.
 
@@ -151,7 +150,7 @@ Module Platform.
                 rewrite -addn1 addnC [_ + 1]addnC -addnA.
                 apply leq_add; first by done.
                 rewrite eq_fun_ord_to_nat; unfold make_sequence at 2; rewrite EX /= add0n. 
-                apply leq_add; apply leq_sum; ins; unfold fun_ord_to_nat; des_eqrefl2; try done;
+                apply leq_add; apply leq_sum; ins; unfold fun_ord_to_nat; des_eqrefl; try done;
                 by unfold make_sequence; desf.
               }
             }
@@ -254,6 +253,7 @@ Module Platform.
         Lemma platform_cpus_busy_with_interfering_tasks :      
           count (scheduled_task_other_than tsk) ts = num_cpus.
         Proof.
+          have UNIQ := platform_at_most_one_pending_job_of_each_task.
           rename H_all_jobs_from_taskset into FROMTS,
                  H_sequential_jobs into SEQUENTIAL,
                  H_work_conserving into WORK,
@@ -272,7 +272,6 @@ Module Platform.
                  sporadic_task_model, is_valid_sporadic_task,
                  jobs_of_same_task_dont_execute_in_parallel,
                  sequential_jobs in *.  
-          have UNIQ := platform_at_most_one_pending_job_of_each_task.
           apply/eqP; rewrite eqn_leq; apply/andP; split.
           {
             apply leq_trans with (n := count (fun x => task_is_scheduled job_task sched x t) ts);
diff --git a/model/jitter/platform_fp.v b/model/jitter/platform_fp.v
index 1df61ffee6305c54be66850aeccde26bdf1502e3..e330c42bc3a9f46ca6f73feb18cedfe4891317f1 100644
--- a/model/jitter/platform_fp.v
+++ b/model/jitter/platform_fp.v
@@ -1,9 +1,8 @@
-Add LoadPath "../.." as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.task rt.model.jitter.job rt.model.jitter.schedule
                rt.model.jitter.task_arrival rt.model.jitter.interference
                rt.model.jitter.priority rt.model.jitter.platform.
-Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq fintype bigop.
 
 Module PlatformFP.
 
@@ -186,6 +185,8 @@ Module PlatformFP.
       Lemma platform_fp_cpus_busy_with_interfering_tasks :      
         count (scheduled_task_with_higher_eq_priority tsk) ts = num_cpus.
       Proof.
+        have UNIQ := platform_fp_no_multiple_jobs_of_interfering_tasks.
+        have UNIQ' := platform_fp_no_multiple_jobs_of_tsk. 
         rename H_all_jobs_from_taskset into FROMTS,
                H_sequential_jobs into SEQUENTIAL,
                H_work_conserving into WORK,
@@ -207,8 +208,6 @@ Module PlatformFP.
                jobs_of_same_task_dont_execute_in_parallel,
                sequential_jobs,
                can_interfere_with_tsk in *.
-        have UNIQ := platform_fp_no_multiple_jobs_of_interfering_tasks.
-        have UNIQ' := platform_fp_no_multiple_jobs_of_tsk. 
         apply/eqP; rewrite eqn_leq; apply/andP; split.
         {
           apply leq_trans with (n := count (fun x => task_is_scheduled job_task sched x t) ts);
diff --git a/model/jitter/priority.v b/model/jitter/priority.v
index c2f5a4aec091ded0e46f97935a150b2a8f2d8bef..1a59a29edafce6aaebc7a3beddd74ade26f6def6 100644
--- a/model/jitter/priority.v
+++ b/model/jitter/priority.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* Because we define EDF using the *actual job arrivals*, we can safely import the original of priority. *)
 Require Export rt.model.basic.priority.
\ No newline at end of file
diff --git a/model/jitter/response_time.v b/model/jitter/response_time.v
index 91a8aa5a06a73f4d2138658acabdd36e0f630626..673085f1b3bd8d6cb4d2b8e140bfd31dba564a76 100644
--- a/model/jitter/response_time.v
+++ b/model/jitter/response_time.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* Since jitter does not change the notion of response time, we keep
    the original definitions. *)
diff --git a/model/jitter/schedulability.v b/model/jitter/schedulability.v
index ed5c6769e56240c28f8ff744aea9977d6802f1c3..7dfa86aff7d53b4d13f65d3892d07c3537c798ee 100644
--- a/model/jitter/schedulability.v
+++ b/model/jitter/schedulability.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* Jitter doesn't affect the notion of deadline miss, so we can safely
    import the basic definitions. *)
diff --git a/model/jitter/schedule.v b/model/jitter/schedule.v
index f75c7a62ef4c2ae567c2f8fa13a94c85674962b7..a78068ba480014d8ebe99f9019d99bc54eb23d90 100644
--- a/model/jitter/schedule.v
+++ b/model/jitter/schedule.v
@@ -1,7 +1,6 @@
-Add LoadPath "../../" as rt.
 Require Import rt.util.all.
 Require Import rt.model.jitter.job rt.model.jitter.task rt.model.jitter.arrival_sequence.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Definition, properties and lemmas about schedules. *)
 Module ScheduleWithJitter.
diff --git a/model/jitter/task.v b/model/jitter/task.v
index 84a6028779b4de90db6a309290abb53d3ff66ae4..73037fe62d05e1bad39faa106a7280ba9fc9b2b9 100644
--- a/model/jitter/task.v
+++ b/model/jitter/task.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* Since the worst-case jitter of a task is unbounded, we don't need to
    define any specific properties for a task with jitter.*)
diff --git a/model/jitter/task_arrival.v b/model/jitter/task_arrival.v
index b050e784bd1f21e2203391b9975ccdaa40a00b95..d2db320ed8dc63fe098582e2b92df063e624b6a3 100644
--- a/model/jitter/task_arrival.v
+++ b/model/jitter/task_arrival.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* Interarrival times are specified by the environment and are based on the
    original arrival times. We can import the original definitions. *)
diff --git a/model/jitter/time.v b/model/jitter/time.v
index 603a1f76e5817edeea5539ca8840a6b94ac07bd1..06ad193b5fb228c7d2d6cc05aad597669eb2ab1d 100644
--- a/model/jitter/time.v
+++ b/model/jitter/time.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* The definition of time is the same. *)
 Require Export rt.model.basic.time.
\ No newline at end of file
diff --git a/model/jitter/workload.v b/model/jitter/workload.v
index 83d15b159a42b45365a777024e4f7159ceae647f..280cc69ebcb55ec9c71d1245988e9c433fefc734 100644
--- a/model/jitter/workload.v
+++ b/model/jitter/workload.v
@@ -1,4 +1,3 @@
-Add LoadPath "../../" as rt.
 
 (* The workload of a task doesn't depend on jitter, so we keep the original definitions. *)
 Require Export rt.model.basic.workload.
\ No newline at end of file
diff --git a/util/all.v b/util/all.v
index 440291a291c0b22d66ec424e8e27c34b76146591..5ee67b8a496cdb36670df403b243de2baf0747b5 100644
--- a/util/all.v
+++ b/util/all.v
@@ -1,4 +1,3 @@
-Add LoadPath ".." as rt.
 
 Require Export rt.util.tactics.
 Require Export rt.util.notation.
diff --git a/util/bigcat.v b/util/bigcat.v
index 69d30e8539857349b860efa7b718d19a9d83e734..c58d3dda7f439c1db75bc8968ed05cd0b9d65ada 100644
--- a/util/bigcat.v
+++ b/util/bigcat.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics rt.util.notation rt.util.bigord.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Lemmas about the big concatenation operator. *)
 Section BigCatLemmas.
diff --git a/util/bigord.v b/util/bigord.v
index 419a9d228e586608f30ffc378f0bf55f1f8e7515..065a0f9767bcdfe7844299091fdf3a699da01dec 100644
--- a/util/bigord.v
+++ b/util/bigord.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Lemmas about big operators over Ordinals that use Ordinal functions.
    There is no support for them in ssreflect. *)
@@ -16,8 +15,7 @@ Section BigOrdFunOrd.
     forall n {T: Type} x0 (f: 'I_n -> T) (x: 'I_n),
       (fun_ord_to_nat x0 f) x = f x.
   Proof.
-    ins; unfold fun_ord_to_nat.
-    des_eqrefl2.
+    ins; unfold fun_ord_to_nat; des_eqrefl.
       by f_equal; apply ord_inj.
       by destruct x; ins; rewrite i in EQ.
   Qed.
diff --git a/util/counting.v b/util/counting.v
index eb16fa66d1275e3076c7f68fa4051548df37a86b..3e6fe473a123091a5917f709d0d05114b2dfb94f 100644
--- a/util/counting.v
+++ b/util/counting.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics rt.util.exists.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Additional lemmas about counting. *)
 Section Counting.
diff --git a/util/divround.v b/util/divround.v
index 938a70023c20c573fb73ef746dbda159ae07fd0e..714a5223b2a6a611a0f1081d7dff4bc0ed81d051 100644
--- a/util/divround.v
+++ b/util/divround.v
@@ -1,5 +1,4 @@
-Add LoadPath ".." as rt.
-Require Import ssrbool ssrnat div.
+From mathcomp Require Import ssrbool ssrnat div.
 
 Definition div_floor (x y: nat) : nat := x %/ y.
 Definition div_ceil (x y: nat) := if y %| x then x %/ y else (x %/ y).+1.
\ No newline at end of file
diff --git a/util/exists.v b/util/exists.v
index 27856c470946b2b398a81cce524a71fdf24d0c74..7dd564da3724ad6cd7a3d5d3c9ae8fdcdf1a5857 100644
--- a/util/exists.v
+++ b/util/exists.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype.
 
 (* Lemmas about the finite existential for Ordinals: [exists x, P x]. *)
 Section OrdExists.
diff --git a/util/fixedpoint.v b/util/fixedpoint.v
index 10fb78d401ea2027503f799d1857a5c94cbb9e65..b1d31d931c425bafc89ad04add409fa5dcb6d543 100644
--- a/util/fixedpoint.v
+++ b/util/fixedpoint.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics rt.util.induction.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 Section FixedPoint.
   
diff --git a/util/induction.v b/util/induction.v
index aef2dfe37505d4565ccf5ec9ad8d1d9cb9448c4f..70ea7b7b80449636b59b21f0e38347f50c02c847 100644
--- a/util/induction.v
+++ b/util/induction.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Induction lemmas for natural numbers. *)
 Section NatInduction.
diff --git a/util/list.v b/util/list.v
index 94b71d51d4c7c3fb6fdbe9f75f084dde9c984230..6ff7ac78ab30156e527c7e02c5d3b0001201112a 100644
--- a/util/list.v
+++ b/util/list.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Lemmas about lists without duplicates. *)
 Section UniqList.
@@ -101,7 +100,7 @@ End UniqList.
 (* Additional lemmas about list zip. *)
 Section Zip.
   
-  Lemma zipP {T: eqType} (P: _ -> _ -> bool) (X Y: seq T) x0:
+  Lemma zipP {T: eqType} (x0: T) (P: _ -> _ -> bool) (X Y: seq T):
     size X = size Y ->
     reflect (forall i, i < size (zip X Y) -> P (nth x0 X i) (nth x0 Y i))
             (all (fun p => P (fst p) (snd p)) (zip X Y)).
diff --git a/util/nat.v b/util/nat.v
index 0880a188a50692a33d8856d2ffae2054988ab55b..35690a9a66c31e12b68a415e7d5842b03f04bfbb 100644
--- a/util/nat.v
+++ b/util/nat.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics rt.util.divround rt.util.ssromega.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop div.
 
 (* Additional lemmas about natural numbers. *)
 Section NatLemmas.
diff --git a/util/notation.v b/util/notation.v
index 17b0895c9bba4be3846e91aeec6c172107940a66..6787517bdebb9fa20643f64c7c96c7e731f39cce 100644
--- a/util/notation.v
+++ b/util/notation.v
@@ -1,5 +1,4 @@
-Add LoadPath ".." as rt.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Here we define a more verbose notation for projections of pairs... *)
 Section Pair.
diff --git a/util/powerset.v b/util/powerset.v
index 44900176d607e1fdf4dc746f3c775a2d1257b59d..723fcfdae699e4795ac90abd4fd4dc7f03541a78 100644
--- a/util/powerset.v
+++ b/util/powerset.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop tuple.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop tuple.
 
 Section PowerSet.
   
diff --git a/util/sorting.v b/util/sorting.v
index d1f0d4f8b9ac3aa13912211a418b79b7dcce7dfc..e28d8003bcaff85a1ac8e26216945d627003a734 100644
--- a/util/sorting.v
+++ b/util/sorting.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics rt.util.induction.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop path.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop path.
 
 (* Lemmas about sorted lists. *)
 Section Sorting.
@@ -63,13 +62,14 @@ Section Sorting.
     destruct s; first by rewrite ltn0 in LT.
     simpl in SORT.
     induction delta;
-      first by rewrite /= addn0 ltnS in LT; rewrite addn0; apply/pathP.
+      first by rewrite /= addn0 ltnS in LT; rewrite /= -addnE addn0; apply/pathP.
     {
       rewrite /transitive (TRANS (nth x0 (s :: s0) (i1.+1 + delta))) //;
         first by apply IHdelta, leq_ltn_trans with (n := i1.+1 + delta.+1); [rewrite leq_add2l|].
-      rewrite -[delta.+1]addn1 addnA addn1; apply/pathP; first by done.
+      rewrite -[delta.+1]addn1 addnA addn1.
+      move: SORT => /pathP SORT; apply SORT.
       by rewrite /= -[delta.+1]addn1 addnA addn1 ltnS in LT.
-    }  
+    }
   Qed.
 
   Lemma sorted_uniq_rel_implies_le_idx :
diff --git a/util/ssromega.v b/util/ssromega.v
index b5341a0d51bc02c2e2d1514114f0a774c9323a83..426d8d07311ec76f642e1eb75789b223e46fc9a6 100644
--- a/util/ssromega.v
+++ b/util/ssromega.v
@@ -1,4 +1,5 @@
-Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq Omega.
+From mathcomp Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq.
+Require Import Omega.
 
 (* Taken from http://github.com/pi8027/formalized-postscript/blob/master/stdlib_ext.v *)
 
diff --git a/util/sum.v b/util/sum.v
index 3242b0f6254bd0b695542e4c7ed5465deea57749..5180530b5cb4a1c9f59efe259d5e00398bdcc87d 100644
--- a/util/sum.v
+++ b/util/sum.v
@@ -1,6 +1,5 @@
-Add LoadPath ".." as rt.
 Require Import rt.util.tactics rt.util.notation rt.util.sorting rt.util.nat.
-Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
+From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
 
 (* Lemmas about arithmetic with sums. *)
 Section SumArithmetic.
diff --git a/util/tactics.v b/util/tactics.v
index f94e0f0f7ba2905697488742aaf887cb34af1e19..cff319faa75bc1300d11d4577a0ded56fab883e6 100644
--- a/util/tactics.v
+++ b/util/tactics.v
@@ -11,7 +11,7 @@
 
 (** Symbols starting with [vlib__] are internal. *)
 
-Require Import ssreflect ssrbool ssrnat eqtype bigop.
+From mathcomp Require Import ssreflect ssrbool ssrnat eqtype bigop.
 
 Open Scope bool_scope.
 Open Scope list_scope.
@@ -175,7 +175,6 @@ Ltac clarsimp := intros; simpl in *; vlib__clarsimp1.
 
 Ltac autos   := clarsimp; auto with vlib.
 
-
 (* ************************************************************************** *)
 (** Destruct but give useful names *)
 (* ************************************************************************** *)
@@ -289,31 +288,18 @@ Ltac des_if :=
 
 Ltac des_eqrefl :=
   match goal with
-    | H: context[match ?X as id return (id = ?X -> _) with _ => _ end Logic.eq_refl] |- _ =>
-    let EQ := fresh "EQ" in
-    let id' := fresh "x" in
-    revert H;
-    generalize (Logic.eq_refl X); generalize X at 1 3;
-    intros id' EQ; destruct id'; intros H
-    | |- context[match ?X as id return (id = ?X -> _) with _ => _ end Logic.eq_refl] =>
-    let EQ := fresh "EQ" in
-    let id' := fresh "x" in
-    generalize (Logic.eq_refl X); generalize X at 1 3;
-    intros id' EQ; destruct id'
-  end.
-
-Ltac des_eqrefl2 :=
-  match goal with
-    | H: context[match ?X as id return (?X = id -> _) with _ => _ end Logic.eq_refl] |- _ =>
+    | H: context[match ?X with |true => _ | false => _ end Logic.eq_refl] |- _ =>
     let EQ := fresh "EQ" in
     let id' := fresh "x" in
     revert H;
-    generalize (Logic.eq_refl X); generalize X at 2 3;
+    generalize (Logic.eq_refl X);
+    try (generalize X at 1 3); try (generalize X at 2 3);
     intros id' EQ; destruct id'; intros H
-    | |- context[match ?X as id return (?X = id -> _) with _ => _ end Logic.eq_refl] =>
+    | |- context[match ?X with |true => _ | false => _ end Logic.eq_refl] =>
     let EQ := fresh "EQ" in
     let id' := fresh "x" in
-    generalize (Logic.eq_refl X); generalize X at 2 3;
+    generalize (Logic.eq_refl X);
+    try (generalize X at 1 3); try (generalize X at 2 3);
     intros id' EQ; destruct id'
   end.