From ae8664ab5c88e6b5ec714993756fba0dc0dd9aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Brandenburg?= <bbb@mpi-sws.org> Date: Fri, 15 Jan 2016 12:33:11 +0100 Subject: [PATCH] Remove HTML files An up-to-date version can always be generated with 'make html'. --- .gitignore | 1 + Vbase.html | 2349 ------------------- arrival_sequence.html | 151 -- bertogna_edf_comp.html | 473 ---- bertogna_edf_theory.html | 415 ---- bertogna_fp_comp.html | 423 ---- bertogna_fp_theory.html | 374 ---- index.html | 4215 ----------------------------------- interference.html | 276 --- interference_bound_edf.html | 608 ----- job.html | 157 -- platform.html | 170 -- priority.html | 227 -- response_time.html | 174 -- schedulability.html | 206 -- schedule.html | 437 ---- task.html | 132 -- task_arrival.html | 72 - util_divround.html | 37 - util_lemmas.html | 480 ---- workload.html | 95 - workload_bound.html | 442 ---- 22 files changed, 1 insertion(+), 11913 deletions(-) delete mode 100644 Vbase.html delete mode 100644 arrival_sequence.html delete mode 100644 bertogna_edf_comp.html delete mode 100644 bertogna_edf_theory.html delete mode 100644 bertogna_fp_comp.html delete mode 100644 bertogna_fp_theory.html delete mode 100644 index.html delete mode 100644 interference.html delete mode 100644 interference_bound_edf.html delete mode 100644 job.html delete mode 100644 platform.html delete mode 100644 priority.html delete mode 100644 response_time.html delete mode 100644 schedulability.html delete mode 100644 schedule.html delete mode 100644 task.html delete mode 100644 task_arrival.html delete mode 100644 util_divround.html delete mode 100644 util_lemmas.html delete mode 100644 workload.html delete mode 100644 workload_bound.html diff --git a/.gitignore b/.gitignore index 377258e37..bdb310812 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.d *.glob *.vo +*.html diff --git a/Vbase.html b/Vbase.html deleted file mode 100644 index fbdfc9d9b..000000000 --- a/Vbase.html +++ /dev/null @@ -1,2349 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>Vbase</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library Vbase</h1> - -<div class="code"> - -<br/> -<span class="comment">(* *********************************************************************)</span><br/> -<span class="comment">(* *)</span><br/> -<span class="comment">(* Basic lemmas & tactics *)</span><br/> -<span class="comment">(* *)</span><br/> -<span class="comment">(* *********************************************************************)</span><br/> - -<br/> -</div> - -<div class="doc"> -This file collects a number of basic lemmas and tactics for better - proof automation, structuring large proofs, or rewriting. Most of - the rewriting support is ported from ss-reflect. -<div class="paragraph"> </div> - - Symbols starting with <span class="inlinecode"><span class="id" type="var">vlib__</span></span> are internal. -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Logic.Eqdep.html#"><span class="id" type="library">Logic.Eqdep</span></a>.<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Bool.Bool.html#"><span class="id" type="library">Bool</span></a>.<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Arith.Arith.html#"><span class="id" type="library">Arith</span></a>.<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.ZArith.ZArith.html#"><span class="id" type="library">ZArith</span></a>.<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Strings.String.html#"><span class="id" type="library">String</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Open</span> <span class="id" type="keyword">Scope</span> <span class="id" type="var">bool_scope</span>.<br/> -<span class="id" type="keyword">Open</span> <span class="id" type="keyword">Scope</span> <span class="id" type="var">list_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Set Implicit Arguments</span>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab3"></a><h1 class="section">Axioms</h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -<span class="id" type="keyword">Require</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Logic.ClassicalFacts.html#"><span class="id" type="library">ClassicalFacts</span></a>.<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Export</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Logic.FunctionalExtensionality.html#"><span class="id" type="library">FunctionalExtensionality</span></a>.<br/> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Export</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Logic.ProofIrrelevance.html#"><span class="id" type="library">ProofIrrelevance</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">exten</span> := <span class="id" type="tactic">apply</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Logic.FunctionalExtensionality.html#functional_extensionality"><span class="id" type="lemma">functional_extensionality</span></a>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab4"></a><h1 class="section">Coersion of <span class="inlinecode"><span class="id" type="var">bool</span></span> into <span class="inlinecode"><span class="id" type="keyword">Prop</span></span></h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -</div> - -<div class="doc"> -Coersion of bools into Prop -</div> -<div class="code"> -<span class="id" type="keyword">Coercion</span> <span class="id" type="var">is_true</span> (<span class="id" type="var">b</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) : <span class="id" type="keyword">Prop</span> := <a class="idref" href="Vbase.html#b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#true"><span class="id" type="constructor">true</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -Hints for auto -</div> -<div class="code"> -<span class="id" type="keyword">Lemma</span> <a name="vlib__true_is_true"><span class="id" type="lemma">vlib__true_is_true</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#true"><span class="id" type="constructor">true</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__not_false_is_true"><span class="id" type="lemma">vlib__not_false_is_true</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Hint Resolve</span> <a class="idref" href="Vbase.html#vlib__true_is_true"><span class="id" type="lemma">vlib__true_is_true</span></a> <a class="idref" href="Vbase.html#vlib__not_false_is_true"><span class="id" type="lemma">vlib__not_false_is_true</span></a>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab5"></a><h1 class="section">Very basic automation</h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -</div> - -<div class="doc"> -Set up for basic simplification -</div> -<div class="code"> - -<br/> - -<br/> -</div> - -<div class="doc"> -Adaptation of the ss-reflect "<span class="inlinecode"><span class="id" type="var">done</span></span>" tactic. -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">vlib__basic_done</span> := <br/> - <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">trivial</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib</span> | <span class="id" type="tactic">apply</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#sym_equal"><span class="id" type="abbreviation">sym_equal</span></a>; <span class="id" type="tactic">trivial</span> | <span class="id" type="tactic">discriminate</span> | <span class="id" type="var">contradiction</span>].<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">done</span> := <span class="id" type="tactic">trivial</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib</span>; <span class="id" type="tactic">hnf</span>; <span class="id" type="tactic">intros</span>;<br/> - <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <span class="id" type="var">vlib__basic_done</span><br/> - | <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span> <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">case</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">trivial</span>] <span class="id" type="keyword">end</span>].<br/> - -<br/> -</div> - -<div class="doc"> -A variant of the ssr "done" tactic that performs "eassumption". -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">edone</span> := <span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="tactic">trivial</span>; <span class="id" type="tactic">hnf</span>; <span class="id" type="tactic">intros</span>;<br/> - <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>; <br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">vlib__basic_done</span>; <span class="id" type="tactic">split</span>;<br/> - <span class="id" type="tactic">try</span> <span class="id" type="var">eassumption</span>; <span class="id" type="var">vlib__basic_done</span><br/> - | <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span> <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">case</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">trivial</span>] <span class="id" type="keyword">end</span>].<br/> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "by" <span class="id" type="var">tactic</span>(<span class="id" type="var">tac</span>) := (<span class="id" type="var">tac</span>; <span class="id" type="var">done</span>).<br/> -<span class="id" type="keyword">Tactic Notation</span> "eby" <span class="id" type="var">tactic</span>(<span class="id" type="var">tac</span>) := (<span class="id" type="var">tac</span>; <span class="id" type="var">edone</span>).<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab6"></a><h1 class="section">Boolean reflection</h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -</div> - -<div class="doc"> -These definitions are ported from ssr-bool. -<div class="paragraph"> </div> - - Negation lemmas -</div> -<div class="code"> -<span class="id" type="keyword">Section</span> <a name="NegationLemmas"><span class="id" type="section">NegationLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variables</span> (<a name="NegationLemmas.b"><span class="id" type="variable">b</span></a> <a name="NegationLemmas.c"><span class="id" type="variable">c</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>).<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbT"><span class="id" type="lemma">negbT</span></a> : <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbTE"><span class="id" type="lemma">negbTE</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbF"><span class="id" type="lemma">negbF</span></a> : <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbFE"><span class="id" type="lemma">negbFE</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbNE"><span class="id" type="lemma">negbNE</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a>) -> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbLR"><span class="id" type="lemma">negbLR</span></a> : <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.c"><span class="id" type="variable">c</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#NegationLemmas.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="negbRL"><span class="id" type="lemma">negbRL</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#NegationLemmas.c"><span class="id" type="variable">c</span></a> -> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="contra"><span class="id" type="lemma">contra</span></a> : (<a class="idref" href="Vbase.html#NegationLemmas.c"><span class="id" type="variable">c</span></a> -> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a>) -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#NegationLemmas.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#NegationLemmas"><span class="id" type="section">NegationLemmas</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -Lemmas for ifs, which allow reasoning about the condition without - repeating it inside the proof. -</div> -<div class="code"> -<span class="id" type="keyword">Section</span> <a name="BoolIf"><span class="id" type="section">BoolIf</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Variables</span> (<a name="BoolIf.A"><span class="id" type="variable">A</span></a> <a name="BoolIf.B"><span class="id" type="variable">B</span></a> : <span class="id" type="keyword">Type</span>) (<a name="BoolIf.x"><span class="id" type="variable">x</span></a> : <a class="idref" href="Vbase.html#BoolIf.A"><span class="id" type="variable">A</span></a>) (<a name="BoolIf.f"><span class="id" type="variable">f</span></a> : <a class="idref" href="Vbase.html#BoolIf.A"><span class="id" type="variable">A</span></a> -> <a class="idref" href="Vbase.html#BoolIf.B"><span class="id" type="variable">B</span></a>) (<a name="BoolIf.b"><span class="id" type="variable">b</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) (<a name="BoolIf.vT"><span class="id" type="variable">vT</span></a> <a name="BoolIf.vF"><span class="id" type="variable">vF</span></a> : <a class="idref" href="Vbase.html#BoolIf.A"><span class="id" type="variable">A</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Inductive</span> <a name="if_spec"><span class="id" type="inductive">if_spec</span></a> : <a class="idref" href="Vbase.html#BoolIf.A"><span class="id" type="variable">A</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a> -> <span class="id" type="keyword">Set</span> :=<br/> - | <a name="IfSpecTrue"><span class="id" type="constructor">IfSpecTrue</span></a> : <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="Vbase.html#if_spec"><span class="id" type="inductive">if_spec</span></a> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#true"><span class="id" type="constructor">true</span></a><br/> - | <a name="IfSpecFalse"><span class="id" type="constructor">IfSpecFalse</span></a> : <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="Vbase.html#if_spec"><span class="id" type="inductive">if_spec</span></a> <a class="idref" href="Vbase.html#BoolIf.vF"><span class="id" type="variable">vF</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="ifP"><span class="id" type="lemma">ifP</span></a> : <a class="idref" href="Vbase.html#if_spec"><span class="id" type="inductive">if_spec</span></a> (<span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#BoolIf.vF"><span class="id" type="variable">vF</span></a>) <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="if_same"><span class="id" type="lemma">if_same</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="if_neg"><span class="id" type="lemma">if_neg</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><span class="id" type="keyword">if</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#BoolIf.vF"><span class="id" type="variable">vF</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#BoolIf.vF"><span class="id" type="variable">vF</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="fun_if"><span class="id" type="lemma">fun_if</span></a> : <a class="idref" href="Vbase.html#BoolIf.f"><span class="id" type="variable">f</span></a> (<span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#BoolIf.vF"><span class="id" type="variable">vF</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#BoolIf.f"><span class="id" type="variable">f</span></a> <a class="idref" href="Vbase.html#BoolIf.vT"><span class="id" type="variable">vT</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#BoolIf.f"><span class="id" type="variable">f</span></a> <a class="idref" href="Vbase.html#BoolIf.vF"><span class="id" type="variable">vF</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="if_arg"><span class="id" type="lemma">if_arg</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">fT</span> <span class="id" type="var">fF</span> : <a class="idref" href="Vbase.html#BoolIf.A"><span class="id" type="variable">A</span></a> -> <a class="idref" href="Vbase.html#BoolIf.B"><span class="id" type="variable">B</span></a>,<br/> - (<span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#fT"><span class="id" type="variable">fT</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#fF"><span class="id" type="variable">fF</span></a>) <a class="idref" href="Vbase.html#BoolIf.x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#BoolIf.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#fT"><span class="id" type="variable">fT</span></a> <a class="idref" href="Vbase.html#BoolIf.x"><span class="id" type="variable">x</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#fF"><span class="id" type="variable">fF</span></a> <a class="idref" href="Vbase.html#BoolIf.x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#BoolIf"><span class="id" type="section">BoolIf</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -The reflection predicate -</div> -<div class="code"> -<span class="id" type="keyword">Inductive</span> <a name="reflect"><span class="id" type="inductive">reflect</span></a> (<span class="id" type="var">P</span> : <span class="id" type="keyword">Prop</span>) : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a> -> <span class="id" type="keyword">Set</span> :=<br/> - | <a name="ReflectT"><span class="id" type="constructor">ReflectT</span></a> : <span class="id" type="var">P</span> -> <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <span class="id" type="var">P</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#true"><span class="id" type="constructor">true</span></a><br/> - | <a name="ReflectF"><span class="id" type="constructor">ReflectF</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <span class="id" type="var">P</span> -> <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <span class="id" type="var">P</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -Internal reflection lemmas -</div> -<div class="code"> -<span class="id" type="keyword">Section</span> <a name="ReflectCore"><span class="id" type="section">ReflectCore</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Variables</span> (<a name="ReflectCore.P"><span class="id" type="variable">P</span></a> : <span class="id" type="keyword">Prop</span>) (<a name="ReflectCore.b"><span class="id" type="variable">b</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) (<a name="ReflectCore.Hb"><span class="id" type="variable">Hb</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a>) (<a name="ReflectCore.Q"><span class="id" type="variable">Q</span></a> : <span class="id" type="keyword">Prop</span>) (<a name="ReflectCore.c"><span class="id" type="variable">c</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="introNTF"><span class="id" type="lemma">introNTF</span></a> : (<span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a>) -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="introTF"><span class="id" type="lemma">introTF</span></a> : (<span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a>) -> <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="elimNTF"><span class="id" type="lemma">elimNTF</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a> -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="elimTF"><span class="id" type="lemma">elimTF</span></a> : <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a> -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectCore.c"><span class="id" type="variable">c</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="equivPif"><span class="id" type="lemma">equivPif</span></a> : (<a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a> -> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a>) -> (<a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a>) -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="xorPif"><span class="id" type="lemma">xorPif</span></a> : <a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">(</span></a><a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="Vbase.html#ReflectCore.P"><span class="id" type="variable">P</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">)</span></a> -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectCore.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#ReflectCore.Q"><span class="id" type="variable">Q</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#ReflectCore"><span class="id" type="section">ReflectCore</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -Internal negated reflection lemmas -</div> -<div class="code"> -<span class="id" type="keyword">Section</span> <a name="ReflectNegCore"><span class="id" type="section">ReflectNegCore</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Variables</span> (<a name="ReflectNegCore.P"><span class="id" type="variable">P</span></a> : <span class="id" type="keyword">Prop</span>) (<a name="ReflectNegCore.b"><span class="id" type="variable">b</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) (<a name="ReflectNegCore.Hb"><span class="id" type="variable">Hb</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.b"><span class="id" type="variable">b</span></a>)) (<a name="ReflectNegCore.Q"><span class="id" type="variable">Q</span></a> : <span class="id" type="keyword">Prop</span>) (<a name="ReflectNegCore.c"><span class="id" type="variable">c</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="introTFn"><span class="id" type="lemma">introTFn</span></a> : (<span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectNegCore.c"><span class="id" type="variable">c</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a>) -> <a class="idref" href="Vbase.html#ReflectNegCore.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="elimTFn"><span class="id" type="lemma">elimTFn</span></a> : <a class="idref" href="Vbase.html#ReflectNegCore.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.c"><span class="id" type="variable">c</span></a> -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectNegCore.c"><span class="id" type="variable">c</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="equivPifn"><span class="id" type="lemma">equivPifn</span></a> : (<a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a> -> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a>) -> (<a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a>) -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectNegCore.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="xorPifn"><span class="id" type="lemma">xorPifn</span></a> : <a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">(</span></a><a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.P"><span class="id" type="variable">P</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">)</span></a> -> <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#ReflectNegCore.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectNegCore.Q"><span class="id" type="variable">Q</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#ReflectNegCore"><span class="id" type="section">ReflectNegCore</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -User-oriented reflection lemmas -</div> -<div class="code"> -<span class="id" type="keyword">Section</span> <a name="Reflect"><span class="id" type="section">Reflect</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Variables</span> (<a name="Reflect.P"><span class="id" type="variable">P</span></a> <a name="Reflect.Q"><span class="id" type="variable">Q</span></a> : <span class="id" type="keyword">Prop</span>) (<a name="Reflect.b"><span class="id" type="variable">b</span></a> <a name="Reflect.b'"><span class="id" type="variable">b'</span></a> <a name="Reflect.c"><span class="id" type="variable">c</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>).<br/> -<span class="id" type="keyword">Hypotheses</span> (<a name="Reflect.Pb"><span class="id" type="variable">Pb</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a>) (<a name="Reflect.Pb'"><span class="id" type="variable">Pb'</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#Reflect.b'"><span class="id" type="variable">b'</span></a>)).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="introT"><span class="id" type="lemma">introT</span></a> : <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="introF"><span class="id" type="lemma">introF</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="introN"><span class="id" type="lemma">introN</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="introNf"><span class="id" type="lemma">introNf</span></a> : <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="introTn"><span class="id" type="lemma">introTn</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#Reflect.b'"><span class="id" type="variable">b'</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="introFn"><span class="id" type="lemma">introFn</span></a> : <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#Reflect.b'"><span class="id" type="variable">b'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="elimT"><span class="id" type="lemma">elimT</span></a> : <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="elimF"><span class="id" type="lemma">elimF</span></a> : <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="elimN"><span class="id" type="lemma">elimN</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a><a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="elimNf"><span class="id" type="lemma">elimNf</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="elimTn"><span class="id" type="lemma">elimTn</span></a> : <a class="idref" href="Vbase.html#Reflect.b'"><span class="id" type="variable">b'</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="elimFn"><span class="id" type="lemma">elimFn</span></a> : <a class="idref" href="Vbase.html#Reflect.b'"><span class="id" type="variable">b'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="introP"><span class="id" type="lemma">introP</span></a> : (<a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a>) -> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a>) -> <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="iffP"><span class="id" type="lemma">iffP</span></a> : (<a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a>) -> (<a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a> -> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>) -> <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="appP"><span class="id" type="lemma">appP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> -> <a class="idref" href="Vbase.html#Reflect.Q"><span class="id" type="variable">Q</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="sameP"><span class="id" type="lemma">sameP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> <a class="idref" href="Vbase.html#Reflect.c"><span class="id" type="variable">c</span></a> -> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#Reflect.c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="decPcases"><span class="id" type="lemma">decPcases</span></a> : <span class="id" type="keyword">if</span> <a class="idref" href="Vbase.html#Reflect.b"><span class="id" type="variable">b</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a> <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="decP"><span class="id" type="definition">decP</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a><a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">+</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#Reflect.P"><span class="id" type="variable">P</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#Reflect"><span class="id" type="section">Reflect</span></a>.<br/> - -<br/> -<span class="comment">(* Allow the direct application of a reflection lemma to a boolean assertion. *)</span><br/> -<span class="id" type="keyword">Coercion</span> <a class="idref" href="Vbase.html#elimT"><span class="id" type="lemma">elimT</span></a> : <span class="id" type="var">reflect</span> >-> <span class="id" type="var">Funclass</span>.<br/> - -<br/> -<span class="id" type="keyword">Section</span> <a name="ReflectConnectives"><span class="id" type="section">ReflectConnectives</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Variable</span> <a name="ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a name="ReflectConnectives.b2"><span class="id" type="variable">b2</span></a> <a name="ReflectConnectives.b3"><span class="id" type="variable">b3</span></a> <a name="ReflectConnectives.b4"><span class="id" type="variable">b4</span></a> <a name="ReflectConnectives.b5"><span class="id" type="variable">b5</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="idP"><span class="id" type="lemma">idP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="idPn"><span class="id" type="lemma">idPn</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="negP"><span class="id" type="lemma">negP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'~'_x"><span class="id" type="notation">~</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="negPn"><span class="id" type="lemma">negPn</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>)).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="negPf"><span class="id" type="lemma">negPf</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="andP"><span class="id" type="lemma">andP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>) (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="orP"><span class="id" type="lemma">orP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>) (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="nandP"><span class="id" type="lemma">nandP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>)).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="norP"><span class="id" type="lemma">norP</span></a> : <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> (<a class="idref" href="Vbase.html#ReflectConnectives.b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <a class="idref" href="Vbase.html#ReflectConnectives.b2"><span class="id" type="variable">b2</span></a>)).<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#ReflectConnectives"><span class="id" type="section">ReflectConnectives</span></a>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab7"></a><h1 class="section">Equality types</h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -</div> - -<div class="doc"> -These definitions are ported from ssr-eq. -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Inductive</span> <a name="phantom"><span class="id" type="inductive">phantom</span></a> (<span class="id" type="var">T</span> : <span class="id" type="keyword">Type</span>) (<span class="id" type="var">p</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>) : <span class="id" type="keyword">Type</span> := <a name="Phantom"><span class="id" type="constructor">Phantom</span></a>.<br/> -<span class="id" type="keyword">Implicit Arguments</span> <a class="idref" href="Vbase.html#phantom"><span class="id" type="inductive">phantom</span></a> [].<br/> -<span class="id" type="keyword">Implicit Arguments</span> <a class="idref" href="Vbase.html#Phantom"><span class="id" type="constructor">Phantom</span></a> [].<br/> -<span class="id" type="keyword">Definition</span> <a name="phant_id"><span class="id" type="definition">phant_id</span></a> <span class="id" type="var">T1</span> <span class="id" type="var">T2</span> <span class="id" type="var">v1</span> <span class="id" type="var">v2</span> := <a class="idref" href="Vbase.html#phantom"><span class="id" type="inductive">phantom</span></a> <a class="idref" href="Vbase.html#T1"><span class="id" type="variable">T1</span></a> <a class="idref" href="Vbase.html#v1"><span class="id" type="variable">v1</span></a> -> <a class="idref" href="Vbase.html#phantom"><span class="id" type="inductive">phantom</span></a> <a class="idref" href="Vbase.html#T2"><span class="id" type="variable">T2</span></a> <a class="idref" href="Vbase.html#v2"><span class="id" type="variable">v2</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="idfun"><span class="id" type="definition">idfun</span></a> <span class="id" type="var">T</span> := (<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a> => <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="Equality"><span class="id" type="module">Equality</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="Equality.axiom"><span class="id" type="definition">axiom</span></a> <span class="id" type="var">T</span> (<span class="id" type="var">e</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) := <span class="id" type="keyword">forall</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span>, <a class="idref" href="Vbase.html#Equality.reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a>) (<a class="idref" href="Vbase.html#e"><span class="id" type="variable">e</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Structure</span> <a name="Equality.mixin_of"><span class="id" type="record">mixin_of</span></a> <span class="id" type="var">T</span> := <a name="Equality.Mixin"><span class="id" type="constructor">Mixin</span></a> {<a name="Equality.op"><span class="id" type="projection">op</span></a> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>; <span class="id" type="var">_</span> : <a class="idref" href="Vbase.html#Equality.axiom"><span class="id" type="definition">axiom</span></a> <a class="idref" href="Vbase.html#op"><span class="id" type="method">op</span></a>}.<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.class_of"><span class="id" type="abbreviation">class_of</span></a> := <a class="idref" href="Vbase.html#Equality.mixin_of"><span class="id" type="record">mixin_of</span></a> (<span class="id" type="var">only</span> <span class="id" type="var">parsing</span>).<br/> - -<br/> -<span class="id" type="keyword">Section</span> <a name="Equality.ClassDef"><span class="id" type="section">ClassDef</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Structure</span> <a name="Equality.type"><span class="id" type="record">type</span></a> := <a name="Equality.Pack"><span class="id" type="constructor">Pack</span></a> {<a name="Equality.sort"><span class="id" type="projection">sort</span></a>; <span class="id" type="var">_</span> : <a class="idref" href="Vbase.html#Equality.class_of"><span class="id" type="abbreviation">class_of</span></a> <a class="idref" href="Vbase.html#sort"><span class="id" type="method">sort</span></a>; <span class="id" type="var">_</span> : <span class="id" type="keyword">Type</span>}.<br/> -<span class="id" type="keyword">Local</span> <span class="id" type="keyword">Coercion</span> <a class="idref" href="Vbase.html#Equality.sort"><span class="id" type="projection">sort</span></a> : <span class="id" type="var">type</span> >-> <span class="id" type="var">Sortclass</span>.<br/> -<span class="id" type="keyword">Variables</span> (<a name="Equality.ClassDef.T"><span class="id" type="variable">T</span></a> : <span class="id" type="keyword">Type</span>) (<a name="Equality.ClassDef.cT"><span class="id" type="variable">cT</span></a> : <a class="idref" href="Vbase.html#Equality.type"><span class="id" type="record">type</span></a>).<br/> -<span class="id" type="keyword">Definition</span> <a name="Equality.class"><span class="id" type="definition">class</span></a> <span class="id" type="var">cT'</span> := <span class="id" type="keyword">match</span> <a class="idref" href="Vbase.html#cT'"><span class="id" type="variable">cT'</span></a> <span class="id" type="keyword">return</span> <a class="idref" href="Vbase.html#Equality.class_of"><span class="id" type="abbreviation">class_of</span></a> <a class="idref" href="Vbase.html#cT'"><span class="id" type="variable">cT'</span></a> <span class="id" type="keyword">with</span> <a class="idref" href="Vbase.html#Equality.Pack"><span class="id" type="constructor">Pack</span></a> <span class="id" type="var">_</span> <span class="id" type="var">c</span> <span class="id" type="var">_</span> => <span class="id" type="var">c</span> <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="Equality.pack"><span class="id" type="definition">pack</span></a> <span class="id" type="var">c</span> := @<a class="idref" href="Vbase.html#Equality.Pack"><span class="id" type="constructor">Pack</span></a> <a class="idref" href="Vbase.html#Equality.ClassDef.T"><span class="id" type="variable">T</span></a> <a class="idref" href="Vbase.html#c"><span class="id" type="variable">c</span></a> <a class="idref" href="Vbase.html#Equality.ClassDef.T"><span class="id" type="variable">T</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="Equality.clone"><span class="id" type="definition">clone</span></a> := <span class="id" type="keyword">fun</span> <span class="id" type="var">c</span> (<span class="id" type="var">_</span> : <a class="idref" href="Vbase.html#Equality.ClassDef.cT"><span class="id" type="variable">cT</span></a> -> <a class="idref" href="Vbase.html#Equality.ClassDef.T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">_</span> : <a class="idref" href="Vbase.html#Equality.phant_id"><span class="id" type="definition">phant_id</span></a> (<a class="idref" href="Vbase.html#Equality.pack"><span class="id" type="definition">pack</span></a> <a class="idref" href="Vbase.html#c"><span class="id" type="variable">c</span></a>) <a class="idref" href="Vbase.html#Equality.ClassDef.cT"><span class="id" type="variable">cT</span></a>) => <a class="idref" href="Vbase.html#Equality.pack"><span class="id" type="definition">pack</span></a> <a class="idref" href="Vbase.html#c"><span class="id" type="variable">c</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#Equality.ClassDef"><span class="id" type="section">ClassDef</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="Equality.Exports"><span class="id" type="module">Exports</span></a>.<br/> -<span class="id" type="keyword">Coercion</span> <a class="idref" href="Vbase.html#Equality.Exports.sort"><span class="id" type="projection">sort</span></a> : <span class="id" type="var">type</span> >-> <span class="id" type="var">Sortclass</span>.<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.Exports.eqType"><span class="id" type="abbreviation">eqType</span></a> := <a class="idref" href="Vbase.html#Equality.Exports.type"><span class="id" type="record">type</span></a>.<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.Exports.EqMixin"><span class="id" type="abbreviation">EqMixin</span></a> := <a class="idref" href="Vbase.html#Equality.Exports.Mixin"><span class="id" type="constructor">Mixin</span></a>.<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.Exports.EqType"><span class="id" type="abbreviation">EqType</span></a> <span class="id" type="var">T</span> <span class="id" type="var">m</span> := (@<a class="idref" href="Vbase.html#Equality.Exports.pack"><span class="id" type="definition">pack</span></a> <span class="id" type="var">T</span> <span class="id" type="var">m</span>).<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.Exports.:form_scope:'['_'eqMixin'_'of'_x_']'"><span class="id" type="notation">"</span></a>[ 'eqMixin' 'of' T ]" := (<a class="idref" href="Vbase.html#Equality.Exports.class"><span class="id" type="definition">class</span></a> <span class="id" type="var">_</span> : <a class="idref" href="Vbase.html#Equality.Exports.mixin_of"><span class="id" type="record">mixin_of</span></a> <span class="id" type="var">T</span>)<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 0, <span class="id" type="var">format</span> "[ 'eqMixin' 'of' T ]") : <span class="id" type="var">form_scope</span>.<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.Exports.:form_scope:'['_'eqType'_'of'_x_'for'_x_']'"><span class="id" type="notation">"</span></a>[ 'eqType' 'of' T 'for' C ]" := (@<a class="idref" href="Vbase.html#Equality.Exports.clone"><span class="id" type="definition">clone</span></a> <span class="id" type="var">T</span> <span class="id" type="var">C</span> <span class="id" type="var">_</span> <a class="idref" href="Vbase.html#Equality.Exports.idfun"><span class="id" type="definition">idfun</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#id"><span class="id" type="definition">id</span></a>)<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 0, <span class="id" type="var">format</span> "[ 'eqType' 'of' T 'for' C ]") : <span class="id" type="var">form_scope</span>.<br/> -<span class="id" type="keyword">Notation</span> <a name="Equality.Exports.:form_scope:'['_'eqType'_'of'_x_']'"><span class="id" type="notation">"</span></a>[ 'eqType' 'of' T ]" := (@<a class="idref" href="Vbase.html#Equality.Exports.clone"><span class="id" type="definition">clone</span></a> <span class="id" type="var">T</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#id"><span class="id" type="definition">id</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#id"><span class="id" type="definition">id</span></a>)<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 0, <span class="id" type="var">format</span> "[ 'eqType' 'of' T ]") : <span class="id" type="var">form_scope</span>.<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#Exports"><span class="id" type="module">Exports</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="Vbase.html#"><span class="id" type="module">Equality</span></a>.<br/> -<span class="id" type="keyword">Export</span> <span class="id" type="var">Equality.Exports</span>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="eq_op"><span class="id" type="definition">eq_op</span></a> <span class="id" type="var">T</span> := <a class="idref" href="Vbase.html#Equality.op"><span class="id" type="projection">Equality.op</span></a> (<a class="idref" href="Vbase.html#Equality.class"><span class="id" type="definition">Equality.class</span></a> <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>).<br/> -<span class="id" type="keyword">Implicit Arguments</span> <a class="idref" href="Vbase.html#eq_op"><span class="id" type="definition">eq_op</span></a> [[<span class="id" type="var">T</span>]].<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="eqE"><span class="id" type="lemma">eqE</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">T</span> <span class="id" type="var">x</span>, <a class="idref" href="Vbase.html#eq_op"><span class="id" type="definition">eq_op</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#Equality.op"><span class="id" type="projection">Equality.op</span></a> (<a class="idref" href="Vbase.html#Equality.class"><span class="id" type="definition">Equality.class</span></a> <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>) <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="eqP"><span class="id" type="lemma">eqP</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">T</span>, <a class="idref" href="Vbase.html#Equality.axiom"><span class="id" type="definition">Equality.axiom</span></a> (@<a class="idref" href="Vbase.html#eq_op"><span class="id" type="definition">eq_op</span></a> <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>).<br/> - <span class="id" type="keyword">Implicit Arguments</span> <a class="idref" href="Vbase.html#eqP"><span class="id" type="lemma">eqP</span></a> [<span class="id" type="var">T</span>].<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":bool_scope:x_'=='_x"><span class="id" type="notation">"</span></a>x == y" := (<a class="idref" href="Vbase.html#eq_op"><span class="id" type="definition">eq_op</span></a> <span class="id" type="var">x</span> <span class="id" type="var">y</span>)<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 70, <span class="id" type="keyword">no</span> <span class="id" type="keyword">associativity</span>) : <span class="id" type="var">bool_scope</span>.<br/> -<span class="id" type="keyword">Notation</span> <a name=":bool_scope:x_'=='_x_':>'_x"><span class="id" type="notation">"</span></a>x == y :> T" := (<a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">(</span></a><span class="id" type="var">x</span> : <span class="id" type="var">T</span><a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">(</span></a><span class="id" type="var">y</span> : <span class="id" type="var">T</span><a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">)</span></a>)<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 70, <span class="id" type="var">y</span> <span class="id" type="tactic">at</span> <span class="id" type="var">next</span> <span class="id" type="keyword">level</span>) : <span class="id" type="var">bool_scope</span>.<br/> -<span class="id" type="keyword">Notation</span> <a name=":bool_scope:x_'!='_x"><span class="id" type="notation">"</span></a>x != y" := (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> (<span class="id" type="var">x</span> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <span class="id" type="var">y</span>))<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 70, <span class="id" type="keyword">no</span> <span class="id" type="keyword">associativity</span>) : <span class="id" type="var">bool_scope</span>.<br/> -<span class="id" type="keyword">Notation</span> <a name=":bool_scope:x_'!='_x_':>'_x"><span class="id" type="notation">"</span></a>x != y :> T" := (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> (<span class="id" type="var">x</span> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x_':>'_x"><span class="id" type="notation">==</span></a> <span class="id" type="var">y</span> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x_':>'_x"><span class="id" type="notation">:></span></a> <span class="id" type="var">T</span>))<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 70, <span class="id" type="var">y</span> <span class="id" type="tactic">at</span> <span class="id" type="var">next</span> <span class="id" type="keyword">level</span>) : <span class="id" type="var">bool_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__internal_eqP"><span class="id" type="lemma">vlib__internal_eqP</span></a> : <br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <a class="idref" href="Vbase.html#Equality.Exports.eqType"><span class="id" type="abbreviation">eqType</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">y</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>), <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a>) (<a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="neqP"><span class="id" type="lemma">neqP</span></a> : <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <a class="idref" href="Vbase.html#Equality.Exports.eqType"><span class="id" type="abbreviation">eqType</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">y</span>: <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>), <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> (<a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<>'_x"><span class="id" type="notation"><></span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a>) (<a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'!='_x"><span class="id" type="notation">!=</span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="beq_refl"><span class="id" type="lemma">beq_refl</span></a> : <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span> : <a class="idref" href="Vbase.html#Equality.Exports.eqType"><span class="id" type="abbreviation">eqType</span></a>) (<span class="id" type="var">x</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>), <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="beq_sym"><span class="id" type="lemma">beq_sym</span></a> : <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span> : <a class="idref" href="Vbase.html#Equality.Exports.eqType"><span class="id" type="abbreviation">eqType</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">y</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>), <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Hint Resolve</span> <a class="idref" href="Vbase.html#beq_refl"><span class="id" type="lemma">beq_refl</span></a> : <span class="id" type="var">vlib</span>.<br/> -<span class="id" type="keyword">Hint Rewrite</span> <a class="idref" href="Vbase.html#beq_refl"><span class="id" type="lemma">beq_refl</span></a> : <span class="id" type="var">vlib_trivial</span>.<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name="eqxx"><span class="id" type="abbreviation">eqxx</span></a> := <a class="idref" href="Vbase.html#beq_refl"><span class="id" type="lemma">beq_refl</span></a>.<br/> - -<br/> -<span class="comment">(*<br/> -Implicit Arguments idP <span class="inlinecode"><span class="id" type="var">b1</span></span>.<br/> -Implicit Arguments idPn <span class="inlinecode"><span class="id" type="var">b1</span></span>.<br/> -Implicit Arguments negP <span class="inlinecode"><span class="id" type="var">b1</span></span>.<br/> -Implicit Arguments negn <span class="inlinecode"><span class="id" type="var">b1</span></span>.<br/> -Implicit Arguments negPf <span class="inlinecode"><span class="id" type="var">b1</span></span>.<br/> -Implicit Arguments andP <span class="inlinecode"><span class="id" type="var">b1</span></span> <span class="inlinecode"><span class="id" type="var">b2</span></span>.<br/> -Implicit Arguments orP <span class="inlinecode"><span class="id" type="var">b1</span></span> <span class="inlinecode"><span class="id" type="var">b2</span></span>.<br/> -Implicit Arguments nandP <span class="inlinecode"><span class="id" type="var">b1</span></span> <span class="inlinecode"><span class="id" type="var">b2</span></span>.<br/> -Implicit Arguments norP <span class="inlinecode"><span class="id" type="var">b1</span></span> <span class="inlinecode"><span class="id" type="var">b2</span></span>.<br/> -*)</span><br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab8"></a><h1 class="section">Basic simplification tactics</h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__negb_rewrite"><span class="id" type="lemma">vlib__negb_rewrite</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">b</span>, <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> <a class="idref" href="Vbase.html#b"><span class="id" type="variable">b</span></a> -> <a class="idref" href="Vbase.html#b"><span class="id" type="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__andb_split"><span class="id" type="lemma">vlib__andb_split</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">b1</span> <span class="id" type="var">b2</span>, <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> -> <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__nandb_split"><span class="id" type="lemma">vlib__nandb_split</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">b1</span> <span class="id" type="var">b2</span>, <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__orb_split"><span class="id" type="lemma">vlib__orb_split</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">b1</span> <span class="id" type="var">b2</span>, <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> -> <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__norb_split"><span class="id" type="lemma">vlib__norb_split</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">b1</span> <span class="id" type="var">b2</span>, <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> -> <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__eqb_split"><span class="id" type="lemma">vlib__eqb_split</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">b1</span> <span class="id" type="var">b2</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>, (<a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> -> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a>) -> (<a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a> -> <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a>) -> <a class="idref" href="Vbase.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#b2"><span class="id" type="variable">b2</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="vlib__beq_rewrite"><span class="id" type="lemma">vlib__beq_rewrite</span></a> : <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span> : <a class="idref" href="Vbase.html#Equality.Exports.eqType"><span class="id" type="abbreviation">eqType</span></a>) (<span class="id" type="var">x1</span> <span class="id" type="var">x2</span> : <a class="idref" href="Vbase.html#T"><span class="id" type="variable">T</span></a>), <a class="idref" href="Vbase.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <a class="idref" href="Vbase.html#x2"><span class="id" type="variable">x2</span></a> -> <a class="idref" href="Vbase.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="Vbase.html#x2"><span class="id" type="variable">x2</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -Set up for basic simplification: database of reflection lemmas -</div> -<div class="code"> - -<br/> - -<br/> -<span class="id" type="keyword">Hint Resolve</span> <a class="idref" href="Vbase.html#andP"><span class="id" type="lemma">andP</span></a> <a class="idref" href="Vbase.html#orP"><span class="id" type="lemma">orP</span></a> <a class="idref" href="Vbase.html#nandP"><span class="id" type="lemma">nandP</span></a> <a class="idref" href="Vbase.html#norP"><span class="id" type="lemma">norP</span></a> <a class="idref" href="Vbase.html#negP"><span class="id" type="lemma">negP</span></a> <a class="idref" href="Vbase.html#vlib__internal_eqP"><span class="id" type="lemma">vlib__internal_eqP</span></a> <a class="idref" href="Vbase.html#neqP"><span class="id" type="lemma">neqP</span></a> : <span class="id" type="var">vlib_refl</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span> :=<br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">X</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span><br/> - (<span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span> | [|- ?<span class="id" type="var">P</span> ] => <span class="id" type="tactic">set</span> (<span class="id" type="var">X</span> := <span class="id" type="var">P</span>) <span class="id" type="keyword">end</span>);<br/> - <span class="id" type="tactic">injection</span> <span class="id" type="var">H</span>;<br/> - <span class="comment">(* (lazymatch goal with | <span class="inlinecode"></span> <span class="inlinecode">|-</span> <span class="inlinecode"><span class="id" type="var">f</span></span> <span class="inlinecode"><span class="id" type="var">_</span></span> <span class="inlinecode">=</span> <span class="inlinecode"><span class="id" type="var">f</span></span> <span class="inlinecode"><span class="id" type="var">_</span></span> <span class="inlinecode">-></span> <span class="inlinecode"><span class="id" type="var">_</span></span> => fail | _ => idtac end); <br/> - <span class="comment">(* Previous statement no longer necessary in 8.4 *)</span> *)</span><br/> - <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intros</span>; <span class="id" type="tactic">subst</span> <span class="id" type="var">X</span>;<br/> - <span class="id" type="tactic">try</span> <span class="id" type="tactic">subst</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">vlib__clarify1</span> :=<br/> - <span class="id" type="tactic">try</span> <span class="id" type="tactic">subst</span>;<br/> - <span class="id" type="tactic">repeat</span> <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | [<span class="id" type="var">H</span>: <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#andb"><span class="id" type="definition">andb</span></a> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span>] => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">H'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__andb_split"><span class="id" type="lemma">vlib__andb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H'</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#negb"><span class="id" type="definition">negb</span></a> ?<span class="id" type="var">x</span>) |- <span class="id" type="var">_</span>] => <span class="id" type="tactic">rewrite</span> (<a class="idref" href="Vbase.html#vlib__negb_rewrite"><span class="id" type="lemma">vlib__negb_rewrite</span></a> <span class="id" type="var">H</span>) <span class="id" type="keyword">in</span> *<br/> - | [<span class="id" type="var">H</span>: <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> ?<span class="id" type="var">x</span> |- <span class="id" type="var">_</span>] => <span class="id" type="tactic">rewrite</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> *<br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#true"><span class="id" type="constructor">true</span></a> |- <span class="id" type="var">_</span>] => <span class="id" type="tactic">rewrite</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> *<br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> |- <span class="id" type="var">_</span>] => <span class="id" type="tactic">rewrite</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> *<br/> - | [<span class="id" type="var">H</span>: <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<span class="id" type="var">_</span> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span>] => <span class="id" type="tactic">generalize</span> (<a class="idref" href="Vbase.html#vlib__beq_rewrite"><span class="id" type="lemma">vlib__beq_rewrite</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intro</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: @<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#existT"><span class="id" type="constructor">existT</span></a> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> @<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#existT"><span class="id" type="constructor">existT</span></a> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="tactic">apply</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Logic.ProofIrrelevance.html#ProofIrrelevanceTheory.EqdepTheory.inj_pair2"><span class="id" type="lemma">inj_pair2</span></a> <span class="id" type="keyword">in</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">try</span> <span class="id" type="tactic">subst</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - | [<span class="id" type="var">H</span>: ?<span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">f</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span>] => <span class="id" type="var">vlib__complaining_inj</span> <span class="id" type="var">f</span> <span class="id" type="var">H</span><br/> - <span class="id" type="keyword">end</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>.<br/> - -<br/> -</div> - -<div class="doc"> -Perform injections & discriminations on all hypotheses -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">clarify</span> :=<br/> - <span class="id" type="var">vlib__clarify1</span>;<br/> - <span class="id" type="tactic">repeat</span> <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H1</span>: ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">_</span>, <span class="id" type="var">H2</span>: ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">rewrite</span> <span class="id" type="var">H2</span> <span class="id" type="keyword">in</span> <span class="id" type="var">H1</span>; <span class="id" type="tactic">discriminate</span><br/> - | <span class="id" type="var">H1</span>: ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">_</span>, <span class="id" type="var">H2</span>: ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">_</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">rewrite</span> <span class="id" type="var">H2</span> <span class="id" type="keyword">in</span> <span class="id" type="var">H1</span>; <span class="id" type="var">vlib__clarify1</span><br/> - <span class="id" type="keyword">end</span>; <span class="comment">(* autorewrite with vlib_trivial; *)</span> <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>.<br/> - -<br/> -</div> - -<div class="doc"> -Kill simple goals that require up to two econstructor calls. -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">vauto</span> :=<br/> - (<span class="id" type="var">clarify</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">edone</span>; <br/> - <span class="id" type="tactic">try</span> (<span class="id" type="tactic">econstructor</span> (<span class="id" type="tactic">solve</span> [<span class="id" type="var">edone</span> | <span class="id" type="tactic">econstructor</span> (<span class="id" type="var">edone</span>) ]))).<br/> - -<br/> -</div> - -<div class="doc"> -Check that the hypothesis <span class="inlinecode"><span class="id" type="var">id</span></span> is defined. This is useful to make sure that - an <span class="inlinecode"><span class="id" type="tactic">assert</span></span> has been completely finished. -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">end_assert</span> <span class="id" type="var">id</span> := <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">m</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span> <br/> - <span class="id" type="tactic">pose</span> (<span class="id" type="var">m</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#refl_equal"><span class="id" type="abbreviation">refl_equal</span></a> <span class="id" type="var">id</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">m</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">inv</span> <span class="id" type="var">x</span> := <span class="id" type="tactic">inversion</span> <span class="id" type="var">x</span>; <span class="id" type="var">clarify</span>.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">simpls</span> := <span class="id" type="tactic">simpl</span> <span class="id" type="keyword">in</span> *; <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">ins</span> := <span class="id" type="tactic">simpl</span> <span class="id" type="keyword">in</span> *; <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>; <span class="id" type="tactic">intros</span>.<br/> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "case_eq" <span class="id" type="keyword">constr</span>(<span class="id" type="var">x</span>) := <span class="id" type="var">case_eq</span> (<span class="id" type="var">x</span>).<br/> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "case_eq" <span class="id" type="keyword">constr</span>(<span class="id" type="var">x</span>) "as" <span class="id" type="var">simple_intropattern</span>(<span class="id" type="var">H</span>) :=<br/> - <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span> <span class="id" type="keyword">as</span> [] <span class="id" type="var">_eqn</span>: <span class="id" type="var">H</span>; <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">vlib__clarsimp1</span> :=<br/> - <span class="id" type="var">clarify</span>; (<span class="id" type="tactic">autorewrite</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_trivial</span> <span class="id" type="var">vlib</span> <span class="id" type="keyword">in</span> * ); <br/> - (<span class="id" type="tactic">autorewrite</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_trivial</span> <span class="id" type="keyword">in</span> * ); <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>;<br/> - <span class="id" type="var">clarify</span>; <span class="id" type="tactic">auto</span> 1 <span class="id" type="keyword">with</span> <span class="id" type="var">vlib</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">clarsimp</span> := <span class="id" type="tactic">intros</span>; <span class="id" type="tactic">simpl</span> <span class="id" type="keyword">in</span> *; <span class="id" type="var">vlib__clarsimp1</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">autos</span> := <span class="id" type="var">clarsimp</span>; <span class="id" type="tactic">auto</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib</span>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -Destruct but give useful names -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">A</span> (<span class="id" type="var">P</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#unit"><span class="id" type="inductive">unit</span></a> -> <a class="idref" href="Vbase.html#A"><span class="id" type="variable">A</span></a>) : <a class="idref" href="Vbase.html#A"><span class="id" type="variable">A</span></a> := <a class="idref" href="Vbase.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#tt"><span class="id" type="constructor">tt</span></a>.<br/> - -<br/> -<span class="comment">(*Notation "<< x : t >>" := (NW (fun x => t)) (at level 80, x ident, no associativity).<br/> -Notation "<< t >>" := (NW (fun _ => t)) (at level 79, no associativity).*)</span><br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">unnw</span> := <span class="id" type="tactic">unfold</span> <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="keyword">in</span> *.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">rednw</span> := <span class="id" type="tactic">red</span>; <span class="id" type="var">unnw</span>.<br/> - -<br/> -<span class="id" type="keyword">Hint Unfold</span> <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a>.<br/> - -<br/> -</div> - -<div class="doc"> -Destruct, but no case split -</div> -<div class="code"> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">desc</span> :=<br/> - <span class="id" type="tactic">repeat</span> <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H</span>: <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<span class="id" type="var">_</span> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> => <span class="id" type="tactic">generalize</span> (<a class="idref" href="Vbase.html#vlib__beq_rewrite"><span class="id" type="lemma">vlib__beq_rewrite</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intro</span> <span class="id" type="var">H</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">y</span> => <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">x</span> <span class="id" type="keyword">in</span> <span class="id" type="keyword">let</span> <span class="id" type="var">y'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">y</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">y'</span>]; <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">?</span></a><span class="id" type="var">p</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">x</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">H</span>]<br/> - | <span class="id" type="var">H</span> : ?<span class="id" type="var">p</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">?</span></a><span class="id" type="var">q</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">y'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">y'</span>];<br/> - <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">x'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span>;<br/> - <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">H'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__andb_split"><span class="id" type="lemma">vlib__andb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H</span> <span class="id" type="var">H'</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <span class="id" type="var">_</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">H'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__norb_split"><span class="id" type="lemma">vlib__norb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H</span> <span class="id" type="var">H'</span><br/> - | <span class="id" type="var">H</span> : ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">x</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span><br/> -<br/> -<span class="comment">(* | H: is_true ?x |- _ => eapply elimT in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span><br/> - | H: ?x = true |- _ => eapply elimT in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span><br/> - | H: ?x = false |- _ => eapply elimFn in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span><br/> - | H: ?x = false |- _ => eapply elimF in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span> *)</span><br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">des</span> :=<br/> - <span class="id" type="tactic">repeat</span> <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H</span>: <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<span class="id" type="var">_</span> <a class="idref" href="Vbase.html#:bool_scope:x_'=='_x"><span class="id" type="notation">==</span></a> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> => <span class="id" type="tactic">generalize</span> (<a class="idref" href="Vbase.html#vlib__beq_rewrite"><span class="id" type="lemma">vlib__beq_rewrite</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intro</span> <span class="id" type="var">H</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">y</span> => <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">x</span> <span class="id" type="keyword">in</span> <span class="id" type="keyword">let</span> <span class="id" type="var">y'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">y</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">y'</span>]; <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">?</span></a><span class="id" type="var">p</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">x</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">H</span>]<br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">exists2</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">?</span></a><span class="id" type="var">p</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">?</span></a><span class="id" type="var">q</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">x</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">H1</span> <span class="id" type="var">H2</span>]<br/> - | <span class="id" type="var">H</span> : ?<span class="id" type="var">p</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">?</span></a><span class="id" type="var">q</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">y'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">y'</span>];<br/> - <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">x'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span>;<br/> - <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">H'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__andb_split"><span class="id" type="lemma">vlib__andb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H</span> <span class="id" type="var">H'</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <span class="id" type="var">_</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">H'</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">in</span> <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__norb_split"><span class="id" type="lemma">vlib__norb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H</span> <span class="id" type="var">H'</span><br/> - | <span class="id" type="var">H</span> : ?<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">x</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span><br/> -<span class="comment">(* | H: is_true ?x |- _ => eapply elimT in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span><br/> - | H: ?x = true |- _ => eapply elimT in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span><br/> - | H: ?x = false |- _ => eapply elimFn in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span><br/> - | H: ?x = false |- _ => eapply elimF in H; <span class="inlinecode">|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]</span> *)</span><br/> - | <span class="id" type="var">H</span> : ?<span class="id" type="var">p</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation"><-></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">?</span></a><span class="id" type="var">q</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">y'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">fresh</span> <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> <span class="id" type="var">y'</span>];<br/> - <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">unfold</span> <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="tactic">at</span> 1 <span class="id" type="keyword">in</span> <span class="id" type="var">x'</span>; <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span>;<br/> - <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">unfold</span> <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="tactic">at</span> 1 <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span>; <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">x'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span><br/> - | <span class="id" type="var">H</span> : ?<span class="id" type="var">p</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">?</span></a><span class="id" type="var">q</span> |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">x'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">y'</span> := <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> (<span class="id" type="keyword">fun</span> <span class="id" type="var">z</span> => <span class="id" type="var">_</span>) => <span class="id" type="tactic">fresh</span> <span class="id" type="var">z</span> | <span class="id" type="var">_</span> => <span class="id" type="var">H</span> <span class="id" type="keyword">end</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">destruct</span> <span class="id" type="var">H</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">x'</span> | <span class="id" type="var">y'</span>];<br/> - [ <span class="id" type="keyword">match</span> <span class="id" type="var">p</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">x'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span><br/> - | <span class="id" type="keyword">match</span> <span class="id" type="var">q</span> <span class="id" type="keyword">with</span> | <a class="idref" href="Vbase.html#NW"><span class="id" type="definition">NW</span></a> <span class="id" type="var">_</span> => <span class="id" type="tactic">red</span> <span class="id" type="keyword">in</span> <span class="id" type="var">y'</span> | <span class="id" type="var">_</span> => <span class="id" type="tactic">idtac</span> <span class="id" type="keyword">end</span>]<br/> - | <span class="id" type="var">H</span> : <a class="idref" href="Vbase.html#is_true"><span class="id" type="definition">is_true</span></a> (<span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <span class="id" type="var">_</span>) |- <span class="id" type="var">_</span> => <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__orb_split"><span class="id" type="lemma">vlib__orb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intro</span> <span class="id" type="var">H</span><br/> - | <span class="id" type="var">H</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="var">_</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">case</span> (<a class="idref" href="Vbase.html#vlib__nandb_split"><span class="id" type="lemma">vlib__nandb_split</span></a> <span class="id" type="var">H</span>); <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">intro</span> <span class="id" type="var">H</span><br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">des_if_asm</span> :=<br/> - <span class="id" type="var">clarify</span>;<br/> - <span class="id" type="tactic">repeat</span> <br/> - <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span> <br/> - | <span class="id" type="var">H</span>: <span class="id" type="keyword">context</span>[ <span class="id" type="keyword">match</span> ?<span class="id" type="var">x</span> <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span> ] |- <span class="id" type="var">_</span> => <br/> - <span class="id" type="keyword">match</span> (<span class="id" type="var">type</span> <span class="id" type="var">of</span> <span class="id" type="var">x</span>) <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">+</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> => <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span>; <span class="id" type="var">clarify</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a> => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">P</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">evar</span>(<span class="id" type="var">P</span>: <span class="id" type="keyword">Prop</span>);<br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">Heq</span>: <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <span class="id" type="var">P</span> <span class="id" type="var">x</span>) <span class="id" type="tactic">by</span> (<span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">trivial</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_refl</span>); <br/> - <span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">Heq</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">Heq</span>|<span class="id" type="var">Heq</span>]<br/> - | <span class="id" type="var">_</span> => <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span> <span class="id" type="keyword">as</span> [] <span class="id" type="var">_eqn</span>: <span class="id" type="var">Heq</span>; <span class="id" type="var">clarify</span><br/> - <span class="id" type="keyword">end</span> <br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">des_if_goal</span> :=<br/> - <span class="id" type="var">clarify</span>;<br/> - <span class="id" type="tactic">repeat</span> <br/> - <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span> <br/> - | |- <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">x</span> <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span>] => <br/> - <span class="id" type="keyword">match</span> (<span class="id" type="var">type</span> <span class="id" type="var">of</span> <span class="id" type="var">x</span>) <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">+</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> => <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span>; <span class="id" type="var">clarify</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a> => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">P</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">evar</span>(<span class="id" type="var">P</span>: <span class="id" type="keyword">Prop</span>);<br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">Heq</span>: <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <span class="id" type="var">P</span> <span class="id" type="var">x</span>) <span class="id" type="tactic">by</span> (<span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">trivial</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_refl</span>); <br/> - <span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">Heq</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">Heq</span>|<span class="id" type="var">Heq</span>]<br/> - | <span class="id" type="var">_</span> => <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span> <span class="id" type="keyword">as</span> [] <span class="id" type="var">_eqn</span>: <span class="id" type="var">Heq</span>; <span class="id" type="var">clarify</span><br/> - <span class="id" type="keyword">end</span> <br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">des_if</span> :=<br/> - <span class="id" type="var">clarify</span>;<br/> - <span class="id" type="tactic">repeat</span> <br/> - <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span> <br/> - | |- <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">x</span> <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span>] => <br/> - <span class="id" type="keyword">match</span> (<span class="id" type="var">type</span> <span class="id" type="var">of</span> <span class="id" type="var">x</span>) <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">+</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> => <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span>; <span class="id" type="var">clarify</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a> => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">P</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">evar</span>(<span class="id" type="var">P</span>: <span class="id" type="keyword">Prop</span>);<br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">Heq</span>: <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <span class="id" type="var">P</span> <span class="id" type="var">x</span>) <span class="id" type="tactic">by</span> (<span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">trivial</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_refl</span>); <br/> - <span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">Heq</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">Heq</span>|<span class="id" type="var">Heq</span>]<br/> - | <span class="id" type="var">_</span> => <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span> <span class="id" type="keyword">as</span> [] <span class="id" type="var">_eqn</span>: <span class="id" type="var">Heq</span>; <span class="id" type="var">clarify</span><br/> - <span class="id" type="keyword">end</span> <br/> - | <span class="id" type="var">H</span>: <span class="id" type="keyword">context</span>[ <span class="id" type="keyword">match</span> ?<span class="id" type="var">x</span> <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span> ] |- <span class="id" type="var">_</span> => <br/> - <span class="id" type="keyword">match</span> (<span class="id" type="var">type</span> <span class="id" type="var">of</span> <span class="id" type="var">x</span>) <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">+</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">{</span></a> <span class="id" type="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Specif.html#:type_scope:'{'_x_'}'_'+'_'{'_x_'}'"><span class="id" type="notation">}</span></a> => <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span>; <span class="id" type="var">clarify</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a> => <br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">P</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">evar</span>(<span class="id" type="var">P</span>: <span class="id" type="keyword">Prop</span>);<br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">Heq</span>: <a class="idref" href="Vbase.html#reflect"><span class="id" type="inductive">reflect</span></a> <span class="id" type="var">P</span> <span class="id" type="var">x</span>) <span class="id" type="tactic">by</span> (<span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">trivial</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_refl</span>); <br/> - <span class="id" type="tactic">subst</span> <span class="id" type="var">P</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">Heq</span> <span class="id" type="keyword">as</span> [<span class="id" type="var">Heq</span>|<span class="id" type="var">Heq</span>]<br/> - | <span class="id" type="var">_</span> => <span class="id" type="keyword">let</span> <span class="id" type="var">Heq</span> := <span class="id" type="tactic">fresh</span> "Heq" <span class="id" type="keyword">in</span> <span class="id" type="tactic">destruct</span> <span class="id" type="var">x</span> <span class="id" type="keyword">as</span> [] <span class="id" type="var">_eqn</span>: <span class="id" type="var">Heq</span>; <span class="id" type="var">clarify</span><br/> - <span class="id" type="keyword">end</span> <br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">des_eqrefl</span> :=<br/> - <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H</span>: <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">X</span> <span class="id" type="keyword">as</span> <span class="id" type="var">id</span> <span class="id" type="keyword">return</span> (<a class="idref" href="Vbase.html#id"><span class="id" type="variable">id</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">X</span> -> <span class="id" type="var">_</span>) <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a>] |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">EQ</span> := <span class="id" type="tactic">fresh</span> "EQ" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">id'</span> := <span class="id" type="tactic">fresh</span> "x" <span class="id" type="keyword">in</span><br/> - <span class="id" type="var">revert</span> <span class="id" type="var">H</span>;<br/> - <span class="id" type="tactic">generalize</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a> <span class="id" type="var">X</span>); <span class="id" type="tactic">generalize</span> <span class="id" type="var">X</span> <span class="id" type="tactic">at</span> 1 3;<br/> - <span class="id" type="tactic">intros</span> <span class="id" type="var">id'</span> <span class="id" type="var">EQ</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">id'</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H</span><br/> - | |- <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">X</span> <span class="id" type="keyword">as</span> <span class="id" type="var">id</span> <span class="id" type="keyword">return</span> (<a class="idref" href="Vbase.html#id"><span class="id" type="variable">id</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">?</span></a><span class="id" type="var">X</span> -> <span class="id" type="var">_</span>) <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a>] =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">EQ</span> := <span class="id" type="tactic">fresh</span> "EQ" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">id'</span> := <span class="id" type="tactic">fresh</span> "x" <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">generalize</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a> <span class="id" type="var">X</span>); <span class="id" type="tactic">generalize</span> <span class="id" type="var">X</span> <span class="id" type="tactic">at</span> 1 3;<br/> - <span class="id" type="tactic">intros</span> <span class="id" type="var">id'</span> <span class="id" type="var">EQ</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">id'</span><br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">desf_asm</span> := <span class="id" type="var">clarify</span>; <span class="id" type="var">des</span>; <span class="id" type="var">des_if_asm</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">desf</span> := <span class="id" type="var">clarify</span>; <span class="id" type="var">des</span>; <span class="id" type="var">des_if</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">clarassoc</span> := <span class="id" type="var">clarsimp</span>; <span class="id" type="tactic">autorewrite</span> <span class="id" type="keyword">with</span> <span class="id" type="var">vlib_trivial</span> <span class="id" type="var">vlib</span> <span class="id" type="var">vlibA</span> <span class="id" type="keyword">in</span> *; <span class="id" type="tactic">try</span> <span class="id" type="var">done</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">vlib__hacksimp1</span> :=<br/> - <span class="id" type="var">clarsimp</span>;<br/> - <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H</span>: <span class="id" type="var">_</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">rewrite</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="var">clarsimp</span><br/> - |<span class="id" type="tactic">rewrite</span> <- <span class="id" type="var">H</span>; <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="var">clarsimp</span>]<br/> - | <span class="id" type="var">_</span> => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">f_equal</span>; <span class="id" type="var">clarsimp</span>]<br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">hacksimp</span> :=<br/> - <span class="id" type="var">clarsimp</span>;<br/> - <span class="id" type="tactic">try</span> <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H</span>: <span class="id" type="var">_</span> |- <span class="id" type="var">_</span> => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">rewrite</span> <span class="id" type="var">H</span>; <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="var">clarsimp</span><br/> - |<span class="id" type="tactic">rewrite</span> <- <span class="id" type="var">H</span>; <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>; <span class="id" type="var">clarsimp</span>]<br/> - | |- <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">p</span> <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span>] => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">destruct</span> <span class="id" type="var">p</span>; <span class="id" type="var">vlib__hacksimp1</span>]<br/> - | <span class="id" type="var">_</span> => <span class="id" type="tactic">solve</span> [<span class="id" type="tactic">f_equal</span>; <span class="id" type="var">clarsimp</span>]<br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab9"></a><h2 class="section">Delineating cases in proofs</h2> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -</div> - -<div class="doc"> -Named case tactics (taken from Libtactics) -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "assert_eq" <span class="id" type="var">ident</span>(<span class="id" type="var">x</span>) <span class="id" type="keyword">constr</span>(<span class="id" type="var">v</span>) :=<br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">H</span> := <span class="id" type="tactic">fresh</span> <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="var">v</span>) <span class="id" type="keyword">as</span> <span class="id" type="var">H</span> <span class="id" type="tactic">by</span> <span class="id" type="tactic">reflexivity</span>;<br/> - <span class="id" type="tactic">clear</span> <span class="id" type="var">H</span>.<br/> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "Case_aux" <span class="id" type="var">ident</span>(<span class="id" type="var">x</span>) <span class="id" type="keyword">constr</span>(<span class="id" type="var">name</span>) :=<br/> - <span class="id" type="tactic">first</span> [<br/> - <span class="id" type="tactic">set</span> (<span class="id" type="var">x</span> := <span class="id" type="var">name</span>); <span class="id" type="tactic">move</span> <span class="id" type="var">x</span> <span class="id" type="tactic">at</span> <span class="id" type="var">top</span><br/> - | <span class="id" type="var">assert_eq</span> <span class="id" type="var">x</span> <span class="id" type="var">name</span><br/> - | <span class="id" type="tactic">fail</span> 1 "because we are working on a different case." ].<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">Case</span> <span class="id" type="var">name</span> := <span class="id" type="var">Case_aux</span> <span class="id" type="tactic">case</span> <span class="id" type="var">name</span>.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">SCase</span> <span class="id" type="var">name</span> := <span class="id" type="var">Case_aux</span> <span class="id" type="var">subcase</span> <span class="id" type="var">name</span>.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">SSCase</span> <span class="id" type="var">name</span> := <span class="id" type="var">Case_aux</span> <span class="id" type="var">subsubcase</span> <span class="id" type="var">name</span>.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">SSSCase</span> <span class="id" type="var">name</span> := <span class="id" type="var">Case_aux</span> <span class="id" type="var">subsubsubcase</span> <span class="id" type="var">name</span>.<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">SSSSCase</span> <span class="id" type="var">name</span> := <span class="id" type="var">Case_aux</span> <span class="id" type="var">subsubsubsubcase</span> <span class="id" type="var">name</span>.<br/> - -<br/> -</div> - -<div class="doc"> -Lightweight case tactics (without names) -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "--" <span class="id" type="var">tactic</span>(<span class="id" type="var">c</span>) :=<br/> - <span class="id" type="tactic">first</span> [<br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">WithinCaseM</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#True"><span class="id" type="inductive">True</span></a>); <span class="id" type="tactic">move</span> <span class="id" type="var">WithinCaseM</span> <span class="id" type="tactic">at</span> <span class="id" type="var">top</span><br/> - | <span class="id" type="tactic">fail</span> 1 "because we are working on a different case." ]; <span class="id" type="var">c</span>.<br/> - -<br/> -<span class="id" type="keyword">Tactic Notation</span> "++" <span class="id" type="var">tactic</span>(<span class="id" type="var">c</span>) :=<br/> - <span class="id" type="tactic">first</span> [<br/> - <span class="id" type="tactic">assert</span> (<span class="id" type="var">WithinCaseP</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#True"><span class="id" type="inductive">True</span></a>); <span class="id" type="tactic">move</span> <span class="id" type="var">WithinCaseP</span> <span class="id" type="tactic">at</span> <span class="id" type="var">top</span><br/> - | <span class="id" type="tactic">fail</span> 1 "because we are working on a different case." ]; <span class="id" type="var">c</span>.<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab10"></a><h2 class="section">Exploiting a hypothesis</h2> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -</div> - -<div class="doc"> -Exploit an assumption (adapted from CompCert). -</div> -<div class="code"> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">exploit</span> <span class="id" type="var">x</span> :=<br/> - <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>)<br/> - || <span class="id" type="tactic">refine</span> ((<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <a class="idref" href="Vbase.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="Vbase.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">_</span>) <span class="id" type="var">_</span>).<br/> - -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -</div> - -<div class="doc"> -<a name="lab11"></a><h1 class="section">Induction</h1> - -</div> -<div class="code"> -<span class="comment">(* ************************************************************************** *)</span><br/> - -<br/> -<span class="comment">(*<br/> -Tactic Notation "induction" "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident_list</span>(<span class="id" type="var">y</span>)</span> <span class="inlinecode">"</span>" ident(x) :=<br/> - first <span class="inlinecode"></span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode"></span>.<br/> -<br/> -Tactic Notation "induction" "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident_list</span>(<span class="id" type="var">y</span>)</span> <span class="inlinecode">"</span>" ident(x) "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">z</span>)</span> <span class="inlinecode">"</span>" :=<br/> - first <span class="inlinecode"></span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span></span> <span class="inlinecode"></span>.<br/> -<br/> -Tactic Notation "induction" "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident_list</span>(<span class="id" type="var">y</span>)</span> <span class="inlinecode">"</span>" ident(x) "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">z</span>)</span> <span class="inlinecode"><span class="id" type="var">ident</span></span> <span class="inlinecode">(<span class="id" type="var">w</span>)</span> <span class="inlinecode">"</span>" :=<br/> - first <span class="inlinecode"></span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span>,</span> <span class="inlinecode"><span class="id" type="var">w</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span>,</span> <span class="inlinecode"><span class="id" type="var">w</span></span> <span class="inlinecode"></span>.<br/> -<br/> -<span class="comment">(** Versions with hacksimp *)</span><br/> -<br/> -Tactic Notation "induct" ident(x) := induction x; hacksimp.<br/> -<br/> -Tactic Notation "induct" ident(x) "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">z</span>)</span> <span class="inlinecode">"</span>" := <br/> - induction x; destruct z; hacksimp.<br/> -<br/> -Tactic Notation "induct" ident(x) "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">z</span>)</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">w</span>)</span> <span class="inlinecode">"</span>" := <br/> - induction x; destruct z, w; hacksimp.<br/> -<br/> -Tactic Notation "induct" "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident_list</span>(<span class="id" type="var">y</span>)</span> <span class="inlinecode">"</span>" ident(x) :=<br/> - first <span class="inlinecode"></span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="var">hacksimp</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="var">hacksimp</span></span> <span class="inlinecode"></span>.<br/> -<br/> -Tactic Notation "induct" "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident_list</span>(<span class="id" type="var">y</span>)</span> <span class="inlinecode">"</span>" ident(x) "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">z</span>)</span> <span class="inlinecode">"</span>" :=<br/> - first <span class="inlinecode"></span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span>;</span> <span class="inlinecode"><span class="id" type="var">hacksimp</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span>;</span> <span class="inlinecode"><span class="id" type="var">hacksimp</span></span> <span class="inlinecode"></span>.<br/> -<br/> -Tactic Notation "induct" "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident_list</span>(<span class="id" type="var">y</span>)</span> <span class="inlinecode">"</span>" ident(x) "<span class="inlinecode">"</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">z</span>)</span> <span class="inlinecode"><span class="id" type="var">ident</span>(<span class="id" type="var">w</span>)</span> <span class="inlinecode">"</span>" :=<br/> - first <span class="inlinecode"></span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span>,</span> <span class="inlinecode"><span class="id" type="var">w</span>;</span> <span class="inlinecode"><span class="id" type="var">hacksimp</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode">(<span class="id" type="tactic">intros</span></span> <span class="inlinecode"><span class="id" type="tactic">until</span></span> <span class="inlinecode"><span class="id" type="var">x</span>);</span> <span class="inlinecode"><span class="id" type="var">revert</span></span> <span class="inlinecode"><span class="id" type="var">y</span>;</span> <span class="inlinecode"><span class="id" type="tactic">induction</span></span> <span class="inlinecode"><span class="id" type="var">x</span>;</span> <span class="inlinecode"><span class="id" type="tactic">destruct</span></span> <span class="inlinecode"><span class="id" type="var">z</span>,</span> <span class="inlinecode"><span class="id" type="var">w</span>;</span> <span class="inlinecode"><span class="id" type="var">hacksimp</span></span> <span class="inlinecode"></span>.<br/> -<br/> -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<span class="comment">(** * Views *)</span><br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<br/> -Ltac vlib__apply_refl :=<br/> - intros;<br/> - match goal with <br/> - | |- is_true ?p => eapply introT; <span class="inlinecode"><span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]|</span><br/> - | |- ?p = true => eapply introT; <span class="inlinecode"><span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]|</span><br/> - | |- ?p = false => eapply introFn; <span class="inlinecode"><span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]|</span><br/> - | |- ?p = false => eapply introF; <span class="inlinecode"><span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]|</span><br/> - | |- _ => red; vlib__apply_refl<br/> - end. <br/> -<br/> -Tactic Notation "apply" "/" := vlib__apply_refl.<br/> -<br/> -Tactic Notation "apply" "/" constr(X) :=<br/> - first <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span></span> <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimT</span>;</span> <span class="inlinecode">[<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>|]</span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">introT</span>;</span> <span class="inlinecode">[<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>|]</span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">introFn</span>;</span> <span class="inlinecode">[<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>|]</span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">introF</span>;</span> <span class="inlinecode">[<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>|]</span>.<br/> -<br/> -Tactic Notation "split" "/" := <br/> - first <span class="inlinecode"><span class="id" type="tactic">split</span></span> <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">hnf</span>;</span> <span class="inlinecode"><span class="id" type="tactic">intros</span>;</span> <span class="inlinecode"><span class="id" type="tactic">apply</span>/</span> <span class="inlinecode">;</span> <span class="inlinecode"><span class="id" type="tactic">split</span></span> - <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">try</span></span> <span class="inlinecode"><span class="id" type="tactic">red</span>;</span> <span class="inlinecode"><span class="id" type="tactic">intros</span>;</span> <span class="inlinecode"><span class="id" type="tactic">apply</span></span> <span class="inlinecode"><span class="id" type="var">vlib__eqb_split</span></span>.<br/> -<br/> -<span class="comment">(** apply in assumption *)</span><br/> -<br/> -Ltac vlib__apply_refl_in H :=<br/> - first <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimT</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span>;</span> <span class="inlinecode">[|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]]</span> - <span class="inlinecode">|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimFn</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span>;</span> <span class="inlinecode">[|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]]</span> - <span class="inlinecode">|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimF</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span>;</span> <span class="inlinecode">[|<span class="id" type="tactic">solve</span></span> <span class="inlinecode">[<span class="id" type="tactic">trivial</span></span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="var">vlib_refl</span>]]</span>.<br/> -<br/> -Ltac vlib__apply_with_in X H :=<br/> - first <span class="inlinecode"><span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span></span> - <span class="inlinecode">|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimT</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span>;</span> <span class="inlinecode">[|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>]</span> - <span class="inlinecode">|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimFn</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span>;</span> <span class="inlinecode">[|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>]</span> - <span class="inlinecode">|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">elimF</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">H</span>;</span> <span class="inlinecode">[|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">X</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>]</span>.<br/> -<br/> -Tactic Notation "apply" "/" "in" hyp(H) := vlib__apply_refl_in H.<br/> -<br/> -Tactic Notation "apply" "/" constr(X) "in" hyp(H) := vlib__apply_with_in X H.<br/> -<br/> -<span class="comment">(** move (apply to top of goal) *)</span><br/> -<br/> -Ltac vlib__move_refl := let top := fresh in intro top; vlib__apply_refl_in top; revert top. <br/> -Ltac vlib__move_with X := let top := fresh in intro top; vlib__apply_with_in X top; revert top. <br/> -<br/> -Tactic Notation "move" "=>" simple_intropattern_list(L)<br/> - := intros L.<br/> -<br/> -Tactic Notation "move" ":" ident_list(Y)<br/> - := revert Y.<br/> -Tactic Notation "move" ":" ident_list(Y) "=>" simple_intropattern_list(L)<br/> - := revert Y; intros L.<br/> -<br/> -Tactic Notation "move" "/"<br/> - := vlib__move_refl.<br/> -Tactic Notation "move" "/" ":" ident_list(Y) <br/> - := revert Y; vlib__move_refl.<br/> -Tactic Notation "move" "/" "=>" simple_intropattern_list(L) <br/> - := vlib__move_refl; intros L.<br/> -Tactic Notation "move" "/" ":" ident_list(Y) "=>" simple_intropattern_list(L) <br/> - := revert Y; vlib__move_refl; intros L.<br/> -<br/> -Tactic Notation "move" "/" constr(X) ident_list(Y)<br/> - := revert Y; vlib__move_with X.<br/> -Tactic Notation "move" "/" constr(X) ident_list(Y) "=>" simple_intropattern_list(L)<br/> - := revert Y; vlib__move_with X; intros L.<br/> -Tactic Notation "move" "/" constr(X) ":" ident_list(Y)<br/> - := revert Y; vlib__move_with X.<br/> -Tactic Notation "move" "/" constr(X) ":" ident_list(Y) "=>" simple_intropattern_list(L)<br/> - := revert Y; vlib__move_with X; intros L.<br/> -<br/> -<br/> -<span class="comment">(** case *)</span><br/> -<br/> -Ltac vlib__case_plain<br/> - := let top := fresh in intro top; case top; clear top.<br/> -Ltac vlib__case_refl<br/> - := let top := fresh in intro top; vlib__apply_refl_in top; case top; clear top. <br/> -Ltac vlib__case_with X <br/> - := let top := fresh in intro top; vlib__apply_with_in X top; case top; clear top. <br/> -<br/> -Tactic Notation "case" "=>" simple_intropattern_list(L)<br/> - := vlib__case_plain; intros L.<br/> -<br/> -Tactic Notation "case" ":" ident_list(Y)<br/> - := revert Y; vlib__case_plain.<br/> -Tactic Notation "case" ":" ident_list(Y) "=>" simple_intropattern_list(L)<br/> - := revert Y; vlib__case_plain; intros L.<br/> -<br/> -Tactic Notation "case" "/"<br/> - := vlib__case_refl.<br/> -Tactic Notation "case" "/" ":" ident_list(Y) <br/> - := revert Y; vlib__case_refl.<br/> -Tactic Notation "case" "/" "=>" simple_intropattern_list(L) <br/> - := vlib__case_refl; intros L.<br/> -Tactic Notation "case" "/" ":" ident_list(Y) "=>" simple_intropattern_list(L) <br/> - := revert Y; vlib__case_refl; intros L.<br/> -<br/> -Tactic Notation "case" "/" constr(X) ident_list(Y)<br/> - := revert Y; vlib__case_with X.<br/> -Tactic Notation "case" "/" constr(X) ident_list(Y) "=>" simple_intropattern_list(L)<br/> - := revert Y; vlib__case_with X; intros L.<br/> -Tactic Notation "case" "/" constr(X) ":" ident_list(Y)<br/> - := revert Y; vlib__case_with X.<br/> -Tactic Notation "case" "/" constr(X) ":" ident_list(Y) "=>" simple_intropattern_list(L)<br/> - := revert Y; vlib__case_with X; intros L.<br/> -<br/> -<span class="comment">(** double apply *)</span><br/> -<br/> -Tactic Notation "apply" "/" constr(X1) "/" constr(X2) :=<br/> - eapply sameP; <span class="inlinecode"><span class="id" type="tactic">apply</span></span> <span class="inlinecode"><span class="id" type="var">X1</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>|<span class="id" type="tactic">eapply</span></span> <span class="inlinecode"><span class="id" type="var">iffP</span>;</span> <span class="inlinecode">[<span class="id" type="tactic">apply</span></span> <span class="inlinecode"><span class="id" type="var">X2</span>;</span> <span class="inlinecode"><span class="id" type="var">edone</span>|<span class="id" type="tactic">instantiate</span>|<span class="id" type="tactic">instantiate</span>]</span>.<br/> -<br/> -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<span class="comment">(** * Function notation ported from ssrfun.v *)</span><br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<br/> -Delimit Scope fun_scope with FUN.<br/> -Open Scope fun_scope.<br/> -<br/> -Notation "f ^~ y" := (fun x => f x y)<br/> - (at level 10, y at level 8, no associativity, format "f ^~ y") : fun_scope.<br/> -<br/> -Module Option.<br/> -<br/> -Definition apply aT rT (f : aT -> rT) x u := <br/> - match u with<br/> - | Some y => f y <br/> - | None => x<br/> - end.<br/> -<br/> -Definition default T := apply (fun x : T => x).<br/> -<br/> -Definition bind aT rT (f : aT -> option rT) := apply f None.<br/> -<br/> -Definition map aT rT (f : aT -> rT) := bind (fun x => Some (f x)).<br/> -<br/> -End Option.<br/> -<br/> -Notation oapp := Option.apply.<br/> -Notation odflt := Option.default.<br/> -Notation obind := Option.bind.<br/> -Notation omap := Option.map.<br/> -Notation some := (@Some _) (only parsing).<br/> -<br/> -<span class="comment">(** Definitions and notation for explicit functions with simplification. *)</span><br/> -<br/> -Section SimplFun.<br/> -<br/> -Variables aT rT : Type.<br/> -<br/> -Inductive simpl_fun : Type := SimplFun (_ : aT -> rT).<br/> -<br/> -Definition fun_of_simpl := fun f x => match f with SimplFun lam => lam x end. <br/> -<br/> -Coercion fun_of_simpl : simpl_fun >-> Funclass.<br/> -<br/> -End SimplFun.<br/> -<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (SimplFun (fun _ : T => E))<br/> - (at level 0,<br/> - format "'<span class="inlinecode"><span class="id" type="var">hv'</span></span> <span class="inlinecode">[</span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">=></span> <span class="inlinecode">'/</span> <span class="inlinecode">'</span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode">]</span> <span class="inlinecode">'</span>'") : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (SimplFun (fun x => E))<br/> - (at level 0, x ident,<br/> - format "'<span class="inlinecode"><span class="id" type="var">hv'</span></span> <span class="inlinecode">[</span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode">=></span> <span class="inlinecode">'/</span> <span class="inlinecode">'</span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode">]</span> <span class="inlinecode">'</span>'") : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (SimplFun (fun x : T => E))<br/> - (at level 0, x ident, only parsing) : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (fun x => <span class="inlinecode"><span class="id" type="keyword">fun</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span>)<br/> - (at level 0, x ident, y ident,<br/> - format "'<span class="inlinecode"><span class="id" type="var">hv'</span></span> <span class="inlinecode">[</span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">=></span> <span class="inlinecode">'/</span> <span class="inlinecode">'</span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode">]</span> <span class="inlinecode">'</span>'") : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (fun x : T => <span class="inlinecode"><span class="id" type="keyword">fun</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span>)<br/> - (at level 0, x ident, y ident, only parsing) : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode">(</span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">)</span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (fun x : T => <span class="inlinecode"><span class="id" type="keyword">fun</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span>)<br/> - (at level 0, x ident, y ident, only parsing) : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode">(</span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">)</span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" := (fun x => <span class="inlinecode"><span class="id" type="keyword">fun</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">T</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span>)<br/> - (at level 0, x ident, y ident, only parsing) : fun_scope.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">fun'</span></span> <span class="inlinecode">(</span> <span class="inlinecode"><span class="id" type="var">x</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">xT</span></span> <span class="inlinecode">)</span> <span class="inlinecode">(</span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">yT</span></span> <span class="inlinecode">)</span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span> <span class="inlinecode"></span>" :=<br/> - (fun x : xT => <span class="inlinecode"><span class="id" type="keyword">fun</span></span> <span class="inlinecode"><span class="id" type="var">y</span></span> <span class="inlinecode">:</span> <span class="inlinecode"><span class="id" type="var">yT</span></span> <span class="inlinecode">=></span> <span class="inlinecode"><span class="id" type="var">E</span></span>)<br/> - (at level 0, x ident, y ident, only parsing) : fun_scope.<br/> -<br/> -Definition erefl := @eq_refl.<br/> -Definition esym := eq_sym.<br/> -Definition nesym := sym_not_eq.<br/> -Definition etrans := eq_trans.<br/> -Definition congr1 := f_equal.<br/> -Definition congr2 := f_equal2.<br/> -<br/> -<span class="comment">(** A predicate for singleton types. *)</span><br/> -Definition all_equal_to T (x0 : T) := forall x, x = x0.<br/> -<br/> -Lemma unitE : all_equal_to tt.<br/> -Proof. by intros <span class="inlinecode"></span>. Qed.<br/> -<br/> -<span class="comment">(** A generic wrapper type *)</span><br/> -<br/> -Structure wrapped T := Wrap {unwrap : T}.<br/> -Canonical Structure wrap T x := @Wrap T x.<br/> -<br/> -<span class="comment">(* Prenex Implicits unwrap wrap Wrap. *)</span><br/> -<br/> -<span class="comment">(** Extensional equality for unary and binary functions + syntactic sugar. *)</span><br/> -<br/> -Section ExtensionalEquality.<br/> -<br/> -Variables A B C : Type.<br/> -<br/> -Definition eqfun (f g : B -> A) : Prop := forall x, f x = g x.<br/> -<br/> -Definition eqrel (r s : C -> B -> A) : Prop := forall x y, r x y = s x y.<br/> -<br/> -Lemma frefl : forall f, eqfun f f.<br/> -Proof. done. Qed.<br/> -<br/> -Lemma fsym : forall f g, eqfun f g -> eqfun g f.<br/> -Proof. red; done. Qed. <br/> -<br/> -Lemma ftrans : forall f g h (EQ1: eqfun f g) (EQ2: eqfun g h), eqfun f h.<br/> -Proof. by red; intros; rewrite EQ1. Qed.<br/> -<br/> -Lemma rrefl : forall r, eqrel r r.<br/> -Proof. done. Qed.<br/> -<br/> -End ExtensionalEquality.<br/> -<br/> -Hint Resolve frefl rrefl.<br/> -<br/> -Notation "f1 =1 f2" := (eqfun f1 f2)<br/> - (at level 70, no associativity) : fun_scope.<br/> -Notation "f1 =1 f2 :> A" := (f1 =1 (f2 : A))<br/> - (at level 70, f2 at next level, A at level 90) : fun_scope.<br/> -Notation "f1 =2 f2" := (eqrel f1 f2)<br/> - (at level 70, no associativity) : fun_scope.<br/> -Notation "f1 =2 f2 :> A" := (f1 =2 (f2 : A))<br/> - (at level 70, f2 at next level, A, B at level 90) : fun_scope.<br/> -<br/> -Section Composition.<br/> -<br/> -Variables A B C : Type.<br/> -<br/> -Definition funcomp u (f : B -> A) (g : C -> B) x := match u with tt => f (g x) end.<br/> -Local Notation comp := (funcomp tt).<br/> -<br/> -Definition pcomp (f : B -> option A) (g : C -> option B) x := obind f (g x).<br/> -<br/> -Lemma eq_comp : forall f f' g g', f =1 f' -> g =1 g' -> comp f g =1 comp f' g'.<br/> -Proof. red; intros; simpl; congruence. Qed.<br/> -<br/> -End Composition.<br/> -<br/> -Notation "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">eta'</span></span> <span class="inlinecode"><span class="id" type="var">f</span></span> <span class="inlinecode"></span>" := (fun x => f x)<br/> - (at level 0, format "<span class="inlinecode"></span> <span class="inlinecode">'<span class="id" type="var">eta'</span></span> <span class="inlinecode"><span class="id" type="var">f</span></span> <span class="inlinecode"></span>") : fun_scope.<br/> -<br/> -Notation id := (fun x => x).<br/> -Notation "@ 'id' T " := (fun x : T => x)<br/> - (at level 10, T at level 8, only parsing) : fun_scope.<br/> -<br/> -Notation comp := (funcomp tt).<br/> -Notation "@ 'comp'" := (fun A B C => @funcomp A B C tt).<br/> -Notation "f1 \o f2" := (comp f1 f2) (at level 50) : fun_scope.<br/> -<br/> -Section Morphism.<br/> -<br/> -Variables (aT rT sT : Type) (f : aT -> rT).<br/> -<br/> -Definition morphism_1 aF rF := forall x, f (aF x) = rF (f x).<br/> -Definition morphism_2 aOp rOp := forall x y, f (aOp x y) = rOp (f x) (f y).<br/> -<br/> -End Morphism.<br/> -<br/> -Notation "{ 'morph' f : x / a >-> r }" :=<br/> - (morphism_1 f (fun x => a) (fun x => r))<br/> - (at level 0, f at level 99, x ident,<br/> - format "{ 'morph' f : x / a >-> r }") : type_scope.<br/> -<br/> -Notation "{ 'morph' f : x / a }" :=<br/> - (morphism_1 f (fun x => a) (fun x => a))<br/> - (at level 0, f at level 99, x ident,<br/> - format "{ 'morph' f : x / a }") : type_scope.<br/> -<br/> -Notation "{ 'morph' f : x y / a >-> r }" :=<br/> - (morphism_2 f (fun x y => a) (fun x y => r))<br/> - (at level 0, f at level 99, x ident, y ident,<br/> - format "{ 'morph' f : x y / a >-> r }") : type_scope.<br/> -<br/> -Notation "{ 'morph' f : x y / a }" :=<br/> - (morphism_2 f (fun x y => a) (fun x y => a))<br/> - (at level 0, f at level 99, x ident, y ident,<br/> - format "{ 'morph' f : x y / a }") : type_scope.<br/> -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<span class="comment">(** * Properties of relations (ported from ssrfun.v) *)</span><br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<br/> -Section Injections.<br/> -<br/> -<span class="comment">(* rT must come first so we can use @ to mitigate the Coq 1st order *)</span><br/> -<span class="comment">(* unification bug (e..g., Coq can't infer rT from a "cancel" lemma). *)</span><br/> -Variables (rT aT : Type) (f : aT -> rT).<br/> -<br/> -Definition injective := forall x1 x2, f x1 = f x2 -> x1 = x2.<br/> -<br/> -Definition cancel g := forall x, g (f x) = x.<br/> -<br/> -Definition pcancel g := forall x, g (f x) = Some x.<br/> -<br/> -Definition ocancel (g : aT -> option rT) h := forall x, oapp h x (g x) = x.<br/> -<br/> -Lemma can_pcan : forall g, cancel g -> pcancel (fun y => Some (g y)).<br/> -Proof. by red; intros; f_equal. Qed.<br/> -<br/> -Lemma pcan_inj : forall g, pcancel g -> injective.<br/> -Proof. red; intros; apply (congr1 g) in H0; rewrite !H in *; clarify. Qed.<br/> -<br/> -Lemma can_inj : forall g, cancel g -> injective.<br/> -Proof. eby intros; apply can_pcan in H; eapply pcan_inj. Qed.<br/> -<br/> -Lemma canLR : forall g x y, cancel g -> x = f y -> g x = y.<br/> -Proof. intros; clarify. Qed.<br/> -<br/> -Lemma canRL : forall g x y, cancel g -> f x = y -> x = g y.<br/> -Proof. intros; clarify. Qed. <br/> -<br/> -End Injections.<br/> -<br/> -<span class="comment">(* cancellation lemmas for dependent type casts. *)</span><br/> -Lemma esymK : forall T x y, cancel (@eq_sym T x y) (@eq_sym T y x).<br/> -Proof. by red; destruct x0. Qed.<br/> -<br/> -Lemma etrans_id : forall T x y (eqxy : x = y :> T),<br/> - eq_trans (eq_refl x) eqxy = eqxy.<br/> -Proof. by destruct eqxy. Qed.<br/> -<br/> -Section InjectionsTheory.<br/> -<br/> -Variables (A B C : Type) (f g : B -> A) (h : C -> B).<br/> -<br/> -Lemma inj_id : injective (@id A).<br/> -Proof. done. Qed.<br/> -<br/> -Lemma inj_can_sym : forall f', cancel f f' -> injective f' -> cancel f' f.<br/> -Proof. red; intros; apply H0, H. Qed.<br/> -<br/> -Lemma inj_comp : injective f -> injective h -> injective (f \o h).<br/> -Proof. by red; simpl; intros; apply H0, H. Qed.<br/> -<br/> -Lemma can_comp : forall f' h',<br/> - cancel f f' -> cancel h h' -> cancel (f \o h) (h' \o f').<br/> -Proof. by red; simpl; intros; rewrite H, H0. Qed.<br/> -<br/> -Lemma pcan_pcomp : forall f' h',<br/> - pcancel f f' -> pcancel h h' -> pcancel (f \o h) (pcomp h' f').<br/> -Proof. by red; intros; unfold pcomp; simpl; rewrite H; simpl; rewrite H0. Qed.<br/> -<br/> -Lemma eq_inj : injective f -> f =1 g -> injective g.<br/> -Proof. intros H H0 x y; simpl; rewrite <- !H0; apply H. Qed.<br/> -<br/> -Lemma eq_can : forall f' g', cancel f f' -> f =1 g -> f' =1 g' -> cancel g g'.<br/> -Proof. by red; intros; rewrite <- H0, <- H1. Qed.<br/> -<br/> -Lemma inj_can_eq : forall f',<br/> - cancel f f' -> injective f' -> cancel g f' -> f =1 g.<br/> -Proof. by red; intros; apply H0; rewrite H1. Qed.<br/> -<br/> -End InjectionsTheory.<br/> -<br/> -Section Bijections.<br/> -<br/> -Variables (A B : Type) (f : B -> A).<br/> -<br/> -Inductive bijective : Prop := Bijective g (_ : cancel f g) (_ : cancel g f).<br/> -<br/> -Hypothesis bijf : bijective.<br/> -<br/> -Lemma bij_inj : injective f.<br/> -Proof. eby destruct bijf; eapply can_inj. Qed.<br/> -<br/> -Lemma bij_can_sym : forall f', cancel f' f <-> cancel f f'.<br/> -Proof.<br/> -split; intros; <span class="inlinecode"><span class="id" type="tactic">by</span></span> <span class="inlinecode"><span class="id" type="tactic">apply</span></span> <span class="inlinecode"><span class="id" type="var">inj_can_sym</span>,</span> <span class="inlinecode"><span class="id" type="var">bij_inj</span>|</span>.<br/> -by destruct bijf; intros x; rewrite <- (H1 x), H.<br/> -Qed.<br/> -<br/> -Lemma bij_can_eq : forall f' f'', cancel f f' -> cancel f f'' -> f' =1 f''.<br/> -Proof.<br/> - by intros; eapply inj_can_eq, bij_can_sym; <span class="inlinecode"><span class="id" type="tactic">apply</span></span> <span class="inlinecode"><span class="id" type="var">bij_can_sym</span></span> <span class="inlinecode">|</span> <span class="inlinecode"><span class="id" type="tactic">apply</span></span> <span class="inlinecode"><span class="id" type="var">bij_inj</span></span> <span class="inlinecode">|</span>.<br/> -Qed.<br/> -<br/> -End Bijections.<br/> -<br/> -Section BijectionsTheory.<br/> -<br/> -Variables (A B C : Type) (f : B -> A) (h : C -> B).<br/> -<br/> -Lemma eq_bij : bijective f -> forall g, f =1 g -> bijective g.<br/> -Proof. by destruct 1; exists g; eapply eq_can; eauto. Qed.<br/> -<br/> -Lemma bij_comp : bijective f -> bijective h -> bijective (f \o h).<br/> -Proof.<br/> -intros <span class="inlinecode"><span class="id" type="var">f'</span></span> <span class="inlinecode"><span class="id" type="var">fK</span></span> <span class="inlinecode"><span class="id" type="var">f'K</span></span> <span class="inlinecode"><span class="id" type="var">h'</span></span> <span class="inlinecode"><span class="id" type="var">hK</span></span> <span class="inlinecode"><span class="id" type="var">h'K</span></span>.<br/> -by exists (h' \o f' : _ -> _); apply can_comp; auto.<br/> -Qed.<br/> -<br/> -Lemma bij_can_bij : bijective f -> forall f', cancel f f' -> bijective f'.<br/> -Proof. by exists f; <span class="inlinecode"><span class="id" type="tactic">apply</span></span> <span class="inlinecode">(<span class="id" type="var">bij_can_sym</span></span> <span class="inlinecode"><span class="id" type="var">H</span>)</span> <span class="inlinecode">|</span>. Qed.<br/> -<br/> -End BijectionsTheory.<br/> -<br/> -Section Involutions.<br/> -<br/> -Variables (A : Type) (f : A -> A).<br/> -<br/> -Definition involutive := cancel f f.<br/> -<br/> -Hypothesis Hf : involutive.<br/> -<br/> -Lemma inv_inj : injective f.<br/> -Proof. eapply can_inj, Hf. Qed.<br/> -<br/> -Lemma inv_bij : bijective f.<br/> -Proof. by exists f. Qed.<br/> -<br/> -End Involutions.<br/> -<br/> -<br/> -Section OperationProperties.<br/> -<br/> -Variables S T R : Type.<br/> -<br/> -Section SopTisR.<br/> -Implicit Type op : S -> T -> R.<br/> -Definition left_inverse e inv op := forall x, op (inv x) x = e.<br/> -Definition right_inverse e inv op := forall x, op x (inv x) = e.<br/> -End SopTisR.<br/> -<br/> -Section SopTisS.<br/> -Implicit Type op : S -> T -> S.<br/> -Definition right_id e op := forall x, op x e = x.<br/> -Definition left_zero z op := forall x, op z x = z.<br/> -Definition right_commutative op := forall x y z, op (op x y) z = op (op x z) y.<br/> -Definition left_distributive op add :=<br/> - forall x y z, op (add x y) z = add (op x z) (op y z).<br/> -End SopTisS.<br/> -<br/> -Section SopTisT.<br/> -Implicit Type op : S -> T -> T.<br/> -Definition left_id e op := forall x, op e x = x.<br/> -Definition right_zero z op := forall x, op x z = z.<br/> -Definition left_commutative op := forall x y z, op x (op y z) = op y (op x z).<br/> -Definition right_distributive op add :=<br/> - forall x y z, op x (add y z) = add (op x y) (op x z).<br/> -End SopTisT.<br/> -<br/> -Section SopSisT.<br/> -Implicit Type op : S -> S -> T.<br/> -Definition self_inverse e op := forall x, op x x = e.<br/> -Definition commutative op := forall x y, op x y = op y x.<br/> -End SopSisT.<br/> -<br/> -Section SopSisS.<br/> -Implicit Type op : S -> S -> S.<br/> -Definition idempotent op := forall x, op x x = x.<br/> -Definition associative op := forall x y z, op x (op y z) = op (op x y) z.<br/> -End SopSisS.<br/> -<br/> -End OperationProperties.<br/> -<br/> -<br/> -<span class="comment">(** ** Boolean laws *)</span><br/> -<br/> -<span class="comment">(** Shorter, more systematic names for the boolean connectives laws. *)</span><br/> -<br/> -Lemma andTb : forall x, true && x = x.<br/> -Proof. done. Qed.<br/> -Lemma andFb : forall x, false && x = false.<br/> -Proof. done. Qed.<br/> -Lemma andbT : forall x, x && true = x.<br/> -Proof. by intros <span class="inlinecode"></span>. Qed.<br/> -Lemma andbF : forall x, x && false = false.<br/> -Proof. by intros <span class="inlinecode"></span>. Qed.<br/> -Lemma andbb : forall x, x && x = x.<br/> -Proof. by intros <span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma andbC : forall x y, x && y = y && x.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma andbA : forall x y z, x && (y && z) = x && y && z.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma andbCA : forall x y z, x && (y && z) = y && (x && z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma andbAC : forall x y z, x && y && z = x && z && y.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma andbN : forall b, b && negb b = false.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma andNb : forall b, negb b && b = false.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma orTb : forall x, true || x = true.<br/> -Proof. done. Qed.<br/> -Lemma orFb : forall x, false || x = x.<br/> -Proof. done. Qed.<br/> -Lemma orbT : forall x, x || true = true.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma orbF : forall x, x || false = x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma orbb : forall x, x || x = x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma orbC : forall x y, x || y = y || x.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma orbA : forall x y z, x || (y || z) = x || y || z.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed. <br/> -Lemma orbCA : forall x y z, x || (y || z) = y || (x || z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma orbAC : forall x y z, x || y || z = x || z || y.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma orbN : forall b, b || negb b = true.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma orNb : forall b, negb b || b = true.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma andb_orl : forall x y z, (x || y) && z = x && z || y && z.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma andb_orr : forall x y z, x && (y || z) = x && y || x && z.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma orb_andl : forall x y z, (x && y) || z = (x || z) && (y || z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma orb_andr : forall x y z, x || (y && z) = (x || y) && (x || z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -<br/> -<span class="comment">(** Pseudo-cancellation -- i.e, absorbtion *)</span><br/> -<br/> -Lemma andbK : forall b1 b2, b1 && b2 || b1 = b1.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma andKb : forall b1 b2, b1 || b2 && b1 = b1.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma orbK : forall b1 b2, (b1 || b2) && b1 = b1.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma orKb : forall b1 b2, b1 && (b2 || b1) = b1.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -<br/> -<span class="comment">(** Exclusive or -- <span class="inlinecode"><span class="id" type="var">xorb</span></span> *)</span><br/> -<br/> -Lemma xorFb : forall x, xorb false x = x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma xorbF : forall x, xorb x false = x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma xorTb : forall x, xorb true x = negb x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma xorbT : forall x, xorb x true = negb x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma xorbb : forall x, xorb x x = false.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma xorbC : forall x y, xorb x y = xorb y x.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma xorbA : forall x y z, xorb x (xorb y z) = xorb (xorb x y) z.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed. <br/> -Lemma xorbCA : forall x y z, xorb x (xorb y z) = xorb y (xorb x z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed. <br/> -Lemma xorbAC : forall x y z, xorb (xorb x y) z = xorb (xorb x z) y.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed. <br/> -<br/> -Lemma xorbN : forall x y, xorb x (negb y) = negb (xorb x y).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma xorNb : forall x y, xorb x (negb y) = negb (xorb x y).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -<br/> -Lemma andb_xorl : forall x y z, (xorb x y) && z = xorb (x && z) (y && z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed. <br/> -Lemma andb_xorr : forall x y z, x && (xorb y z) = xorb (x && y) (x && z).<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span><span class="inlinecode"></span>. Qed. <br/> -<br/> -<span class="comment">(** Negation *)</span><br/> -<br/> -Lemma negb_neg : forall x, negb (negb x) = x.<br/> -Proof. by intros<span class="inlinecode"></span>. Qed.<br/> -Lemma negb_and : forall x y, negb (x && y) = negb x || negb y.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma negb_or : forall x y, negb (x || y) = negb x && negb y.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -Lemma negb_xor : forall x y, negb (xorb x y) = xorb (negb x) y.<br/> -Proof. by intros<span class="inlinecode"></span><span class="inlinecode"></span>. Qed.<br/> -<br/> -<br/> -<span class="comment">(** ** Automation support *)</span><br/> -<br/> -Hint Rewrite <br/> - andTb andFb andbT andbF <br/> - orTb orFb orbT orbF<br/> - : vlib_trivial.<br/> -<br/> -Hint Rewrite <br/> - andbb andbN andNb <br/> - orbb orbN orNb <br/> - andbK andKb orbK orKb<br/> - xorbb xorFb xorbF xorTb xorbT xorbb negb_neg <br/> - : vlib.<br/> -<br/> -Hint Rewrite andbA orbA xorbA : vlibA.<br/> -<br/> -<span class="comment">(** Other potentially useful rewrites: <span class="inlinecode"><span class="id" type="var">negb_and</span></span> <span class="inlinecode"><span class="id" type="var">negb_or</span></span> <span class="inlinecode"><span class="id" type="var">negb_xor</span></span>. *)</span><br/> -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<span class="comment">(** ** Views *)</span><br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<br/> -<span class="comment">(** An attempt to replicate functionality from ss-reflect. *)</span><br/> -<br/> -Section ApplyIff.<br/> -<br/> -Variables P Q : Prop.<br/> -Hypothesis eqPQ : P <-> Q.<br/> -<br/> -Lemma iffLR : P -> Q.<br/> -Proof. tauto. Qed.<br/> -<br/> -Lemma iffRL : Q -> P.<br/> -Proof. tauto. Qed.<br/> -<br/> -Lemma iffLRn : ~P -> ~Q.<br/> -Proof. tauto. Qed.<br/> -<br/> -Lemma iffRLn : ~Q -> ~P.<br/> -Proof. tauto. Qed.<br/> -<br/> -End ApplyIff.<br/> -<br/> -<br/> -<br/> -<br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<span class="comment">(** * Predicates, i.e. functions to bool (ported from ssrbool.v) *)</span><br/> -<span class="comment">(* ************************************************************************** *)</span><br/> -<br/> -<br/> -<span class="comment">(****************************************************************************)</span><br/> -<span class="comment">(* Predicates, i.e., packaged functions to bool. *)</span><br/> -<span class="comment">(* *)</span><br/> -<span class="comment">(* pred T, the basic type for predicates over a type T, is simply an alias *)</span><br/> -<span class="comment">(* for T -> bool. *)</span><br/> -<span class="comment">(* We actually distinguish two kinds of predicates, which we call *)</span><br/> -<span class="comment">(* applicative and collective, based on the syntax used to specialize them *)</span><br/> -<span class="comment">(* to some value x in T: *)</span><br/> -<span class="comment">(* - For an applicative predicate P, one uses prefix syntax: *)</span><br/> -<span class="comment">(* P x *)</span><br/> -<span class="comment">(* Also, most operations on applicative predicates use prefix syntax as *)</span><br/> -<span class="comment">(* well (e.g., predI P Q). *)</span><br/> -<span class="comment">(* - For a collective predicate A, one uses infix syntax: *)</span><br/> -<span class="comment">(* x \in A *)</span><br/> -<span class="comment">(* and all operations on collective predicates use infix syntax as well *)</span><br/> -<span class="comment">(* (e.g., <span class="inlinecode"><span class="id" type="var">predI</span></span> <span class="inlinecode"><span class="id" type="var">A</span></span> <span class="inlinecode">&</span> <span class="inlinecode"><span class="id" type="var">B</span></span>). *)</span><br/> -<span class="comment">(* There are only two kinds of applicative predicates: *)</span><br/> -<span class="comment">(* - pred T, the alias for T -> bool mentioned above *)</span><br/> -<span class="comment">(* - simpl_pred T, an alias for simpl_fun T bool with a coercion to pred T *)</span><br/> -<span class="comment">(* that auto-simplifies on application (see ssrfun). *)</span><br/> -<span class="comment">(* On the other hand, the set of collective predicate types is open-ended, *)</span><br/> -<span class="comment">(* via *)</span><br/> -<span class="comment">(* - predType T, a Structure that can be used to put Canonical collective *)</span><br/> -<span class="comment">(* predicate interpretation on other types, such as lists, tuples, *)</span><br/> -<span class="comment">(* finite sets, etc. *)</span><br/> -<span class="comment">(* Indeed, we define such interpretations for applicative predicate types, *)</span><br/> -<span class="comment">(* which can therefore also be used with the infix syntax, e.g. x \in predI *)</span><br/> -<span class="comment">(* P Q. Moreover these infix forms are convertible to their prefix *)</span><br/> -<span class="comment">(* counterpart (e.g., predI P Q x which in turn simplifies to P x && Q x). *)</span><br/> -<span class="comment">(* The converse is not true, however; collective predicate types cannot, in *)</span><br/> -<span class="comment">(* general, be used applicatively, because of the "uniform inheritance" *)</span><br/> -<span class="comment">(* restriction on implicit coercions. *)</span><br/> -<span class="comment">(* *)</span><br/> -<span class="comment">(* However, we do define an explicit generic coercion *)</span><br/> -<span class="comment">(* - mem : forall (pT : predType), pT -> mem_pred T *)</span><br/> -<span class="comment">(* where mem_pred T is a variant of simpl_pred T that preserves the *)</span><br/> -<span class="comment">(* infix syntax, i.e., mem A x auto-simplifies to x \in A *)</span><br/> -<span class="comment">(* Indeed, the infix "collective" operators are notation for a prefix *)</span><br/> -<span class="comment">(* operator with arguments of type mem_pred T or pred T, applied to coerced *)</span><br/> -<span class="comment">(* collective predicates, e.g., *)</span><br/> -<span class="comment">(* Notation "x \in A" := (in_mem x (mem A)). *)</span><br/> -<span class="comment">(* This prevents the variability in the predicate type from interfering *)</span><br/> -<span class="comment">(* with the application of generic lemmas. Moreover this also makes it much *)</span><br/> -<span class="comment">(* easier to define generic lemmas, because the simplest type -- pred T -- *)</span><br/> -<span class="comment">(* can be used as the type of generic collective predicates, provided one *)</span><br/> -<span class="comment">(* takes care not to use it applicatively; this avoids the burden of having *)</span><br/> -<span class="comment">(* to declare a different predicate type for each predicate parameter of *)</span><br/> -<span class="comment">(* each section or lemma. *)</span><br/> -<span class="comment">(* *)</span><br/> -<span class="comment">(* This trick is made possible by the fact that the constructor of the *)</span><br/> -<span class="comment">(* mem_pred T type aligns the unification process, forcing a generic *)</span><br/> -<span class="comment">(* "collective" predicate A : pred T to unify with the actual collective B, *)</span><br/> -<span class="comment">(* which mem has coerced to pred T via an internal, hidden implicit *)</span><br/> -<span class="comment">(* coercion, supplied by the predType structure for B. Users should take *)</span><br/> -<span class="comment">(* care not to inadvertently "strip" (mem B) down to the coerced B, since *)</span><br/> -<span class="comment">(* this will expose the internal coercion: Coq will display a term B x that *)</span><br/> -<span class="comment">(* can't be typed as such. The topredE lemma can be used to restore the *)</span><br/> -<span class="comment">(* x \in B syntax in this case. While -topredE can conversely be used to *)</span><br/> -<span class="comment">(* change x \in P into P x, it is safer to use the inE and memE lemmas *)</span><br/> -<span class="comment">(* instead, as they do not run the risk of exposing internal coercions. As *)</span><br/> -<span class="comment">(* a consequence, it is better to explicitly cast a generic applicative *)</span><br/> -<span class="comment">(* pred T to simpl_pred, using the SimplPred constructor, when it is used *)</span><br/> -<span class="comment">(* as a collective predicate (see, e.g., Lemma eq_big in bigop.v). *)</span><br/> -<span class="comment">(* *)</span><br/> -<span class="comment">(* We also sometimes "instantiate" the predType structure by defining a *)</span><br/> -<span class="comment">(* coercion to the sort of the predPredType structure. This works better *)</span><br/> -<span class="comment">(* for types such as {set T} that have subtypes that coerce to them, since *)</span><br/> -<span class="comment">(* the same coercion will be inserted by the application of mem. It also *)</span><br/> -<span class="comment">(* allows us to turn some specific Types (namely, any aT : predArgType) *)</span><br/> -<span class="comment">(* into predicates, specifically, the total predicate over that type, i.e., *)</span><br/> -<span class="comment">(* fun _ : aT => true. This allows us to write, e.g., |'I_n| for the *) -(* cardinal of the (finite) type of integers less than n. *) -(* *) -(* Collective predicates have a specific extensional equality, *) -(* - A =i B, *) -(* while applicative predicates just use the extensional equality of *) -(* functions, *) -(* - P =1 Q *) -(* The two forms are convertible, however. *) -(* We lift boolean operations to predicates, defining: *) -(* - predU (union), predI (intersection), predC (complement), *) -(* predD (difference), and preim (preimage, i.e., composition) *) -(* For each operation we define three forms, typically: *) -(* - predU : pred T -> pred T -> simpl_pred T *) -(* - [predU A & B], a Notation for predU (mem A) (mem B) *) -(* - xpredU, a Notation for the lambda-expression inside predU, *) -(* which is mostly useful as an argument of =1, since it exposes the *) -(* head constant of the expression to the ssreflect matching algorithm. *) -(* The syntax for the preimage of a collective predicate A is *) -(* - [preim f of A] *) -(* Finally, the generic syntax for defining a simpl_pred T is *) -(* - [pred x : T | P(x)], [pred x | P(x)], [pred x \in A | P(x) *) -(* We also support boolean relations, but only the applicative form, with *) -(* types *) -(* - rel T, an alias for T -> pred T *) -(* - simpl_rel T, an auto-simplifying version, and syntax *) -(* [rel x y | P(x,y)], [rel x y \in A & B | P(x,y)], etc. *) -(* The notation [rel of fA] can be used to coerce a function returning a *) -(* collective predicate to one returning pred T. *) -(****************************************************************************) -(* - -Definition pred T := T -> bool. - -Identity Coercion fun_of_pred : pred >-> Funclass. - -Definition rel T := T -> pred T. - -Identity Coercion fun_of_rel : rel >-> Funclass. - -Notation xpred0 := (fun _ => false). -Notation xpredT := (fun _ => true). -Notation xpredI := (fun (p1 p2 : pred _) x => p1 x && p2 x). -Notation xpredU := (fun (p1 p2 : pred _) x => p1 x || p2 x). -Notation xpredC := (fun (p : pred _) x => negb (p x)). -Notation xpredD := (fun (p1 p2 : pred _) x => negb (p2 x) && p1 x). -Notation xpreim := (fun f (p : pred _) x => p (f x)). -Notation xrelU := (fun (r1 r2 : rel _) x y => r1 x y || r2 x y). - -Section Predicates. - -Variables T : Type. - -Definition subpred (p1 p2 : pred T) := forall x, p1 x -> p2 x. - -Definition subrel (r1 r2 : rel T) := forall x y, r1 x y -> r2 x y. - -Definition simpl_pred := simpl_fun T bool. - -Definition SimplPred (p : pred T) : simpl_pred := SimplFun p. - -Coercion pred_of_simpl (p : simpl_pred) : pred T := p : T -> bool. - -Definition pred0 := SimplPred xpred0. -Definition predT := SimplPred xpredT. -Definition predI p1 p2 := SimplPred (xpredI p1 p2). -Definition predU p1 p2 := SimplPred (xpredU p1 p2). -Definition predC p := SimplPred (xpredC p). -Definition predD p1 p2 := SimplPred (xpredD p1 p2). -Definition preim rT f (d : pred rT) := SimplPred (xpreim f d). - -Definition simpl_rel := simpl_fun T (pred T). - -Definition SimplRel (r : rel T) : simpl_rel := [fun x => r x]. - -Coercion rel_of_simpl_rel (r : simpl_rel) : rel T := fun x y => r x y. - -Definition relU r1 r2 := SimplRel (xrelU r1 r2). - -Lemma subrelUl : forall r1 r2, subrel r1 (relU r1 r2). -Proof. red; ins; apply/orP; vauto. Qed. - -Lemma subrelUr : forall r1 r2, subrel r2 (relU r1 r2). -Proof. red; ins; apply/orP; vauto. Qed. - -Inductive mem_pred : Type := Mem (_ : pred T). - -Definition isMem pT topred mem := - mem = (fun p : pT => Mem (fun x => topred p x)). - -Structure predType : Type := PredType { - pred_sort :> Type; - topred : pred_sort -> pred T; - _ : {mem | isMem topred mem} -}. - -Definition mkPredType pT toP := PredType (exist (@isMem pT toP) _ eq_refl). - -Canonical Structure predPredType := Eval hnf in @mkPredType (pred T) id. -Canonical Structure simplPredType := Eval hnf in mkPredType pred_of_simpl. - -Coercion pred_of_mem mp : pred_sort predPredType := - match mp with Mem p => fun x => p x end. - -Canonical Structure memPredType := Eval hnf in mkPredType pred_of_mem. - -Definition clone_pred U := - fun pT (_ : pred_sort pT -> U) => - fun a mP (pT' := @PredType U a mP) (_ : phant_id pT' pT) => pT'. - -End Predicates. - -Implicit Arguments topred [[T] p]. -Implicit Arguments pred0 [T]. -Implicit Arguments predT [T]. - -Notation "[ 'pred' : T | E ]" := (SimplPred (fun _ : T => E)) - (at level 0, format "[ 'pred' : T | E ]") : fun_scope. -Notation "[ 'pred' x | E ]" := (SimplPred (fun x => E)) - (at level 0, x ident, format "[ 'pred' x | E ]") : fun_scope. -Notation "[ 'pred' x : T | E ]" := (SimplPred (fun x : T => E)) - (at level 0, x ident, only parsing) : fun_scope. -Notation "[ 'rel' x y | E ]" := (SimplRel (fun x y => E)) - (at level 0, x ident, y ident, format "[ 'rel' x y | E ]") : fun_scope. -Notation "[ 'rel' x y : T | E ]" := (SimplRel (fun x y : T => E)) - (at level 0, x ident, y ident, only parsing) : fun_scope. - -Notation "[ 'predType' 'Of' T ]" := (@clone_pred _ T _ id _ _ id) - (at level 0, format "[ 'predType' 'Of' T ]") : form_scope. - -(* This redundant coercion lets us "inherit" the simpl_predType canonical *) -(* structure by declaring a coercion to simpl_pred. This hack is the only *) -(* way to put a predType structure on a predArgType. We use simpl_pred *) -(* rather than pred to ensure that /= removes the identity coercion. Note *) -(* that the coercion will never be used directly for simpl_pred, since *) -(* the canonical structure should always resolve. *) - -Notation pred_class := (pred_sort (predPredType _)). -Coercion sort_of_simpl_pred T (p : simpl_pred T) : pred_class := p : pred T. - -(* This lets us use some types as a synonym for their universal predicate. *) -(* Unfortunately, this won't work for existing types like bool, unless *) -(* we redefine bool, true, false and all bool ops. *) -Definition predArgType := Type. -Identity Coercion sort_of_predArgType : predArgType >-> Sortclass. -Coercion pred_of_argType (T : predArgType) : simpl_pred T := predT. - -Notation "{ : T }" := (T%type : predArgType) - (at level 0, format "{ : T }") : type_scope. - -(* These must be defined outside a Section because "cooking" kills the *) -(* nosimpl tag. *) - -Definition mem T (pT : predType T) : pT -> mem_pred T := - match tt with tt => - (match pT return pT -> _ with PredType _ _ (exist mem _) => mem end) - end. - -Definition in_mem T x mp := - match tt with tt => @pred_of_mem T mp x end. - -Implicit Arguments mem [[T] pT]. - -Coercion pred_of_mem_pred T mp := [pred x : T | in_mem x mp]. - -Definition eq_mem T p1 p2 := forall x : T, in_mem x p1 = in_mem x p2. -Definition sub_mem T p1 p2 := forall x : T, in_mem x p1 -> in_mem x p2. - -Reserved Notation "x \in A" (at level 70, no associativity). -Reserved Notation "x \notin A" (at level 70, no associativity). -Reserved Notation "p1 =i p2" (at level 70, no associativity). - -Notation "x \in A" := (in_mem x (mem A)) : bool_scope. -Notation "x \in A" := (in_mem x (mem A)) : bool_scope. -Notation "x \notin A" := (negb (x \in A)) : bool_scope. -Notation "A =i B" := (eq_mem (mem A) (mem B)) : type_scope. -Notation "{ 'subset' A <= B }" := (sub_mem (mem A) (mem B)) - (at level 0, A, B at level 69, - format "{ '[hv' 'subset' A '/ ' <= B ']' }") : type_scope. -Notation "[ 'mem' A ]" := (pred_of_simpl (pred_of_mem_pred (mem A))) - (at level 0, only parsing) : fun_scope. -Notation "[ 'rel' 'Of' fA ]" := (fun x => [mem (fA x)]) - (at level 0, format "[ 'rel' 'Of' fA ]") : fun_scope. -Notation "[ 'predI' A & B ]" := (predI [mem A] [mem B]) - (at level 0, format "[ 'predI' A & B ]") : fun_scope. -Notation "[ 'predU' A & B ]" := (predU [mem A] [mem B]) - (at level 0, format "[ 'predU' A & B ]") : fun_scope. -Notation "[ 'predD' A & B ]" := (predD [mem A] [mem B]) - (at level 0, format "[ 'predD' A & B ]") : fun_scope. -Notation "[ 'predC' A ]" := (predC [mem A]) - (at level 0, format "[ 'predC' A ]") : fun_scope. -Notation "[ 'preim' f 'Of' A ]" := (preim f [mem A]) - (at level 0, format "[ 'preim' f 'Of' A ]") : fun_scope. - -Notation "[ 'pred' x \in A ]" := [pred x | x \in A] - (at level 0, x ident, format "[ 'pred' x \in A ]") : fun_scope. -Notation "[ 'pred' x \in A | E ]" := [pred x | (x \in A) && E] - (at level 0, x ident, format "[ 'pred' x \in A | E ]") : fun_scope. -Notation "[ 'rel' x y \in A & B | E ]" := - [rel x y | (x \in A) && (y \in B) && E] - (at level 0, x ident, y ident, - format "[ 'rel' x y \in A & B | E ]") : fun_scope. -Notation "[ 'rel' x y \in A & B ]" := [rel x y | (x \in A) && (y \in B)] - (at level 0, x ident, y ident, - format "[ 'rel' x y \in A & B ]") : fun_scope. -Notation "[ 'rel' x y \in A | E ]" := [rel x y \in A & A | E] - (at level 0, x ident, y ident, - format "[ 'rel' x y \in A | E ]") : fun_scope. -Notation "[ 'rel' x y \in A ]" := [rel x y \in A & A] - (at level 0, x ident, y ident, - format "[ 'rel' x y \in A ]") : fun_scope. - -Section simpl_mem. - -Variables (T : Type) (pT : predType T). - -Lemma mem_topred : forall (p : pT), mem (topred p) = mem p. -Proof. by unfold mem; case pT; intros T1 app1 [mem1 ->]. Qed. - -Lemma topredE : forall x (p : pT), topred p x = (x \in p). -Proof. by intros; rewrite <-mem_topred. Qed. - -Lemma in_simpl : forall x (p : simpl_pred T), (x \in p) = p x. -Proof. done. Qed. - -Lemma simpl_predE : forall (p : pred T), [pred x | p x] =1 p. -Proof. done. Qed. - -(* Definition inE := (in_simpl, simpl_predE). (* to be extended *) *) - -Lemma mem_simpl : forall (p : simpl_pred T), mem p = p :> pred T. -Proof. done. Qed. - -Definition memE := mem_simpl. (* could be extended *) - -(* -Lemma mem_mem : forall p : pT, (mem (mem p) = mem p) /\ (mem [mem p] = mem p). -Proof. by intros p; rewrite <-mem_topred. Qed. -*) - -End simpl_mem. - -Section RelationProperties. - -(* Caveat: reflexive should not be used to state lemmas, since auto *) -(* and trivial will not expand the constant. *) - -Variable T : Type. - -Variable R : rel T. - -Definition total := forall x y, R x y || R y x. -Definition transitive := forall x y z, R x y -> R y z -> R x z. - -Definition symmetric := forall x y, R x y = R y x. -Definition antisymmetric := forall x y, R x y -> R y x -> x = y. -Definition pre_symmetric := forall x y, R x y -> R y x. - -Lemma symmetric_from_pre : pre_symmetric -> symmetric. -Proof. split/; apply H. Qed. - -Lemma pre_from_symmetric : symmetric -> pre_symmetric. -Proof. by red; ins; rewrite H. Qed. - -Definition reflexive := forall x, R x x. -Definition irreflexive := forall x, R x x = false. - -Definition left_transitive := forall x y, R x y -> R x =1 R y. -Definition right_transitive := forall x y, R x y -> R^~ x =1 R^~ y. - -End RelationProperties. - -Lemma rev_trans : forall T (R : rel T), - transitive R -> transitive (fun x y => R y x). -Proof. eby red; intros; eapply H. Qed. - -(* Property localization *) - -Notation Local "{ 'all1' P }" := (forall x, P x : Prop) (at level 0). -Notation Local "{ 'all2' P }" := (forall x y, P x y : Prop) (at level 0). -Notation Local "{ 'all3' P }" := (forall x y z, P x y z: Prop) (at level 0). -Notation Local ph := (phantom _). - -Section LocalProperties. - -Variables T1 T2 T3 : Type. - -Variables (d1 : mem_pred T1) (d2 : mem_pred T2) (d3 : mem_pred T3). -Notation Local ph := (phantom Prop). - -Definition prop_for (x : T1) P (_ : ph {all1 P}) := P x. - -Lemma forE : forall x P phP, @prop_for x P phP = P x. -Proof. done. Qed. - -Definition prop_in1 P (_ : ph {all1 P}) := - forall x, in_mem x d1 -> P x. - -Definition prop_in11 P (_ : ph {all2 P}) := - forall x y, in_mem x d1 -> in_mem y d2 -> P x y. - -Definition prop_in2 P (_ : ph {all2 P}) := - forall x y, in_mem x d1 -> in_mem y d1 -> P x y. - -Definition prop_in111 P (_ : ph {all3 P}) := - forall x y z, in_mem x d1 -> in_mem y d2 -> in_mem z d3 -> P x y z. - -Definition prop_in12 P (_ : ph {all3 P}) := - forall x y z, in_mem x d1 -> in_mem y d2 -> in_mem z d2 -> P x y z. - -Definition prop_in21 P (_ : ph {all3 P}) := - forall x y z, in_mem x d1 -> in_mem y d1 -> in_mem z d2 -> P x y z. - -Definition prop_in3 P (_ : ph {all3 P}) := - forall x y z, in_mem x d1 -> in_mem y d1 -> in_mem z d1 -> P x y z. - -Variable f : T1 -> T2. - -Definition prop_on1 Pf P (_ : phantom T3 (Pf f)) (_ : ph {all1 P}) := - forall x, in_mem (f x) d2 -> P x. - -Definition prop_on2 Pf P (_ : phantom T3 (Pf f)) (_ : ph {all2 P}) := - forall x y, in_mem (f x) d2 -> in_mem (f y) d2 -> P x y. - -End LocalProperties. - -Implicit Arguments prop_in1 [T1 P]. -Implicit Arguments prop_in11 [T1 T2 P]. -Implicit Arguments prop_in2 [T1 P]. -Implicit Arguments prop_in111 [T1 T2 T3 P]. -Implicit Arguments prop_in12 [T1 T2 P]. -Implicit Arguments prop_in21 [T1 T2 P]. -Implicit Arguments prop_in3 [T1 P]. -Implicit Arguments prop_on1 [T1 T2 T3 f Pf P]. -Implicit Arguments prop_on2 [T1 T2 T3 f Pf P]. - -Definition inPhantom := Phantom Prop. -Definition onPhantom T P (x : T) := Phantom Prop (P x). - -Definition bijective_in aT rT (d : mem_pred aT) (f : aT -> rT) := - exists2 g, prop_in1 d (inPhantom (cancel f g)) - & prop_on1 d (Phantom _ (cancel g)) (onPhantom (cancel g) f). - -Definition bijective_on aT rT (cd : mem_pred rT) (f : aT -> rT) := - exists2 g, prop_on1 cd (Phantom _ (cancel f)) (onPhantom (cancel f) g) - & prop_in1 cd (inPhantom (cancel g f)). - -Notation "{ 'for' x , P }" := - (prop_for x (inPhantom P)) - (at level 0, format "{ 'for' x , P }") : type_scope. - -Notation "{ 'in' d , P }" := - (prop_in1 (mem d) (inPhantom P)) - (at level 0, format "{ 'in' d , P }") : type_scope. - -Notation "{ 'in' d1 & d2 , P }" := - (prop_in11 (mem d1) (mem d2) (inPhantom P)) - (at level 0, format "{ 'in' d1 & d2 , P }") : type_scope. - -Notation "{ 'in' d & , P }" := - (prop_in2 (mem d) (inPhantom P)) - (at level 0, format "{ 'in' d & , P }") : type_scope. - -Notation "{ 'in' d1 & d2 & d3 , P }" := - (prop_in111 (mem d1) (mem d2) (mem d3) (inPhantom P)) - (at level 0, format "{ 'in' d1 & d2 & d3 , P }") : type_scope. - -Notation "{ 'in' d1 & & d3 , P }" := - (prop_in21 (mem d1) (mem d3) (inPhantom P)) - (at level 0, format "{ 'in' d1 & & d3 , P }") : type_scope. - -Notation "{ 'in' d1 & d2 & , P }" := - (prop_in12 (mem d1) (mem d2) (inPhantom P)) - (at level 0, format "{ 'in' d1 & d2 & , P }") : type_scope. - -Notation "{ 'in' d & & , P }" := - (prop_in3 (mem d) (inPhantom P)) - (at level 0, format "{ 'in' d & & , P }") : type_scope. - -Notation "{ 'on' cd , P }" := - (prop_on1 (mem cd) (inPhantom P) (inPhantom P)) - (at level 0, format "{ 'on' cd , P }") : type_scope. - -Notation "{ 'on' cd & , P }" := - (prop_on2 (mem cd) (inPhantom P) (inPhantom P)) - (at level 0, format "{ 'on' cd & , P }") : type_scope. - -Notation "{ 'on' cd , P & g }" := - (prop_on1 (mem cd) (Phantom (_ -> Prop) P) (onPhantom P g)) - (at level 0, format "{ 'on' cd , P & g }") : type_scope. - -Notation "{ 'in' d , 'bijective' f }" := (bijective_in (mem d) f) - (at level 0, f at level 8, - format "{ 'in' d , 'bijective' f }") : type_scope. - -Notation "{ 'on' cd , 'bijective' f }" := (bijective_on (mem cd) f) - (at level 0, f at level 8, - format "{ 'on' cd , 'bijective' f }") : type_scope. - -(* Weakening and monotonicity lemmas for localized predicates. *) -(* Note that using these lemmas in backward reasoning will *) -(* cause the expansion of the predicate definition, as Coq *) -(* needs to expose the quantifier to apply these lemmas. We *) -(* define some specialized variants to avoid this for some of *) -(* the ssrfun definitions. *) - -Section LocalGlobal. - -Variables T1 T2 T3 : predArgType. -Variables (D1 : pred T1) (D2 : pred T2) (D3 : pred T3). -Variables (d1 d1' : mem_pred T1) (d2 d2' : mem_pred T2) (d3 d3' : mem_pred T3). -Variables (f f' : T1 -> T2) (g : T2 -> T1) (h : T3). -Variables (P1 : T1 -> Prop) (P2 : T1 -> T2 -> Prop). -Variable P3 : T1 -> T2 -> T3 -> Prop. -Variable Q1 : (T1 -> T2) -> T1 -> Prop. -Variable Q1l : (T1 -> T2) -> T3 -> T1 -> Prop. -Variable Q2 : (T1 -> T2) -> T1 -> T1 -> Prop. - -Hypothesis sub1 : sub_mem d1 d1'. -Hypothesis sub2 : sub_mem d2 d2'. -Hypothesis sub3 : sub_mem d3 d3'. - -Lemma in1W : {all1 P1} -> {in D1, {all1 P1}}. -Proof. by red. Qed. -Lemma in2W : {all2 P2} -> {in D1 & D2, {all2 P2}}. -Proof. by red. Qed. -Lemma in3W : {all3 P3} -> {in D1 & D2 & D3, {all3 P3}}. -Proof. by red. Qed. - -Lemma in1T : {in T1, {all1 P1}} -> {all1 P1}. -Proof. auto. Qed. -Lemma in2T : {in T1 & T2, {all2 P2}} -> {all2 P2}. -Proof. auto. Qed. -Lemma in3T : {in T1 & T2 & T3, {all3 P3}} -> {all3 P3}. -Proof. auto. Qed. - -Lemma sub_in1 : forall Ph : ph {all1 P1}, - prop_in1 d1' Ph -> prop_in1 d1 Ph. -Proof. by intros ? allP x; move/sub1; apply allP. Qed. - -Lemma sub_in11 : forall Ph : ph {all2 P2}, - prop_in11 d1' d2' Ph -> prop_in11 d1 d2 Ph. -Proof. by intros ? allP x1 x2; move/sub1; intro d1x1; move/sub2; apply allP. Qed. - -Lemma sub_in111 : forall Ph : ph {all3 P3}, - prop_in111 d1' d2' d3' Ph -> prop_in111 d1 d2 d3 Ph. -Proof. -intros ? allP x1 x2 x3. -by move/sub1; intro; move/sub2; intro; move/sub3; apply allP. -Qed. - -Let allQ1 f'' := {all1 Q1 f''}. -Let allQ1l f'' h' := {all1 Q1l f'' h'}. -Let allQ2 f'' := {all2 Q2 f''}. - -Lemma on1W : allQ1 f -> {on D2, allQ1 f}. -Proof. by red. Qed. -Lemma on1lW : allQ1l f h -> {on D2, allQ1l f & h}. -Proof. by red. Qed. -Lemma on2W : allQ2 f -> {on D2 &, allQ2 f}. -Proof. by red. Qed. - -Lemma on1T : {on T2, allQ1 f} -> allQ1 f. -Proof. red; auto. Qed. -Lemma on1lT : {on T2, allQ1l f & h} -> allQ1l f h. -Proof. red; auto. Qed. -Lemma on2T : {on T2 &, allQ2 f} -> allQ2 f. -Proof. red; auto. Qed. - -Lemma subon1 : forall (Phf : ph (allQ1 f)) (Ph : ph (allQ1 f)), - prop_on1 d2' Phf Ph -> prop_on1 d2 Phf Ph. -Proof. by intros ? ? allQ x; move/sub2; apply allQ. Qed. - -Lemma subon1l : forall (Phf : ph (allQ1l f)) (Ph : ph (allQ1l f h)), - prop_on1 d2' Phf Ph -> prop_on1 d2 Phf Ph. -Proof. by intros ? ? allQ x; move/sub2; apply allQ. Qed. - -Lemma subon2 : forall (Phf : ph (allQ2 f)) (Ph : ph (allQ2 f)), - prop_on2 d2' Phf Ph -> prop_on2 d2 Phf Ph. -Proof. by intros ? ? allQ x y; move/sub2; intro; move/sub2; apply allQ. Qed. - -Lemma can_in_inj : {in D1, cancel f g} -> {in D1 &, injective f}. -Proof. intros fK x y; do 2 (move/fK; intro); congruence. Qed. - -Lemma canLR_in : forall x y, - {in D1, cancel f g} -> y \in D1 -> x = f y -> g x = y. -Proof. by intros x y fK D1y ->; rewrite fK. Qed. - -Lemma canRL_in : forall x y, - {in D1, cancel f g} -> x \in D1 -> f x = y -> x = g y. -Proof. by intros x y fK D1x <-; rewrite fK. Qed. - -Lemma on_can_inj : {on D2, cancel f & g} -> {on D2 &, injective f}. -Proof. intros fK x y; do 2 (move/fK; intro); congruence. Qed. - -Lemma canLR_on : forall x y, - {on D2, cancel f & g} -> f y \in D2 -> x = f y -> g x = y. -Proof. by intros x y fK D2fy ->; rewrite fK. Qed. - -Lemma canRL_on : forall x y, - {on D2, cancel f & g} -> f x \in D2 -> f x = y -> x = g y. -Proof. by intros x y fK D2fx <-; rewrite fK. Qed. - -Lemma inW_bij : bijective f -> {in D1, bijective f}. -Proof. by destruct 1 as [g']; exists g'; red; auto. Qed. - -Lemma onW_bij : bijective f -> {on D2, bijective f}. -Proof. by destruct 1 as [g']; exists g'; red; auto. Qed. - -Lemma inT_bij : {in T1, bijective f} -> bijective f. -Proof. destruct 1 as [g']; exists g'; red; auto. Qed. - -Lemma onT_bij : {on T2, bijective f} -> bijective f. -Proof. destruct 1 as [g']; exists g'; red; auto. Qed. - -Lemma sub_in_bij : forall D1' : pred T1, - {subset D1 <= D1'} -> {in D1', bijective f} -> {in D1, bijective f}. -Proof. destruct 2 as [g']; eexists g'; red; auto. Qed. - -Lemma subon_bij : forall D2' : pred T2, - {subset D2 <= D2'} -> {on D2', bijective f} -> {on D2, bijective f}. -Proof. destruct 2 as [g']; eexists g'; red; auto. Qed. - -End LocalGlobal. - -Lemma sub_in2 : forall T d d' (P : T -> T -> Prop), - sub_mem d d' -> forall Ph : ph {all2 P}, prop_in2 d' Ph -> prop_in2 d Ph. -Proof. by intros until 1; apply sub_in11. Qed. - -Lemma sub_in3 : forall T d d' (P : T -> T -> T -> Prop), - sub_mem d d' -> forall Ph : ph {all3 P}, prop_in3 d' Ph -> prop_in3 d Ph. -Proof. by intros until 1; apply sub_in111. Qed. - -Lemma sub_in12 : forall T1 T d1 d1' d d' (P : T1 -> T -> T -> Prop), - sub_mem d1 d1' -> sub_mem d d' -> - forall Ph : ph {all3 P}, prop_in12 d1' d' Ph -> prop_in12 d1 d Ph. -Proof. by intros until 2; apply sub_in111. Qed. - -Lemma sub_in21 : forall T T3 d d' d3 d3' (P : T -> T -> T3 -> Prop), - sub_mem d d' -> sub_mem d3 d3' -> - forall Ph : ph {all3 P}, prop_in21 d' d3' Ph -> prop_in21 d d3 Ph. -Proof. by intros until 2; apply sub_in111. Qed. - -*) - -(** Comparison for [nat] *) - -Fixpoint eqn_rec (x y: nat) {struct x} := - match x, y with - | O, O => true - | S x, S y => eqn_rec x y - | _, _ => false - end. - -Definition eqn := match tt with tt => eqn_rec end. - -Lemma eqnP: forall x y, reflect (x = y) (eqn x y). -Proof. - induction[] x [y]; vauto. - change (eqn (S x) (S y)) with (eqn x y). - case IHx; constructor; congruence. -Qed. - -Canonical Structure nat_eqMixin := EqMixin eqnP. -Canonical Structure nat_eqType := Eval hnf in EqType nat nat_eqMixin. - -Lemma eqnE : eqn = (@eq_op _). -Proof. done. Qed. -*)</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/arrival_sequence.html b/arrival_sequence.html deleted file mode 100644 index cc3c33938..000000000 --- a/arrival_sequence.html +++ /dev/null @@ -1,151 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>arrival_sequence</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library arrival_sequence</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="comment">(* Definitions and properties of job arrival sequences. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="ArrivalSequence"><span class="id" type="module">ArrivalSequence</span></a>.<br/> - -<br/> - <span class="comment">(* Let time be the set of natural numbers. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.time"><span class="id" type="definition">time</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we define a job arrival sequence (can be infinite). *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ArrivalSequence.ArrivalSequenceDef"><span class="id" type="section">ArrivalSequenceDef</span></a>.<br/> - -<br/> - <span class="comment">(* Given any job type with decidable equality, ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ArrivalSequence.ArrivalSequenceDef.Job"><span class="id" type="variable">Job</span></a>: <span class="id" type="abbreviation">eqType</span>.<br/> - -<br/> - <span class="comment">(* ..., an arrival sequence is a mapping from time to a sequence of jobs. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> := <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a> -> <span class="id" type="abbreviation">seq</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceDef.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceDef"><span class="id" type="section">ArrivalSequenceDef</span></a>.<br/> - -<br/> - <span class="comment">(* Note that Job denotes the universe of all possible jobs.<br/> - In order to distinguish jobs of different arrival sequences, next we<br/> - define a subtype of Job called JobIn. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ArrivalSequence.JobInArrivalSequence"><span class="id" type="section">JobInArrivalSequence</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - -<br/> - <span class="comment">(* Whether a job arrives in a particular sequence at time t *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.arrives_at"><span class="id" type="definition">arrives_at</span></a> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>) (<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>) (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="arrival_sequence.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="comment">(* A job j of type (JobIn arr_seq) is a job that arrives at some particular<br/> - time in arr_seq. It holds the arrival time and a proof of arrival. *)</span><br/> - <span class="id" type="keyword">Record</span> <a name="ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> (<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>) : <span class="id" type="keyword">Type</span> :=<br/> - {<br/> - <a name="ArrivalSequence._job_in"><span class="id" type="projection">_job_in</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>;<br/> - <a name="ArrivalSequence._arrival_time"><span class="id" type="projection">_arrival_time</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>; <span class="comment">(* arrival time *)</span><br/> - <span class="id" type="var">_</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrives_at"><span class="id" type="definition">arrives_at</span></a> <a class="idref" href="arrival_sequence.html#_job_in"><span class="id" type="method">_job_in</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#_arrival_time"><span class="id" type="method">_arrival_time</span></a> <span class="comment">(* proof of arrival *)</span><br/> - }.<br/> - -<br/> - <span class="comment">(* Define a coercion that states that every JobIn is a Job. *)</span><br/> - <span class="id" type="keyword">Coercion</span> <span class="id" type="var">JobIn_is_Job</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>} (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a>) :=<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence._job_in"><span class="id" type="projection">_job_in</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Define job arrival time as that time that the job arrives (only works for JobIn). *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>} (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a>) :=<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence._arrival_time"><span class="id" type="projection">_arrival_time</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Finally, we assume a decidable equality for JobIn, to make it compatible<br/> - with ssreflect. TODO: Is there a better way to do this? *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.jobin_eqdef"><span class="id" type="definition">jobin_eqdef</span></a> (<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence.Job"><span class="id" type="variable">Job</span></a>) :=<br/> - (<span class="id" type="keyword">fun</span> <span class="id" type="var">j1</span> <span class="id" type="var">j2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a> => <span class="id" type="notation">(</span><a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn_is_Job"><span class="id" type="definition">JobIn_is_Job</span></a> <a class="idref" href="arrival_sequence.html#j1"><span class="id" type="variable">j1</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">==</span> <span class="id" type="notation">(</span><a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn_is_Job"><span class="id" type="definition">JobIn_is_Job</span></a> <a class="idref" href="arrival_sequence.html#j2"><span class="id" type="variable">j2</span></a><span class="id" type="notation">)</span>).<br/> - <span class="id" type="keyword">Axiom</span> <a name="ArrivalSequence.eqn_jobin"><span class="id" type="axiom">eqn_jobin</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">arr_seq</span>, <span class="id" type="definition">Equality.axiom</span> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.jobin_eqdef"><span class="id" type="definition">jobin_eqdef</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a>).<br/> - <span class="id" type="keyword">Canonical</span> <span class="id" type="var">jobin_eqMixin</span> <span class="id" type="var">arr_seq</span> := <span class="id" type="abbreviation">EqMixin</span> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.eqn_jobin"><span class="id" type="axiom">eqn_jobin</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a>).<br/> - <span class="id" type="keyword">Canonical</span> <span class="id" type="var">jobin_eqType</span> <span class="id" type="var">arr_seq</span> := <span class="id" type="keyword">Eval</span> <span class="id" type="tactic">hnf</span> <span class="id" type="keyword">in</span> <span class="id" type="abbreviation">EqType</span> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a>) (<a class="idref" href="arrival_sequence.html#ArrivalSequence.jobin_eqMixin"><span class="id" type="definition">jobin_eqMixin</span></a> <a class="idref" href="arrival_sequence.html#arr_seq"><span class="id" type="variable">arr_seq</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence"><span class="id" type="section">JobInArrivalSequence</span></a>.<br/> - -<br/> - <span class="comment">(* A valid arrival sequence must satisfy some properties. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ArrivalSequence.ArrivalSequenceProperties"><span class="id" type="section">ArrivalSequenceProperties</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ArrivalSequence.ArrivalSequenceProperties.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* The same job j cannot arrive at two different times. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.no_multiple_arrivals"><span class="id" type="definition">no_multiple_arrivals</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.Job"><span class="id" type="variable">Job</span></a>) <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrives_at"><span class="id" type="definition">arrives_at</span></a> <a class="idref" href="arrival_sequence.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#t1"><span class="id" type="variable">t1</span></a> -> <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrives_at"><span class="id" type="definition">arrives_at</span></a> <a class="idref" href="arrival_sequence.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#t2"><span class="id" type="variable">t2</span></a> -> <a class="idref" href="arrival_sequence.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="arrival_sequence.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* The sequence of arrivals at a particular time has no duplicates. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.arrival_sequence_is_a_set"><span class="id" type="definition">arrival_sequence_is_a_set</span></a> := <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>, <span class="id" type="definition">uniq</span> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="arrival_sequence.html#t"><span class="id" type="variable">t</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties"><span class="id" type="section">ArrivalSequenceProperties</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we define whether a job has arrived in an interval. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ArrivalSequence.ArrivingJobs"><span class="id" type="section">ArrivingJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.Job"><span class="id" type="variable">Job</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ArrivalSequence.ArrivingJobs.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* A job has arrived at time t iff it arrives at some time t_0, with 0 <= t_0 <= t. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.has_arrived"><span class="id" type="definition">has_arrived</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) := <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="comment">(* A job arrived before t iff it arrives at some time t_0, with 0 <= t_0 < t. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.arrived_before"><span class="id" type="definition">arrived_before</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) := <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="comment">(* A job arrives between t1 and t2 iff it arrives at some time t with t1 <= t < t2. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ArrivalSequence.arrived_between"><span class="id" type="definition">arrived_between</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) := <a class="idref" href="arrival_sequence.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.ArrivingJobs"><span class="id" type="section">ArrivingJobs</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="arrival_sequence.html#"><span class="id" type="module">ArrivalSequence</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/bertogna_edf_comp.html b/bertogna_edf_comp.html deleted file mode 100644 index 38312d17e..000000000 --- a/bertogna_edf_comp.html +++ /dev/null @@ -1,473 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>bertogna_edf_comp</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library bertogna_edf_comp</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="platform.html#"><span class="id" type="library">platform</span></a> <a class="idref" href="interference.html#"><span class="id" type="library">interference</span></a><br/> - <a class="idref" href="workload.html#"><span class="id" type="library">workload</span></a> <a class="idref" href="workload_bound.html#"><span class="id" type="library">workload_bound</span></a> <a class="idref" href="schedulability.html#"><span class="id" type="library">schedulability</span></a> <a class="idref" href="priority.html#"><span class="id" type="library">priority</span></a> <a class="idref" href="response_time.html#"><span class="id" type="library">response_time</span></a><br/> - <a class="idref" href="bertogna_fp_theory.html#"><span class="id" type="library">bertogna_fp_theory</span></a> <a class="idref" href="bertogna_edf_theory.html#"><span class="id" type="library">bertogna_edf_theory</span></a> <a class="idref" href="interference_bound_edf.html#"><span class="id" type="library">interference_bound_edf</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">div</span> <span class="id" type="library">path</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="ResponseTimeIterationEDF"><span class="id" type="module">ResponseTimeIterationEDF</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Job</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">ScheduleOfSporadicTask</span> <span class="id" type="var">Workload</span> <span class="id" type="var">Schedulability</span> <span class="id" type="var">ResponseTime</span><br/> - <span class="id" type="var">Priority</span> <span class="id" type="var">SporadicTaskArrival</span> <span class="id" type="var">WorkloadBound</span> <span class="id" type="var">EDFSpecificBound</span> <span class="id" type="var">ResponseTimeAnalysisFP</span><br/> - <span class="id" type="var">ResponseTimeAnalysisEDF</span>.<br/> - -<br/> - <span class="comment">(* In this section, we define the algorithm of Bertogna and Cirinei's<br/> - response-time analysis for EDF scheduling. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis"><span class="id" type="section">Analysis</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* During the iterations of the algorithm, we pass around pairs<br/> - of tasks and computed response-time bounds. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a> := (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>)%<span class="id" type="var">type</span>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Consider a platform with num_cpus processors. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* First, recall the interference bound under EDF, ... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.I"><span class="id" type="variable">I</span></a> (<span class="id" type="var">rt_bounds</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>)<br/> - (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.total_interference_bound_edf"><span class="id" type="definition">total_interference_bound_edf</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <span class="id" type="keyword">delta</span>.<br/> - -<br/> - <span class="comment">(* ..., which yields the following response-time bound. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.edf_response_time_bound"><span class="id" type="definition">edf_response_time_bound</span></a> (<span class="id" type="var">rt_bounds</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>)<br/> - (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.I"><span class="id" type="variable">I</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="keyword">delta</span>) <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="comment">(* Also note that a response-time is only valid if it is no larger<br/> - than the deadline. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.R_le_deadline"><span class="id" type="definition">R_le_deadline</span></a> (<span class="id" type="var">pair</span>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>) :=<br/> - <span class="id" type="keyword">let</span> (<span class="id" type="var">tsk</span>, <span class="id" type="var">R</span>) := <a class="idref" href="bertogna_edf_comp.html#pair"><span class="id" type="variable">pair</span></a> <span class="id" type="keyword">in</span><br/> - <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Next we define the fixed-point iteration for computing<br/> - Bertogna's response-time bound of a task set. *)</span><br/> - -<br/> - <span class="comment">(* Given a sequence 'rt_bounds' of task and response-time bounds<br/> - from the previous iteration, we compute the response-time<br/> - bound of a single task using the RTA for EDF. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.update_bound"><span class="id" type="definition">update_bound</span></a> (<span class="id" type="var">rt_bounds</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>)<br/> - (<span class="id" type="var">pair</span> : <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>) :=<br/> - <span class="id" type="keyword">let</span> (<span class="id" type="var">tsk</span>, <span class="id" type="var">R</span>) := <a class="idref" href="bertogna_edf_comp.html#pair"><span class="id" type="variable">pair</span></a> <span class="id" type="keyword">in</span><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_response_time_bound"><span class="id" type="definition">edf_response_time_bound</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="comment">(* To compute the response-time bounds of the entire task set,<br/> - We start the iteration with a sequence of tasks and costs:<br/> - <(task1, cost1), (task2, cost2), ...>. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> (<span class="id" type="var">ts</span>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <span class="id" type="definition">map</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">t</span> => <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#t"><span class="id" type="variable">t</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#t"><span class="id" type="variable">t</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>) <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* Then, we successively update the the response-time bounds based<br/> - on the slack computed in the previous iteration. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> (<span class="id" type="var">rt_bounds</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>) :=<br/> - <span class="id" type="definition">map</span> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.update_bound"><span class="id" type="definition">update_bound</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a>) <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* To ensure that the procedure converges, we run the iteration a<br/> - "sufficient" number of times: task_deadline tsk - task_cost tsk + 1.<br/> - This corresponds to the time complexity of the procedure. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> (<span class="id" type="var">ts</span>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <span class="id" type="var">tsk</span> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <span class="id" type="var">tsk</span><span class="id" type="notation">)</span> <span class="id" type="notation">+</span> 1.<br/> - -<br/> - <span class="comment">(* This yields the following definition for the RTA. At the end of<br/> - the iteration, we check if all computed response-time bounds<br/> - are less than or equal to the deadline, in which case they are<br/> - valid. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> (<span class="id" type="var">ts</span>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">R_values</span> := <span class="id" type="definition">iter</span> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a>) <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a>) <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">if</span> <span class="id" type="notation">(</span><span class="id" type="definition">all</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.R_le_deadline"><span class="id" type="definition">R_le_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#R_values"><span class="id" type="variable">R_values</span></a><span class="id" type="notation">)</span> <span class="id" type="keyword">then</span><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_edf_comp.html#R_values"><span class="id" type="variable">R_values</span></a><br/> - <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a>.<br/> - -<br/> - <span class="comment">(* The schedulability test simply checks if we got a list of<br/> - response-time bounds (i.e., if the computation did not fail). *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.edf_schedulable"><span class="id" type="definition">edf_schedulable</span></a> (<span class="id" type="var">ts</span>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a>.<br/> - -<br/> - <span class="comment">(* In the following section, we prove several helper lemmas about the<br/> - list of tasks/response-time bounds. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis.SimpleLemmas"><span class="id" type="section">SimpleLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Updating a single response-time bound does not modify the task. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_update_bound"><span class="id" type="lemma">edf_claimed_bounds_unzip1_update_bound</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">l</span> <span class="id" type="var">rt_bounds</span>,<br/> - <span class="id" type="definition">unzip1</span> (<span class="id" type="definition">map</span> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.update_bound"><span class="id" type="definition">update_bound</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a>) <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>.<br/> - -<br/> - <span class="comment">(* At any point of the iteration, the tasks are the same. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_iteration"><span class="id" type="lemma">edf_claimed_bounds_unzip1_iteration</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">l</span> <span class="id" type="var">k</span>,<br/> - <span class="id" type="definition">unzip1</span> (<span class="id" type="definition">iter</span> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>)) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>.<br/> - <span class="comment">(* The iteration preserves the size of the list. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_size"><span class="id" type="lemma">edf_claimed_bounds_size</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">l</span> <span class="id" type="var">k</span>,<br/> - <span class="id" type="definition">size</span> (<span class="id" type="definition">iter</span> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>)) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">size</span> <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>.<br/> - -<br/> - <span class="comment">(* If the analysis succeeds, the computed response-time bounds are no smaller<br/> - than the task cost. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_ge_cost"><span class="id" type="lemma">edf_claimed_bounds_ge_cost</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">l</span> <span class="id" type="var">k</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><span class="id" type="definition">iter</span> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#l"><span class="id" type="variable">l</span></a>)<span class="id" type="notation">)</span> -><br/> - <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="comment">(* If the analysis suceeds, the computed response-time bounds are no larger<br/> - than the deadline. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_le_deadline"><span class="id" type="lemma">edf_claimed_bounds_le_deadline</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts</span> <span class="id" type="var">rt_bounds</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* The list contains a response-time bound for every task in the task set. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_has_R_for_every_task"><span class="id" type="lemma">edf_claimed_bounds_has_R_for_every_task</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts</span> <span class="id" type="var">rt_bounds</span> <span class="id" type="var">tsk</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#ts"><span class="id" type="variable">ts</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">R</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.SimpleLemmas"><span class="id" type="section">SimpleLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* As required by the proof of convergence, we show that the<br/> - interference bound is monotonically increasing with both<br/> - the size of the interval and the value of the previous<br/> - response-time bounds.<br/> - TODO: move to bertogna_edf_theory.v? *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound"><span class="id" type="section">MonotonicityOfInterferenceBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk"><span class="id" type="variable">tsk</span></a> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other"><span class="id" type="variable">tsk_other</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_period_positive"><span class="id" type="variable">H_period_positive</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <span class="id" type="keyword">delta</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'"><span class="id" type="variable">delta'</span></a> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R"><span class="id" type="variable">R</span></a> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'"><span class="id" type="variable">R'</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_delta_monotonic"><span class="id" type="variable">H_delta_monotonic</span></a>: <span class="id" type="keyword">delta</span> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'"><span class="id" type="variable">delta'</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_response_time_monotonic"><span class="id" type="variable">H_response_time_monotonic</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'"><span class="id" type="variable">R'</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_cost_le_rt_bound"><span class="id" type="variable">H_cost_le_rt_bound</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R"><span class="id" type="variable">R</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.interference_bound_edf_monotonic"><span class="id" type="lemma">interference_bound_edf_monotonic</span></a> :<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.interference_bound_edf"><span class="id" type="definition">interference_bound_edf</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="keyword">delta</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation"><=</span><br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.interference_bound_edf"><span class="id" type="definition">interference_bound_edf</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'"><span class="id" type="variable">delta'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'"><span class="id" type="variable">R'</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound"><span class="id" type="section">MonotonicityOfInterferenceBound</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove the convergence of the RTA procedure.<br/> - Since we define the RTA procedure as the application of a function<br/> - a fixed number of times, this translates into proving that the value<br/> - of the iteration at (max_steps ts) is equal to the value at (max_steps ts) + 1. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence"><span class="id" type="section">Convergence</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any valid task set. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* To simplify, let f denote the RTA procedure. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<span class="id" type="var">k</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) := <span class="id" type="definition">iter</span> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>).<br/> - -<br/> - <span class="comment">(* Since the iteration is applied directly to a list of tasks and response-times,<br/> - we define a corresponding relation "<=" over those lists. *)</span><br/> - -<br/> - <span class="comment">(* Let 'all_le' be a binary relation over lists of tasks/response-time bounds.<br/> - It states that every element of list l1 has a response-time bound R that is less<br/> - than or equal to the corresponding response-time bound R' in list l2 (point-wise).<br/> - In addition, the relation states that the tasks of both lists are unchanged. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a> := <span class="id" type="keyword">fun</span> (<span class="id" type="var">l1</span> <span class="id" type="var">l2</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>) =><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a> <span class="id" type="notation">==</span> <span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_edf_comp.html#l2"><span class="id" type="variable">l2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a><br/> - <span class="id" type="definition">all</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">p</span> => <span class="id" type="notation">(</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="bertogna_edf_comp.html#p"><span class="id" type="variable">p</span></a>)<span class="id" type="notation">)</span> <span class="id" type="notation"><=</span> <span class="id" type="notation">(</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="bertogna_edf_comp.html#p"><span class="id" type="variable">p</span></a>)<span class="id" type="notation">)</span>) (<span class="id" type="definition">zip</span> <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="bertogna_edf_comp.html#l2"><span class="id" type="variable">l2</span></a>).<br/> - -<br/> - <span class="comment">(* Similarly, we define a strict version of 'all_le' called 'one_lt', which states that<br/> - there exists at least one element whose response-time bound increases. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.one_lt"><span class="id" type="variable">one_lt</span></a> := <span class="id" type="keyword">fun</span> (<span class="id" type="var">l1</span> <span class="id" type="var">l2</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>) =><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a> <span class="id" type="notation">==</span> <span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_edf_comp.html#l2"><span class="id" type="variable">l2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a><br/> - <span class="id" type="definition">has</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">p</span> => <span class="id" type="notation">(</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="bertogna_edf_comp.html#p"><span class="id" type="variable">p</span></a>)<span class="id" type="notation">)</span> <span class="id" type="notation"><</span> <span class="id" type="notation">(</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="bertogna_edf_comp.html#p"><span class="id" type="variable">p</span></a>)<span class="id" type="notation">)</span>) (<span class="id" type="definition">zip</span> <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="bertogna_edf_comp.html#l2"><span class="id" type="variable">l2</span></a>).<br/> - -<br/> - <span class="comment">(* Next, we prove some basic properties about the relation all_le. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.RelationProperties"><span class="id" type="section">RelationProperties</span></a>.<br/> - -<br/> - <span class="comment">(* The relation is reflexive, ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.all_le_reflexive"><span class="id" type="lemma">all_le_reflexive</span></a> : <span class="id" type="definition">reflexive</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a>.<br/> - -<br/> - <span class="comment">(* ... and transitive. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.all_le_transitive"><span class="id" type="lemma">all_le_transitive</span></a>: <span class="id" type="definition">transitive</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a>.<br/> - -<br/> - <span class="comment">(* At any step of the iteration, the corresponding list<br/> - is larger than or equal to the initial state. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_minimum"><span class="id" type="lemma">bertogna_edf_comp_iteration_preserves_minimum</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">step</span>, <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>) (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#step"><span class="id" type="variable">step</span></a>).<br/> - -<br/> - <span class="comment">(* As a last step, we show that edf_rta_iteration preserves order, i.e., for any<br/> - list l1 no smaller than the initial state, and list l2 such that<br/> - l1 <= l2, we have (edf_rta_iteration l1) <= (edf_rta_iteration l2). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_order"><span class="id" type="lemma">bertogna_edf_comp_iteration_preserves_order</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">l1</span> <span class="id" type="var">l2</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state"><span class="id" type="variable">initial_state</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>) <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a> -><br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a> <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="bertogna_edf_comp.html#l2"><span class="id" type="variable">l2</span></a> -><br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> <a class="idref" href="bertogna_edf_comp.html#l1"><span class="id" type="variable">l1</span></a>) (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration"><span class="id" type="definition">edf_rta_iteration</span></a> <a class="idref" href="bertogna_edf_comp.html#l2"><span class="id" type="variable">l2</span></a>).<br/> - <span class="comment">(* It follows from the properties above that the iteration is monotonically increasing. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_iteration_monotonic"><span class="id" type="lemma">bertogna_edf_comp_iteration_monotonic</span></a>: <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>, <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le"><span class="id" type="variable">all_le</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a>) (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.RelationProperties"><span class="id" type="section">RelationProperties</span></a>.<br/> - -<br/> - <span class="comment">(* Knowing that the iteration is monotonically increasing (with respect to all_le),<br/> - we show that the RTA procedure converges to a fixed point. *)</span><br/> - -<br/> - <span class="comment">(* First, note that when there are no tasks, the iteration trivially converges. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_with_no_tasks"><span class="id" type="lemma">bertogna_edf_comp_f_converges_with_no_tasks</span></a> :<br/> - <span class="id" type="definition">size</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0 -><br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <span class="id" type="notation">(</span><a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">).+1</span>.<br/> - -<br/> - <span class="comment">(* Otherwise, if the iteration reached a fixed point before (max_steps ts), then<br/> - the value at (max_steps ts) is still at a fixed point. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_early"><span class="id" type="lemma">bertogna_edf_comp_f_converges_early</span></a> :<br/> - (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">k</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>) -><br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <span class="id" type="notation">(</span><a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">).+1</span>.<br/> - -<br/> - <span class="comment">(* Else, we derive a contradiction. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that there are tasks. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_at_least_one_task"><span class="id" type="variable">H_at_least_one_task</span></a>: <span class="id" type="definition">size</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* Assume that the iteration continued to diverge. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_keeps_diverging"><span class="id" type="variable">H_keeps_diverging</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>.<br/> - -<br/> - <span class="comment">(* Since the iteration is monotonically increasing, it must be<br/> - strictly increasing. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_f_increases"><span class="id" type="lemma">bertogna_edf_comp_f_increases</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.one_lt"><span class="id" type="variable">one_lt</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a>) (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>).<br/> - <span class="comment">(* In the end, each response-time bound is so high that the sum<br/> - of all response-time bounds exceeds the sum of all deadlines.<br/> - Contradiction! *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.bertogna_edf_comp_rt_grows_too_much"><span class="id" type="lemma">bertogna_edf_comp_rt_grows_too_much</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> -><br/> - <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">sum_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">((</span></a><span class="id" type="var">tsk</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">,</span></a> <span class="id" type="var">R</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation"><-</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">(</span></a><span class="id" type="var">R</span> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <span class="id" type="var">tsk</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">)</span></a> <span class="id" type="notation">+</span> 1 <span class="id" type="notation">></span> <a class="idref" href="bertogna_edf_comp.html#k"><span class="id" type="variable">k</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="comment">(* Using the lemmas above, we prove that edf_rta_iteration reaches a fixed point<br/> - after (max_steps ts) iterations, ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_converges_helper"><span class="id" type="lemma">edf_claimed_bounds_converges_helper</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">rt_bounds</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> -><br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <span class="id" type="notation">(</span><a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps"><span class="id" type="variable">max_steps</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">).+1</span>.<br/> - <span class="comment">(* Either the task set is empty or not. *)</span><br/> - <span class="comment">(* Either f converges by the deadline or not. *)</span><br/> - If not, then we reach a contradiction *)</span><br/> - Show that the sum is less than the sum of all deadlines. *)</span><br/> - -<br/> - <span class="comment">(* ..., which in turn implies that the response-time bound is the fixed<br/> - point from Bertogna and Cirinei's equation. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationEDF.edf_claimed_bounds_converges"><span class="id" type="lemma">edf_claimed_bounds_converges</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span> <span class="id" type="var">rt_bounds</span>,<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> (<a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.I"><span class="id" type="variable">I</span></a> <a class="idref" href="bertogna_edf_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a>) <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence"><span class="id" type="section">Convergence</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="comment">(* Consider a task set ts. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the task set has no duplicates, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_ts_is_a_set"><span class="id" type="variable">H_ts_is_a_set</span></a>: <span class="id" type="definition">uniq</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...all tasks have valid parameters, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...restricted deadlines, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_restricted_deadlines"><span class="id" type="variable">H_restricted_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Next, consider any arrival sequence such that...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ...all jobs come from task set ts, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_all_jobs_from_taskset"><span class="id" type="variable">H_all_jobs_from_taskset</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_comp.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...they have valid parameters,...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_valid_job_parameters"><span class="id" type="variable">H_valid_job_parameters</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_comp.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* ... and satisfy the sporadic task model.*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_sporadic_tasks"><span class="id" type="variable">H_sporadic_tasks</span></a>:<br/> - <a class="idref" href="task_arrival.html#SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a>.<br/> - -<br/> - <span class="comment">(* Then, consider any platform with at least one CPU such that...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_at_least_one_cpu"><span class="id" type="variable">H_at_least_one_cpu</span></a> :<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* ...jobs only execute after they arrived and no longer<br/> - than their execution costs,... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_jobs_must_arrive_to_execute"><span class="id" type="variable">H_jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* ...and do not execute in parallel. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* In order not to overcount job interference, we assume that<br/> - jobs of the same task do not execute in parallel.<br/> - Our proof requires a definition of interference based on<br/> - the sum of the individual contributions of each job:<br/> - I_total = I_j1 + I_j2 + ...<br/> - Note that under EDF, this is equivalent to task precedence<br/> - constraints. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_no_intra_task_parallelism"><span class="id" type="variable">H_no_intra_task_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel"><span class="id" type="definition">jobs_of_same_task_dont_execute_in_parallel</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the schedule satisfies the global scheduling<br/> - invariant with EDF priority, i.e., if any job of tsk is<br/> - backlogged, every processor must be busy with jobs with<br/> - no greater absolute deadline. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> :=<br/> - @<a class="idref" href="priority.html#Priority.EDF"><span class="id" type="definition">EDF</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Job"><span class="id" type="variable">Job</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a>. <span class="comment">(* TODO: implicit params seems broken *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_global_scheduling_invariant"><span class="id" type="variable">H_global_scheduling_invariant</span></a>:<br/> - <a class="idref" href="platform.html#Platform.JLFP_JLDP_scheduling_invariant_holds"><span class="id" type="definition">JLFP_JLDP_scheduling_invariant_holds</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.no_deadline_missed_by_task"><span class="id" type="definition">no_deadline_missed_by_task</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationEDF.no_deadline_missed_by_job"><span class="id" type="definition">no_deadline_missed_by_job</span></a> :=<br/> - <a class="idref" href="schedulability.html#Schedulability.job_misses_no_deadline"><span class="id" type="definition">job_misses_no_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* In the following theorem, we prove that any response-time bound contained<br/> - in edf_claimed_bounds is safe. The proof follows by direct application of<br/> - the main Theorem from bertogna_edf_theory.v. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeIterationEDF.edf_analysis_yields_response_time_bounds"><span class="id" type="lemma">edf_analysis_yields_response_time_bounds</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:bool_scope:x_'\In'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:bool_scope:x_'\In'_x"><span class="id" type="notation">In</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds"><span class="id" type="definition">edf_claimed_bounds</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> -><br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> : <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>,<br/> - <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_comp.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_comp.html#j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_comp.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_comp.html#R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* Therefore, if the schedulability test suceeds, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationEDF.Analysis.MainProof.H_test_succeeds"><span class="id" type="variable">H_test_succeeds</span></a>: <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_schedulable"><span class="id" type="definition">edf_schedulable</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(*... no task misses its deadline. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeIterationEDF.taskset_schedulable_by_edf_rta"><span class="id" type="lemma">taskset_schedulable_by_edf_rta</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.no_deadline_missed_by_task"><span class="id" type="definition">no_deadline_missed_by_task</span></a> <a class="idref" href="bertogna_edf_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* For completeness, since all jobs of the arrival sequence<br/> - are spawned by the task set, we conclude that no job misses<br/> - its deadline. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeIterationEDF.jobs_schedulable_by_edf_rta"><span class="id" type="lemma">jobs_schedulable_by_edf_rta</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.no_deadline_missed_by_job"><span class="id" type="definition">no_deadline_missed_by_job</span></a> <a class="idref" href="bertogna_edf_comp.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis"><span class="id" type="section">Analysis</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_comp.html#"><span class="id" type="module">ResponseTimeIterationEDF</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/bertogna_edf_theory.html b/bertogna_edf_theory.html deleted file mode 100644 index 4ab568b76..000000000 --- a/bertogna_edf_theory.html +++ /dev/null @@ -1,415 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>bertogna_edf_theory</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library bertogna_edf_theory</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="platform.html#"><span class="id" type="library">platform</span></a> <a class="idref" href="interference.html#"><span class="id" type="library">interference</span></a><br/> - <a class="idref" href="workload.html#"><span class="id" type="library">workload</span></a> <a class="idref" href="workload_bound.html#"><span class="id" type="library">workload_bound</span></a> <a class="idref" href="schedulability.html#"><span class="id" type="library">schedulability</span></a> <a class="idref" href="priority.html#"><span class="id" type="library">priority</span></a> <a class="idref" href="response_time.html#"><span class="id" type="library">response_time</span></a><br/> - <a class="idref" href="bertogna_fp_theory.html#"><span class="id" type="library">bertogna_fp_theory</span></a> <a class="idref" href="interference_bound_edf.html#"><span class="id" type="library">interference_bound_edf</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">div</span> <span class="id" type="library">path</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="ResponseTimeAnalysisEDF"><span class="id" type="module">ResponseTimeAnalysisEDF</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Job</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">ScheduleOfSporadicTask</span> <span class="id" type="var">Workload</span> <span class="id" type="var">Schedulability</span> <span class="id" type="var">ResponseTime</span><br/> - <span class="id" type="var">Priority</span> <span class="id" type="var">SporadicTaskArrival</span> <span class="id" type="var">WorkloadBound</span> <span class="id" type="var">EDFSpecificBound</span> <span class="id" type="var">ResponseTimeAnalysisFP</span>.<br/> - -<br/> - <span class="comment">(* In the following section, we define Bertogna and Cirinei's<br/> - interference bound for EDF scheduling. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF"><span class="id" type="section">TotalInterferenceBoundEDF</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Let tsk be the task to be analyzed. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a> := (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>)%<span class="id" type="var">type</span>.<br/> - -<br/> - <span class="comment">(* Assume a known response-time bound for each interfering task ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.R_prev"><span class="id" type="variable">R_prev</span></a>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - -<br/> - <span class="comment">(* ... and an interval length delta. *)</span><br/> - <span class="id" type="keyword">Variable</span> <span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask"><span class="id" type="section">PerTask</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_other"><span class="id" type="variable">tsk_other</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.R_other"><span class="id" type="variable">R_other</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>.<br/> - -<br/> - <span class="comment">(* By combining Bertogna's interference bound for a work-conserving<br/> - scheduler ... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.basic_interference_bound"><span class="id" type="variable">basic_interference_bound</span></a> := <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.interference_bound_fp"><span class="id" type="definition">interference_bound_fp</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="keyword">delta</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>.<br/> - -<br/> - <span class="comment">(* ... with and EDF-specific interference bound, ... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.edf_specific_bound"><span class="id" type="variable">edf_specific_bound</span></a> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.edf_specific_interference_bound"><span class="id" type="definition">edf_specific_interference_bound</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.R_other"><span class="id" type="variable">R_other</span></a>.<br/> - -<br/> - <span class="comment">(* Bertogna and Cirinei define the following interference bound<br/> - under EDF scheduling. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeAnalysisEDF.interference_bound_edf"><span class="id" type="definition">interference_bound_edf</span></a> :=<br/> - <span class="id" type="definition">minn</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.basic_interference_bound"><span class="id" type="variable">basic_interference_bound</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.edf_specific_bound"><span class="id" type="variable">edf_specific_bound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask"><span class="id" type="section">PerTask</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks"><span class="id" type="section">AllTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> := <a class="idref" href="interference.html#Interference.is_interfering_task_jlfp"><span class="id" type="definition">is_interfering_task_jlfp</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* The total interference incurred by tsk is bounded by the sum<br/> - of individual task interferences. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeAnalysisEDF.total_interference_bound_edf"><span class="id" type="definition">total_interference_bound_edf</span></a> :=<br/> - <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">sum_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">((</span></a><span class="id" type="var">tsk_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">,</span></a> <span class="id" type="var">R_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation"><-</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.R_prev"><span class="id" type="variable">R_prev</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">|</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> <span class="id" type="var">tsk_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">)</span></a><br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.interference_bound_edf"><span class="id" type="definition">interference_bound_edf</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">tsk_other</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <span class="id" type="var">R_other</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks"><span class="id" type="section">AllTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF"><span class="id" type="section">TotalInterferenceBoundEDF</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove that Bertogna and Cirinei's RTA yields<br/> - safe response-time bounds. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound"><span class="id" type="section">ResponseTimeBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume any job arrival sequence... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ... in which jobs arrive sporadically and have valid parameters. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_sporadic_tasks"><span class="id" type="variable">H_sporadic_tasks</span></a>:<br/> - <a class="idref" href="task_arrival.html#SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_job_parameters"><span class="id" type="variable">H_valid_job_parameters</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any schedule such that...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ...jobs do not execute before their arrival times nor longer<br/> - than their execution costs. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_jobs_must_arrive_to_execute"><span class="id" type="variable">H_jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Also assume that jobs do not execute in parallel and that<br/> - there exists at least one processor. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_at_least_one_cpu"><span class="id" type="variable">H_at_least_one_cpu</span></a> :<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* In order not to overcount job interference, we assume that<br/> - jobs of the same task do not execute in parallel.<br/> - Note that under EDF, this is equivalent to task precedence<br/> - constraints.<br/> - This is required because our proof uses a definition of<br/> - interference based on the sum of the individual contributions<br/> - of each job: I_total = I_j1 + I_j2 + ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_intra_task_parallelism"><span class="id" type="variable">H_no_intra_task_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel"><span class="id" type="definition">jobs_of_same_task_dont_execute_in_parallel</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that we have a task set where all tasks have valid<br/> - parameters and restricted deadlines. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.all_jobs_from_taskset"><span class="id" type="variable">all_jobs_from_taskset</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_restricted_deadlines"><span class="id" type="variable">H_restricted_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.no_deadline_is_missed_by_tsk"><span class="id" type="variable">no_deadline_is_missed_by_tsk</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.response_time_bounded_by"><span class="id" type="variable">response_time_bounded_by</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="response_time.html#ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assume a known response-time bound R is known... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a> := (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>)%<span class="id" type="var">type</span>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - -<br/> - <span class="comment">(* ...for any task in the task set. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_rt_bounds_contains_all_tasks"><span class="id" type="variable">H_rt_bounds_contains_all_tasks</span></a>: <span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* Also, assume that R is a fixed-point of the response-time recurrence, ... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.I"><span class="id" type="variable">I</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.total_interference_bound_edf"><span class="id" type="definition">total_interference_bound_edf</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <span class="id" type="keyword">delta</span>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_response_time_is_fixed_point"><span class="id" type="variable">H_response_time_is_fixed_point</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="bertogna_edf_theory.html#R"><span class="id" type="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.I"><span class="id" type="variable">I</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#R"><span class="id" type="variable">R</span></a>) <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="comment">(* ..., and R is no larger than the deadline. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_tasks_miss_no_deadlines"><span class="id" type="variable">H_tasks_miss_no_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk_other</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -> <a class="idref" href="bertogna_edf_theory.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> := @<a class="idref" href="priority.html#Priority.EDF"><span class="id" type="definition">EDF</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a>. <span class="comment">(* TODO: implicit params broken *)</span><br/> - -<br/> - <span class="comment">(* Assume that the schedule satisfies the global scheduling invariant<br/> - for EDF, i.e., if any job of tsk is backlogged, every processor<br/> - must be busy with jobs with no larger absolute deadline. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_global_scheduling_invariant"><span class="id" type="variable">H_global_scheduling_invariant</span></a>:<br/> - <a class="idref" href="platform.html#Platform.JLFP_JLDP_scheduling_invariant_holds"><span class="id" type="definition">JLFP_JLDP_scheduling_invariant_holds</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the task set has no duplicates. Otherwise, counting<br/> - the number of tasks that have some property does not make sense<br/> - (for example, for stating the global scheduling invariant as<br/> - using number of scheduled interfering tasks = number of cpus). *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.H_ts_is_a_set"><span class="id" type="variable">H_ts_is_a_set</span></a> : <span class="id" type="definition">uniq</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* In order to prove that R is a response-time bound, we first present some lemmas. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas"><span class="id" type="section">Lemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Let (tsk, R) be any task to be analyzed, with its response-time bound R. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_tsk_R_in_rt_bounds"><span class="id" type="variable">H_tsk_R_in_rt_bounds</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any job j of tsk. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_job_of_tsk"><span class="id" type="variable">H_job_of_tsk</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that job j did not complete on time, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_j_not_completed"><span class="id" type="variable">H_j_not_completed</span></a>: <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* and that it is the first job not to satisfy its response-time bound. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_all_previous_jobs_completed_on_time"><span class="id" type="variable">H_all_previous_jobs_completed_on_time</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j_other</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>) <span class="id" type="var">tsk_other</span> <span class="id" type="var">R_other</span>,<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#j_other"><span class="id" type="variable">j_other</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_theory.html#j_other"><span class="id" type="variable">j_other</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#j_other"><span class="id" type="variable">j_other</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a>).<br/> - -<br/> - <span class="comment">(* Let's call x the interference incurred by job j due to tsk_other, ...*)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> (<span class="id" type="var">tsk_other</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="interference.html#Interference.task_interference"><span class="id" type="definition">task_interference</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a><br/> - <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a>) (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* and X the total interference incurred by job j due to any task. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X"><span class="id" type="variable">X</span></a> := <a class="idref" href="interference.html#Interference.total_interference"><span class="id" type="definition">total_interference</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a>) (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* Recall Bertogna and Cirinei's workload bound ... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> (<span class="id" type="var">tsk_other</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">R_other</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.W"><span class="id" type="definition">W</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a>.<br/> - -<br/> - <span class="comment">(*... and the EDF-specific bound, ... *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.edf_specific_bound"><span class="id" type="variable">edf_specific_bound</span></a> (<span class="id" type="var">tsk_other</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">R_other</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.edf_specific_interference_bound"><span class="id" type="definition">edf_specific_interference_bound</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a>.<br/> - -<br/> - <span class="comment">(* ... which combined form the interference bound. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.interference_bound"><span class="id" type="variable">interference_bound</span></a> (<span class="id" type="var">tsk_other</span>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">R_other</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.interference_bound_edf"><span class="id" type="definition">interference_bound_edf</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="comment">(* Also, let ts_interf be the subset of tasks that interfere with tsk. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a> := <span class="id" type="notation">[</span><span class="id" type="notation">seq</span> <span class="id" type="var">tsk_other</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a> <span class="id" type="notation">|</span> <a class="idref" href="interference.html#Interference.is_interfering_task_jlfp"><span class="id" type="definition">is_interfering_task_jlfp</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="var">tsk_other</span><span class="id" type="notation">]</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks"><span class="id" type="section">LemmasAboutInterferingTasks</span></a>.<br/> - -<br/> - <span class="comment">(* Let (tsk_other, R_other) be any pair of higher-priority task and<br/> - response-time bound computed in previous iterations. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other"><span class="id" type="variable">H_response_time_of_tsk_other</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* Note that tsk_other is in task set ts ...*)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_tsk_other_in_ts"><span class="id" type="lemma">bertogna_edf_tsk_other_in_ts</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* Also, R_other is larger than the cost of tsk_other. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_R_other_ge_cost"><span class="id" type="lemma">bertogna_edf_R_other_ge_cost</span></a> :<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a>.<br/> - -<br/> - <span class="comment">(* Since tsk_other cannot interfere more than it executes, we show that<br/> - the interference caused by tsk_other is no larger than workload bound W. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_workload_bounds_interference"><span class="id" type="lemma">bertogna_edf_workload_bounds_interference</span></a> :<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a>.<br/> - -<br/> - <span class="comment">(* Recall that the edf-specific interference bound also holds. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_specific_bound_holds"><span class="id" type="lemma">bertogna_edf_specific_bound_holds</span></a> :<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.edf_specific_bound"><span class="id" type="variable">edf_specific_bound</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks"><span class="id" type="section">LemmasAboutInterferingTasks</span></a>.<br/> - -<br/> - <span class="comment">(* Next we prove some lemmas that help to derive a contradiction.*)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="comment">(* 1) Since job j did not complete by its response time bound, it follows that<br/> - the total interference X >= R - e_k + 1. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_too_much_interference"><span class="id" type="lemma">bertogna_edf_too_much_interference</span></a> : <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X"><span class="id" type="variable">X</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1.<br/> - <span class="comment">(* Since j has not completed, recall the time when it is not<br/> - executing is the total interference. *)</span><br/> - <span class="comment">(* 2) Next, we prove that the sum of the interference of each task is equal<br/> - to the total interference multiplied by the number of processors. This<br/> - holds because interference only occurs when all processors are busy. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_all_cpus_busy"><span class="id" type="lemma">bertogna_edf_all_cpus_busy</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk_k</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a><span class="id" type="notation">)</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X"><span class="id" type="variable">X</span></a> <span class="id" type="notation">*</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="comment">(* Let (cardGE delta) be the number of interfering tasks whose interference<br/> - is larger than delta. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE"><span class="id" type="variable">cardGE</span></a> (<span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <span class="id" type="definition">count</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">i</span> => <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_edf_theory.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation">>=</span> <span class="id" type="keyword">delta</span>) <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a>.<br/> - -<br/> - <span class="comment">(* 3) If there is at least one of such tasks (e.g., cardGE > 0), then the<br/> - cumulative interference caused by the complementary set of interfering<br/> - tasks fills at least (num_cpus - cardGE) processors. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_helper_lemma"><span class="id" type="lemma">bertogna_edf_helper_lemma</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="keyword">delta</span>,<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE"><span class="id" type="variable">cardGE</span></a> <span class="id" type="keyword">delta</span> <span class="id" type="notation">></span> 0 -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a> <span class="id" type="notation">|</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="keyword">delta</span><span class="id" type="notation">)</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">i</span> <span class="id" type="notation">>=</span> <span class="id" type="keyword">delta</span> <span class="id" type="notation">*</span> <span class="id" type="notation">(</span><a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE"><span class="id" type="variable">cardGE</span></a> <span class="id" type="keyword">delta</span><span class="id" type="notation">)</span>.<br/> - <span class="comment">(* 4) Next, we prove that, for any interval delta, if the sum of per-task<br/> - interference exceeds delta * num_cpus, the same applies for the<br/> - sum of the minimum between the interference and delta. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_minimum_exceeds_interference"><span class="id" type="lemma">bertogna_edf_minimum_exceeds_interference</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="keyword">delta</span>,<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk_k</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a><span class="id" type="notation">)</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span> <span class="id" type="notation">>=</span> <span class="id" type="keyword">delta</span> <span class="id" type="notation">*</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk_k</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a><span class="id" type="notation">)</span> <span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span>) <span class="id" type="keyword">delta</span> <span class="id" type="notation">>=</span><br/> - <span class="id" type="keyword">delta</span> <span class="id" type="notation">*</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - <span class="comment">(* Case 1: cardGE = 0 *)</span><br/> - <span class="comment">(* Case 2: cardGE >= num_cpus *)</span><br/> - <span class="comment">(* Case 3: cardGE < num_cpus *)</span><br/> - -<br/> - <span class="comment">(* 5) Now, we prove that the Bertogna's interference bound<br/> - is not enough to cover the sum of the "minimum" term over<br/> - all tasks (artifact of the proof by contradiction). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_sum_exceeds_total_interference"><span class="id" type="lemma">bertogna_edf_sum_exceeds_total_interference</span></a>:<br/> - <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">sum_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">((</span></a><span class="id" type="var">tsk_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">,</span></a> <span class="id" type="var">R_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation"><-</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">|</span></a> <a class="idref" href="interference.html#Interference.is_interfering_task_jlfp"><span class="id" type="definition">is_interfering_task_jlfp</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="var">tsk_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">)</span></a><br/> - <span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_other</span>) (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1) <span class="id" type="notation">></span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.I"><span class="id" type="variable">I</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a>.<br/> - -<br/> - <span class="comment">(* 6) After concluding that the sum of the minimum exceeds (R - e_i + 1),<br/> - we prove that there exists a tuple (tsk_k, R_k) such that<br/> - min (x_k, R - e_i + 1) > min (W_k, edf_bound, R - e_i + 1). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisEDF.bertogna_edf_exists_task_that_exceeds_bound"><span class="id" type="lemma">bertogna_edf_exists_task_that_exceeds_bound</span></a> :<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">tsk_other</span> <span class="id" type="var">R_other</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">(</span></a><span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a>) (<a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1) <span class="id" type="notation">></span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.interference_bound"><span class="id" type="variable">interference_bound</span></a> <a class="idref" href="bertogna_edf_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_edf_theory.html#R_other"><span class="id" type="variable">R_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas"><span class="id" type="section">Lemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="comment">(* Let (tsk, R) be any task to be analyzed, with its response-time bound R. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.H_tsk_R_in_rt_bounds"><span class="id" type="variable">H_tsk_R_in_rt_bounds</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* Using the lemmas above, we prove that R bounds the response time of task tsk. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeAnalysisEDF.bertogna_cirinei_response_time_bound_edf"><span class="id" type="lemma">bertogna_cirinei_response_time_bound_edf</span></a> :<br/> - <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.response_time_bounded_by"><span class="id" type="variable">response_time_bounded_by</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R"><span class="id" type="variable">R</span></a>.<br/> - <span class="comment">(* First, rewrite the claim in terms of the *absolute* response-time bound (arrival + R) *)</span><br/> - <span class="comment">(* Now, we apply strong induction on the absolute response-time bound. *)</span><br/> - <span class="comment">(* First, let's simplify the induction hypothesis. *)</span><br/> - <span class="comment">(* The proof follows by contradiction. Assume that job j does not complete by its<br/> - response-time bound. By the induction hypothesis, all jobs with absolute<br/> - response-time bound t < (job_arrival j + R) have correct response-time bounds. *)</span><br/> - <span class="comment">(* Next, we derive a contradiction using the previous lemmas. *)</span><br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound"><span class="id" type="section">ResponseTimeBound</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="bertogna_edf_theory.html#"><span class="id" type="module">ResponseTimeAnalysisEDF</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/bertogna_fp_comp.html b/bertogna_fp_comp.html deleted file mode 100644 index 0171e6b0b..000000000 --- a/bertogna_fp_comp.html +++ /dev/null @@ -1,423 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>bertogna_fp_comp</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library bertogna_fp_comp</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="bertogna_fp_theory.html#"><span class="id" type="library">bertogna_fp_theory</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">div</span> <span class="id" type="library">path</span><br/> - <a class="idref" href="workload_bound.html#"><span class="id" type="library">workload_bound</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="ResponseTimeIterationFP"><span class="id" type="module">ResponseTimeIterationFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Schedule</span> <span class="id" type="var">ResponseTimeAnalysisFP</span> <span class="id" type="var">WorkloadBound</span>.<br/> - -<br/> - <span class="comment">(* In this section, we define the algorithm of Bertogna and Cirinei's<br/> - response-time analysis for FP scheduling. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationFP.Analysis"><span class="id" type="section">Analysis</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* During the iterations of the algorithm, we pass around pairs<br/> - of tasks and computed response-time bounds. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationFP.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a> := (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>)%<span class="id" type="var">type</span>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Consider a platform with num_cpus processors, ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* ..., and priorities based on an FP policy. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Next we define the fixed-point iteration for computing<br/> - Bertogna's response-time bound of a task set. *)</span><br/> - -<br/> - <span class="comment">(* First, given a sequence of pairs R_prev = <..., (tsk_hp, R_hp)> of<br/> - response-time bounds for the higher-priority tasks, we define an<br/> - iteration that computes the response-time bound of the current task:<br/> -<br/> - R_tsk (0) = task_cost tsk<br/> - R_tsk (step + 1) = f (R step),<br/> -<br/> - where f is the response-time recurrence, step is the number of iterations,<br/> - and R_tsk (0) is the initial state. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationFP.per_task_rta"><span class="id" type="definition">per_task_rta</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>)<br/> - (<span class="id" type="var">R_prev</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>) (<span class="id" type="var">step</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) :=<br/> - <span class="id" type="definition">iter</span> <a class="idref" href="bertogna_fp_comp.html#step"><span class="id" type="variable">step</span></a><br/> - (<span class="id" type="keyword">fun</span> <span class="id" type="var">t</span> => <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span><br/> - <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a><br/> - (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.total_interference_bound_fp"><span class="id" type="definition">total_interference_bound_fp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><br/> - <a class="idref" href="bertogna_fp_comp.html#R_prev"><span class="id" type="variable">R_prev</span></a> <a class="idref" href="bertogna_fp_comp.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>)<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a>)<br/> - (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>).<br/> - -<br/> - <span class="comment">(* To ensure that the iteration converges, we will apply per_task_rta<br/> - a "sufficient" number of times: task_deadline tsk - task_cost tsk + 1.<br/> - This corresponds to the time complexity of the iteration. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) := <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1.<br/> - -<br/> - <span class="comment">(* Next we compute the response-time bounds for the entire task set.<br/> - Since high-priority tasks may not be schedulable, we allow the<br/> - computation to fail.<br/> - Thus, given the response-time bound of previous tasks, we either<br/> - (a) append the computed response-time bound (tsk, R) of the current task<br/> - to the list of pairs, or,<br/> - (b) return None if the response-time analysis failed. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationFP.fp_bound_of_task"><span class="id" type="definition">fp_bound_of_task</span></a> <span class="id" type="var">hp_pairs</span> <span class="id" type="var">tsk</span> :=<br/> - <span class="id" type="keyword">if</span> <a class="idref" href="bertogna_fp_comp.html#hp_pairs"><span class="id" type="variable">hp_pairs</span></a> <span class="id" type="var">is</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">rt_bounds</span> <span class="id" type="keyword">then</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">R</span> := <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta"><span class="id" type="definition">per_task_rta</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="var">rt_bounds</span> (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>) <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">if</span> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="keyword">then</span><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> (<span class="id" type="definition">rcons</span> <span class="id" type="var">rt_bounds</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>)<br/> - <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a><br/> - <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a>.<br/> - -<br/> - <span class="comment">(* The response-time analysis for a given task set is defined<br/> - as a left-fold (reduce) based on the function above.<br/> - This either returns a list of task and response-time bounds, or None. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> (<span class="id" type="var">ts</span>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <span class="id" type="definition">foldl</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_bound_of_task"><span class="id" type="definition">fp_bound_of_task</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="notation">[::]</span>) <a class="idref" href="bertogna_fp_comp.html#ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* The schedulability test simply checks if we got a list of<br/> - response-time bounds (i.e., if the computation did not fail). *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeIterationFP.fp_schedulable"><span class="id" type="definition">fp_schedulable</span></a> (<span class="id" type="var">ts</span>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ts"><span class="id" type="variable">ts</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a>.<br/> - -<br/> - <span class="comment">(* In the following section, we prove several helper lemmas about the<br/> - list of response-time bounds. The results seem trivial, but must be proven<br/> - nonetheless since the list of response-time bounds is computed with<br/> - a specific algorithm and there are no lemmas in the library for that. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationFP.Analysis.SimpleLemmas"><span class="id" type="section">SimpleLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* First, we show that R_list of the prefix is the prefix of R_list. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_rcons_prefix"><span class="id" type="lemma">fp_claimed_bounds_rcons_prefix</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts'</span> <span class="id" type="var">hp_bounds</span> <span class="id" type="var">tsk1</span> <span class="id" type="var">tsk2</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk1"><span class="id" type="variable">tsk1</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#hp_bounds"><span class="id" type="variable">hp_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk2"><span class="id" type="variable">tsk2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>) -><br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_fp_comp.html#hp_bounds"><span class="id" type="variable">hp_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* R_list returns the same tasks as the original task set. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_rcons_task"><span class="id" type="lemma">fp_claimed_bounds_rcons_task</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts'</span> <span class="id" type="var">hp_bounds</span> <span class="id" type="var">tsk1</span> <span class="id" type="var">tsk2</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk1"><span class="id" type="variable">tsk1</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#hp_bounds"><span class="id" type="variable">hp_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk2"><span class="id" type="variable">tsk2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>) -><br/> - <a class="idref" href="bertogna_fp_comp.html#tsk1"><span class="id" type="variable">tsk1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk2"><span class="id" type="variable">tsk2</span></a>.<br/> - -<br/> - <span class="comment">(* The response-time bounds computed using R_list are based on the per-task<br/> - fixed-point iteration. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_rcons_response_time"><span class="id" type="lemma">fp_claimed_bounds_rcons_response_time</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts'</span> <span class="id" type="var">hp_bounds</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#hp_bounds"><span class="id" type="variable">hp_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>) -><br/> - <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta"><span class="id" type="definition">per_task_rta</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#hp_bounds"><span class="id" type="variable">hp_bounds</span></a> (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>).<br/> - -<br/> - <span class="comment">(* If the analysis suceeds, the computed response-time bounds are no larger<br/> - than the deadline. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_le_deadline"><span class="id" type="lemma">fp_claimed_bounds_le_deadline</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts'</span> <span class="id" type="var">rt_bounds</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="comment">(* If the analysis succeeds, the computed response-time bounds are no smaller<br/> - than the task cost. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_ge_cost"><span class="id" type="lemma">fp_claimed_bounds_ge_cost</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts'</span> <span class="id" type="var">rt_bounds</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="comment">(* The list contains a response-time bound for every task in the task set. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_non_empty"><span class="id" type="lemma">fp_claimed_bounds_non_empty</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">ts'</span> <span class="id" type="var">rt_bounds</span> <span class="id" type="var">tsk</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> -><br/> - (<a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#ts'"><span class="id" type="variable">ts'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation"><-></span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">R</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a>).<br/> - <span class="comment">(* Short lemma about unfolding the iteration one step. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.per_task_rta_fold"><span class="id" type="lemma">per_task_rta_fold</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">rt_bounds</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span><br/> - <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.total_interference_bound_fp"><span class="id" type="definition">total_interference_bound_fp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a><br/> - (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta"><span class="id" type="definition">per_task_rta</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>)) <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>) <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta"><span class="id" type="definition">per_task_rta</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#rt_bounds"><span class="id" type="variable">rt_bounds</span></a> <span class="id" type="notation">(</span><a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">).+1</span>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.SimpleLemmas"><span class="id" type="section">SimpleLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove that if the task set is sorted by priority,<br/> - the tasks in fp_claimed_bounds are interfering tasks. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks"><span class="id" type="section">HighPriorityTasks</span></a>.<br/> - -<br/> - <span class="comment">(* Consider a list of previous tasks and a task tsk to be analyzed. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp"><span class="id" type="variable">ts_hp</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the task set doesn't contain duplicates and is sorted by priority, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_a_set"><span class="id" type="variable">H_task_set_is_a_set</span></a>: <span class="id" type="definition">uniq</span> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp"><span class="id" type="variable">ts_hp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a>).<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_sorted"><span class="id" type="variable">H_task_set_is_sorted</span></a>: <span class="id" type="definition">sorted</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp"><span class="id" type="variable">ts_hp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a>).<br/> - -<br/> - <span class="comment">(* ...the priority order is transitive, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_priority_transitive"><span class="id" type="variable">H_priority_transitive</span></a>: <span class="id" type="definition">transitive</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>.<br/> - -<br/> - <span class="comment">(* ... and that the response-time analysis succeeds. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds"><span class="id" type="variable">hp_bounds</span></a>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_analysis_succeeds"><span class="id" type="variable">H_analysis_succeeds</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp"><span class="id" type="variable">ts_hp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds"><span class="id" type="variable">hp_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>).<br/> - -<br/> - <span class="comment">(* Then, the tasks in the prefix of fp_claimed_bounds are exactly interfering tasks<br/> - under FP scheduling.*)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.fp_claimed_bounds_unzip1"><span class="id" type="lemma">fp_claimed_bounds_unzip1</span></a> :<br/> - <span class="id" type="notation">[</span><span class="id" type="notation">seq</span> <span class="id" type="var">tsk_hp</span> <span class="id" type="notation"><-</span> <span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp"><span class="id" type="variable">ts_hp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">|</span> <a class="idref" href="interference.html#Interference.is_interfering_task_fp"><span class="id" type="definition">is_interfering_task_fp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="var">tsk_hp</span><span class="id" type="notation">]</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds"><span class="id" type="variable">hp_bounds</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks"><span class="id" type="section">HighPriorityTasks</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we show that the fixed-point iteration converges. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationFP.Analysis.Convergence"><span class="id" type="section">Convergence</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any set of higher-priority tasks. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.ts_hp"><span class="id" type="variable">ts_hp</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the response-time analysis succeeds for the higher-priority tasks. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.H_test_succeeds"><span class="id" type="variable">H_test_succeeds</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.ts_hp"><span class="id" type="variable">ts_hp</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any task tsk to be analyzed, ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* ... and assume all tasks have valid parameters. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.ts_hp"><span class="id" type="variable">ts_hp</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a>).<br/> - -<br/> - <span class="comment">(* To simplify, let f denote the fixed-point iteration. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> := <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta"><span class="id" type="definition">per_task_rta</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.rt_bounds"><span class="id" type="variable">rt_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that f (max_steps tsk) is no larger than the deadline. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.H_no_larger_than_deadline"><span class="id" type="variable">H_no_larger_than_deadline</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a>) <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* First, we show that f is monotonically increasing. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.bertogna_fp_comp_f_monotonic"><span class="id" type="lemma">bertogna_fp_comp_f_monotonic</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">x1</span> <span class="id" type="var">x2</span>, <a class="idref" href="bertogna_fp_comp.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#x2"><span class="id" type="variable">x2</span></a> -> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#x2"><span class="id" type="variable">x2</span></a>.<br/> - <span class="comment">(* If the iteration converged at an earlier step, then it remains stable. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.bertogna_fp_comp_f_converges_early"><span class="id" type="lemma">bertogna_fp_comp_f_converges_early</span></a> :<br/> - (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">k</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>) -><br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <span class="id" type="notation">(</span><a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">).+1</span>.<br/> - -<br/> - <span class="comment">(* Else, we derive a contradiction. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="comment">(* Assume instead that the iteration continued to diverge. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction.H_keeps_diverging"><span class="id" type="variable">H_keeps_diverging</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a> -> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>.<br/> - -<br/> - <span class="comment">(* By monotonicity, it follows that the value always increases. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.bertogna_fp_comp_f_increases"><span class="id" type="lemma">bertogna_fp_comp_f_increases</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span>.<br/> - -<br/> - <span class="comment">(* In the end, the response-time bound must exceed the deadline. Contradiction! *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.bertogna_fp_comp_rt_grows_too_much"><span class="id" type="lemma">bertogna_fp_comp_rt_grows_too_much</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>,<br/> - <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation">></span> <a class="idref" href="bertogna_fp_comp.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">-</span> 1.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="comment">(* Using the lemmas above, we prove the convergence of the iteration after max_steps. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeIterationFP.per_task_rta_converges"><span class="id" type="lemma">per_task_rta_converges</span></a>:<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> (<a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f"><span class="id" type="variable">f</span></a> <span class="id" type="notation">(</span><a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps"><span class="id" type="definition">max_steps</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">).+1</span>.<br/> - <span class="comment">(* Either f converges by the deadline or not. *)</span><br/> - If not, then we reach a contradiction *)</span><br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence"><span class="id" type="section">Convergence</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeIterationFP.Analysis.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="comment">(* Consider a task set ts. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that higher_eq_priority is a total order.<br/> - TODO: it doesn't have to be total over the entire domain, but<br/> - only within the task set.<br/> - But to weaken the hypothesis, we need to re-prove some lemmas<br/> - from ssreflect. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_transitive"><span class="id" type="variable">H_transitive</span></a>: <span class="id" type="definition">transitive</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_unique_priorities"><span class="id" type="variable">H_unique_priorities</span></a>: <span class="id" type="definition">antisymmetric</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_total"><span class="id" type="variable">H_total</span></a>: <span class="id" type="definition">total</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the task set has no duplicates, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_ts_is_a_set"><span class="id" type="variable">H_ts_is_a_set</span></a>: <span class="id" type="definition">uniq</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...all tasks have valid parameters, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...restricted deadlines, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_restricted_deadlines"><span class="id" type="variable">H_restricted_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* ...and tasks are ordered by increasing priorities. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_sorted_ts"><span class="id" type="variable">H_sorted_ts</span></a>: <span class="id" type="definition">sorted</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* Next, consider any arrival sequence such that...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ...all jobs come from task set ts, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_all_jobs_from_taskset"><span class="id" type="variable">H_all_jobs_from_taskset</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_comp.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...they have valid parameters,...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_valid_job_parameters"><span class="id" type="variable">H_valid_job_parameters</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_comp.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* ... and satisfy the sporadic task model.*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_sporadic_tasks"><span class="id" type="variable">H_sporadic_tasks</span></a>:<br/> - <a class="idref" href="task_arrival.html#SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a>.<br/> - -<br/> - <span class="comment">(* Then, consider any platform with at least one CPU such that...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_at_least_one_cpu"><span class="id" type="variable">H_at_least_one_cpu</span></a> :<br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* ...jobs only execute after they arrived and no longer<br/> - than their execution costs,... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_jobs_must_arrive_to_execute"><span class="id" type="variable">H_jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* ...and do not execute in parallel (required by the workload bound). *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the platform satisfies the global scheduling invariant. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_global_scheduling_invariant"><span class="id" type="variable">H_global_scheduling_invariant</span></a>:<br/> - <a class="idref" href="platform.html#Platform.FP_scheduling_invariant_holds"><span class="id" type="definition">FP_scheduling_invariant_holds</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority"><span class="id" type="variable">higher_priority</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_task"><span class="id" type="variable">no_deadline_missed_by_task</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_job"><span class="id" type="variable">no_deadline_missed_by_job</span></a> :=<br/> - <a class="idref" href="schedulability.html#Schedulability.job_misses_no_deadline"><span class="id" type="definition">job_misses_no_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.response_time_bounded_by"><span class="id" type="variable">response_time_bounded_by</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="response_time.html#ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* In the following theorem, we prove that any response-time bound contained<br/> - in fp_claimed_bounds is safe. The proof follows by induction on the task set:<br/> -<br/> - Induction hypothesis: all higher-priority tasks have safe response-time bounds.<br/> - Inductive step: We prove that the response-time bound of the current task is safe.<br/> -<br/> - Note that the inductive step is a direct application of the main Theorem from<br/> - bertogna_fp_theory.v. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeIterationFP.fp_analysis_yields_response_time_bounds"><span class="id" type="lemma">fp_analysis_yields_response_time_bounds</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:bool_scope:x_'\In'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:bool_scope:x_'\In'_x"><span class="id" type="notation">In</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds"><span class="id" type="definition">fp_claimed_bounds</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> -><br/> - <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.response_time_bounded_by"><span class="id" type="variable">response_time_bounded_by</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_comp.html#R"><span class="id" type="variable">R</span></a>.<br/> - <span class="comment">(* Therefore, if the schedulability test suceeds, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeIterationFP.Analysis.MainProof.H_test_succeeds"><span class="id" type="variable">H_test_succeeds</span></a>: <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_schedulable"><span class="id" type="definition">fp_schedulable</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(*..., no task misses its deadline. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeIterationFP.taskset_schedulable_by_fp_rta"><span class="id" type="lemma">taskset_schedulable_by_fp_rta</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_task"><span class="id" type="variable">no_deadline_missed_by_task</span></a> <a class="idref" href="bertogna_fp_comp.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* For completeness, since all jobs of the arrival sequence<br/> - are spawned by the task set, we also conclude that no job in<br/> - the schedule misses its deadline. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeIterationFP.jobs_schedulable_by_fp_rta"><span class="id" type="lemma">jobs_schedulable_by_fp_rta</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_job"><span class="id" type="variable">no_deadline_missed_by_job</span></a> <a class="idref" href="bertogna_fp_comp.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis"><span class="id" type="section">Analysis</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_comp.html#"><span class="id" type="module">ResponseTimeIterationFP</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/bertogna_fp_theory.html b/bertogna_fp_theory.html deleted file mode 100644 index abf736aa8..000000000 --- a/bertogna_fp_theory.html +++ /dev/null @@ -1,374 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>bertogna_fp_theory</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library bertogna_fp_theory</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="platform.html#"><span class="id" type="library">platform</span></a> <a class="idref" href="workload.html#"><span class="id" type="library">workload</span></a> <a class="idref" href="workload_bound.html#"><span class="id" type="library">workload_bound</span></a><br/> - <a class="idref" href="schedulability.html#"><span class="id" type="library">schedulability</span></a> <a class="idref" href="priority.html#"><span class="id" type="library">priority</span></a> <a class="idref" href="response_time.html#"><span class="id" type="library">response_time</span></a> <a class="idref" href="interference.html#"><span class="id" type="library">interference</span></a><br/> - <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">div</span> <span class="id" type="library">path</span> <span class="id" type="library">tuple</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="ResponseTimeAnalysisFP"><span class="id" type="module">ResponseTimeAnalysisFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Export</span> <span class="id" type="var">Job</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">Schedule</span> <span class="id" type="var">Workload</span> <span class="id" type="var">Interference</span> <span class="id" type="var">Platform</span> <span class="id" type="var">Schedulability</span><br/> - <span class="id" type="var">ResponseTime</span> <span class="id" type="var">Priority</span> <span class="id" type="var">SporadicTaskArrival</span> <span class="id" type="var">WorkloadBound</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP"><span class="id" type="section">InterferenceBoundFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Let tsk be the task to be analyzed. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a> := (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>)%<span class="id" type="var">type</span>.<br/> - -<br/> - <span class="comment">(* Assume a known response-time bound for each interfering task ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.R_prev"><span class="id" type="variable">R_prev</span></a>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - -<br/> - <span class="comment">(* ... and an interval length delta. *)</span><br/> - <span class="id" type="keyword">Variable</span> <span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask"><span class="id" type="section">PerTask</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_other"><span class="id" type="variable">tsk_other</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.R_other"><span class="id" type="variable">R_other</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R"><span class="id" type="variable">tsk_R</span></a>.<br/> - -<br/> - <span class="comment">(* Based on the workload bound, Bertogna and Cirinei define the<br/> - following interference bound for a task. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeAnalysisFP.interference_bound_fp"><span class="id" type="definition">interference_bound_fp</span></a> :=<br/> - <span class="id" type="definition">minn</span> (<a class="idref" href="workload_bound.html#WorkloadBound.W"><span class="id" type="definition">W</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.R_other"><span class="id" type="variable">R_other</span></a> <span class="id" type="keyword">delta</span>) (<span class="id" type="keyword">delta</span> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">+</span> 1).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask"><span class="id" type="section">PerTask</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks"><span class="id" type="section">AllTasks</span></a>.<br/> - -<br/> - <span class="comment">(* Assume an FP policy. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> := <a class="idref" href="interference.html#Interference.is_interfering_task_fp"><span class="id" type="definition">is_interfering_task_fp</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* The total interference incurred by tsk is bounded by the sum<br/> - of individual task interferences. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTimeAnalysisFP.total_interference_bound_fp"><span class="id" type="definition">total_interference_bound_fp</span></a> :=<br/> - <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">sum_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">((</span></a><span class="id" type="var">tsk_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">,</span></a> <span class="id" type="var">R_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation"><-</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.R_prev"><span class="id" type="variable">R_prev</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">|</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> <span class="id" type="var">tsk_other</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">)</span></a><br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.interference_bound_fp"><span class="id" type="definition">interference_bound_fp</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">tsk_other</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <span class="id" type="var">R_other</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks"><span class="id" type="section">AllTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP"><span class="id" type="section">InterferenceBoundFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound"><span class="id" type="section">ResponseTimeBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume any job arrival sequence... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ... in which jobs arrive sporadically and have valid parameters. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_sporadic_tasks"><span class="id" type="variable">H_sporadic_tasks</span></a>:<br/> - <a class="idref" href="task_arrival.html#SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_job_parameters"><span class="id" type="variable">H_valid_job_parameters</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any schedule such that...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ...jobs do not execute before their arrival times nor longer<br/> - than their execution costs. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_jobs_must_arrive_to_execute"><span class="id" type="variable">H_jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Also assume that jobs do not execute in parallel and that<br/> - there exists at least one processor. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_at_least_one_cpu"><span class="id" type="variable">H_at_least_one_cpu</span></a> :<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* Assume that we have a task set where all tasks have valid<br/> - parameters and restricted deadlines. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_restricted_deadlines"><span class="id" type="variable">H_restricted_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="bertogna_fp_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Next, consider a task tsk that is to be analyzed. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.task_in_ts"><span class="id" type="variable">task_in_ts</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.no_deadline_is_missed_by_tsk"><span class="id" type="variable">no_deadline_is_missed_by_tsk</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.is_response_time_bound"><span class="id" type="variable">is_response_time_bound</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="response_time.html#ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assume a known response-time bound for any interfering task *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a> := (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>)%<span class="id" type="var">type</span>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_with_response_time"><span class="id" type="variable">task_with_response_time</span></a>.<br/> - -<br/> - <span class="comment">(* For FP scheduling, assume there exists a fixed task priority. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> := <a class="idref" href="interference.html#Interference.is_interfering_task_fp"><span class="id" type="definition">is_interfering_task_fp</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that hp_bounds has exactly the tasks that interfere with tsk,... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_hp_bounds_has_interfering_tasks"><span class="id" type="variable">H_hp_bounds_has_interfering_tasks</span></a>:<br/> - <span class="id" type="notation">[</span><span class="id" type="notation">seq</span> <span class="id" type="var">tsk_hp</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a> <span class="id" type="notation">|</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> <span class="id" type="var">tsk_hp</span><span class="id" type="notation">]</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">unzip1</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* ...and that all values in the pairs contain valid response-time bounds *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known"><span class="id" type="variable">H_response_time_of_interfering_tasks_is_known</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">hp_tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_theory.html#hp_tsk"><span class="id" type="variable">hp_tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_theory.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a> -><br/> - <a class="idref" href="response_time.html#ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#hp_tsk"><span class="id" type="variable">hp_tsk</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_theory.html#R"><span class="id" type="variable">R</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the response-time bounds are larger than task costs. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_bounds_ge_cost"><span class="id" type="variable">H_response_time_bounds_ge_cost</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">hp_tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_theory.html#hp_tsk"><span class="id" type="variable">hp_tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_theory.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a> -> <a class="idref" href="bertogna_fp_theory.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#hp_tsk"><span class="id" type="variable">hp_tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that no deadline is missed by any interfering task, i.e.,<br/> - response-time bound R_other <= deadline. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines"><span class="id" type="variable">H_interfering_tasks_miss_no_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">hp_tsk</span> <span class="id" type="var">R</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_theory.html#hp_tsk"><span class="id" type="variable">hp_tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_theory.html#R"><span class="id" type="variable">R</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a> -> <a class="idref" href="bertogna_fp_theory.html#R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#hp_tsk"><span class="id" type="variable">hp_tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the schedule satisfies the global scheduling<br/> - invariant, i.e., if any job of tsk is backlogged, all<br/> - the processors must be busy with jobs of equal or higher<br/> - priority. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_global_scheduling_invariant"><span class="id" type="variable">H_global_scheduling_invariant</span></a>:<br/> - <a class="idref" href="platform.html#Platform.FP_scheduling_invariant_holds"><span class="id" type="definition">FP_scheduling_invariant_holds</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>.<br/> - -<br/> - <span class="comment">(* Let R be the fixed point of Bertogna and Cirinei's recurrence, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_recurrence_holds"><span class="id" type="variable">H_response_time_recurrence_holds</span></a> :<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span><br/> - <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a><br/> - (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.total_interference_bound_fp"><span class="id" type="definition">total_interference_bound_fp</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>)<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="comment">(* ... and assume that R is no larger than the deadline of tsk.*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_no_larger_than_deadline"><span class="id" type="variable">H_response_time_no_larger_than_deadline</span></a>:<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* In order to prove that R is a response-time bound, we first present some lemmas. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas"><span class="id" type="section">Lemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any job j of tsk. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_job_of_tsk"><span class="id" type="variable">H_job_of_tsk</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that job j hasn't completed by the response time bound. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_j_not_completed"><span class="id" type="variable">H_j_not_completed</span></a>: <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* Let's call x the interference incurred by job j due to tsk_other, ...*)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> (<span class="id" type="var">tsk_other</span>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="interference.html#Interference.task_interference"><span class="id" type="definition">task_interference</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a><br/> - <a class="idref" href="bertogna_fp_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a>) (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* and X the total interference incurred by job j due to any task. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X"><span class="id" type="variable">X</span></a> := <a class="idref" href="interference.html#Interference.total_interference"><span class="id" type="definition">total_interference</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a>) (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* Recall Bertogna and Cirinei's workload bound. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> (<span class="id" type="var">tsk_other</span>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">R_other</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.W"><span class="id" type="definition">W</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_fp_theory.html#R_other"><span class="id" type="variable">R_other</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>.<br/> - -<br/> - <span class="comment">(* Also, let ts_interf be the subset of tasks that interfere with tsk. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a> := <span class="id" type="notation">[</span><span class="id" type="notation">seq</span> <span class="id" type="var">tsk_other</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a> <span class="id" type="notation">|</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> <span class="id" type="var">tsk_other</span><span class="id" type="notation">]</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks"><span class="id" type="section">LemmasAboutInterferingTasks</span></a>.<br/> - -<br/> - <span class="comment">(* Let (tsk_other, R_other) be any pair of higher-priority task and<br/> - response-time bound computed in previous iterations. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other"><span class="id" type="variable">H_response_time_of_tsk_other</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a>.<br/> - -<br/> - <span class="comment">(* Note that tsk_other is in task set ts ...*)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_tsk_other_in_ts"><span class="id" type="lemma">bertogna_fp_tsk_other_in_ts</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(*... and interferes with task tsk. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_tsk_other_interferes"><span class="id" type="lemma">bertogna_fp_tsk_other_interferes</span></a>: <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk"><span class="id" type="variable">interferes_with_tsk</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a>.<br/> - -<br/> - <span class="comment">(* Since tsk_other cannot interfere more than it executes, we show that<br/> - the interference caused by tsk_other is no larger than workload bound W. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_workload_bounds_interference"><span class="id" type="lemma">bertogna_fp_workload_bounds_interference</span></a> :<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other"><span class="id" type="variable">R_other</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks"><span class="id" type="section">LemmasAboutInterferingTasks</span></a>.<br/> - -<br/> - <span class="comment">(* Next we prove some lemmas that help to derive a contradiction.*)</span><br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="comment">(* 1) Since job j did not complete by its response time bound, it follows that<br/> - the total interference X >= R - e_k + 1. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_too_much_interference"><span class="id" type="lemma">bertogna_fp_too_much_interference</span></a> : <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X"><span class="id" type="variable">X</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1.<br/> - <span class="comment">(* Since j has not completed, recall the time when it is not<br/> - executing is the total interference. *)</span><br/> - <span class="comment">(* 2) Next, we prove that the sum of the interference of each task is equal<br/> - to the total interference multiplied by the number of processors. This<br/> - holds because interference only occurs when all processors are busy. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_all_cpus_busy"><span class="id" type="lemma">bertogna_fp_all_cpus_busy</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk_k</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a><span class="id" type="notation">)</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X"><span class="id" type="variable">X</span></a> <span class="id" type="notation">*</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="comment">(* Let (cardGE delta) be the number of interfering tasks whose interference<br/> - is larger than delta. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE"><span class="id" type="variable">cardGE</span></a> (<span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <span class="id" type="definition">count</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">i</span> => <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_fp_theory.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation">>=</span> <span class="id" type="keyword">delta</span>) <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a>.<br/> - -<br/> - <span class="comment">(* 3) If there is at least one of such tasks (e.g., cardGE > 0), then the<br/> - cumulative interference caused by the complementary set of interfering<br/> - tasks fills at least (num_cpus - cardGE) processors. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_helper_lemma"><span class="id" type="lemma">bertogna_fp_helper_lemma</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="keyword">delta</span>,<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE"><span class="id" type="variable">cardGE</span></a> <span class="id" type="keyword">delta</span> <span class="id" type="notation">></span> 0 -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a> <span class="id" type="notation">|</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="keyword">delta</span><span class="id" type="notation">)</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">i</span> <span class="id" type="notation">>=</span> <span class="id" type="keyword">delta</span> <span class="id" type="notation">*</span> <span class="id" type="notation">(</span><a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE"><span class="id" type="variable">cardGE</span></a> <span class="id" type="keyword">delta</span><span class="id" type="notation">)</span>.<br/> - <span class="comment">(* 4) Next, we prove that, for any interval delta, if the sum of per-task<br/> - interference exceeds delta * num_cpus, the same applies for the<br/> - sum of the minimum between the interference and delta. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_minimum_exceeds_interference"><span class="id" type="lemma">bertogna_fp_minimum_exceeds_interference</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="keyword">delta</span>,<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk_k</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a><span class="id" type="notation">)</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span> <span class="id" type="notation">>=</span> <span class="id" type="keyword">delta</span> <span class="id" type="notation">*</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">tsk_k</span> <span class="id" type="notation"><-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf"><span class="id" type="variable">ts_interf</span></a><span class="id" type="notation">)</span> <span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span>) <span class="id" type="keyword">delta</span> <span class="id" type="notation">>=</span><br/> - <span class="id" type="keyword">delta</span> <span class="id" type="notation">*</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - <span class="comment">(* Case 1: cardGE = 0 *)</span><br/> - <span class="comment">(* Case 2: cardGE >= num_cpus *)</span><br/> - <span class="comment">(* Case 3: cardGE < num_cpus *)</span><br/> - -<br/> - <span class="comment">(* 5) Now, we prove that the Bertogna's interference bound<br/> - is not enough to cover the sum of the "minimum" term over<br/> - all tasks (artifact of the proof by contradiction). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_sum_exceeds_total_interference"><span class="id" type="lemma">bertogna_fp_sum_exceeds_total_interference</span></a>:<br/> - <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">sum_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">((</span></a><span class="id" type="var">tsk_k</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">,</span></a> <span class="id" type="var">R_k</span><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation"><-</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">)</span></a><br/> - <span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <span class="id" type="var">tsk_k</span>) (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1) <span class="id" type="notation">></span><br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.total_interference_bound_fp"><span class="id" type="definition">total_interference_bound_fp</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a><br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>.<br/> - -<br/> - <span class="comment">(* 6) After concluding that the sum of the minimum exceeds (R - e_i + 1),<br/> - we prove that there exists a tuple (tsk_k, R_k) such that<br/> - min (x_k, R - e_i + 1) > min (W_k, R - e_i + 1). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTimeAnalysisFP.bertogna_fp_exists_task_that_exceeds_bound"><span class="id" type="lemma">bertogna_fp_exists_task_that_exceeds_bound</span></a> :<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">tsk_k</span> <span class="id" type="var">R_k</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="bertogna_fp_theory.html#tsk_k"><span class="id" type="variable">tsk_k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="bertogna_fp_theory.html#R_k"><span class="id" type="variable">R_k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds"><span class="id" type="variable">hp_bounds</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">(</span></a><span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x"><span class="id" type="variable">x</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk_k"><span class="id" type="variable">tsk_k</span></a>) (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1) <span class="id" type="notation">></span><br/> - <span class="id" type="definition">minn</span> (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> <a class="idref" href="bertogna_fp_theory.html#tsk_k"><span class="id" type="variable">tsk_k</span></a> <a class="idref" href="bertogna_fp_theory.html#R_k"><span class="id" type="variable">R_k</span></a>) (<a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a> <span class="id" type="notation">-</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> 1)<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction"><span class="id" type="section">DerivingContradiction</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas"><span class="id" type="section">Lemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Using the lemmas above, we prove that R bounds the response time of task tsk. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="ResponseTimeAnalysisFP.bertogna_cirinei_response_time_bound_fp"><span class="id" type="lemma">bertogna_cirinei_response_time_bound_fp</span></a> :<br/> - <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.is_response_time_bound"><span class="id" type="variable">is_response_time_bound</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>.<br/> - <span class="comment">(* Now we start the proof. Assume by contradiction that job j<br/> - is not complete at time (job_arrival j + R). *)</span><br/> - <span class="comment">(* We derive a contradiction using the previous lemmas. *)</span><br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound"><span class="id" type="section">ResponseTimeBound</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="bertogna_fp_theory.html#"><span class="id" type="module">ResponseTimeAnalysisFP</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index e84f9f304..000000000 --- a/index.html +++ /dev/null @@ -1,4215 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>Index</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<table> -<tr> -<td>Global Index</td> -<td><a href="index.html#global_A">A</a></td> -<td><a href="index.html#global_B">B</a></td> -<td><a href="index.html#global_C">C</a></td> -<td><a href="index.html#global_D">D</a></td> -<td><a href="index.html#global_E">E</a></td> -<td><a href="index.html#global_F">F</a></td> -<td><a href="index.html#global_G">G</a></td> -<td>H</td> -<td><a href="index.html#global_I">I</a></td> -<td><a href="index.html#global_J">J</a></td> -<td>K</td> -<td><a href="index.html#global_L">L</a></td> -<td><a href="index.html#global_M">M</a></td> -<td><a href="index.html#global_N">N</a></td> -<td><a href="index.html#global_O">O</a></td> -<td><a href="index.html#global_P">P</a></td> -<td>Q</td> -<td><a href="index.html#global_R">R</a></td> -<td><a href="index.html#global_S">S</a></td> -<td><a href="index.html#global_T">T</a></td> -<td><a href="index.html#global_U">U</a></td> -<td><a href="index.html#global_V">V</a></td> -<td><a href="index.html#global_W">W</a></td> -<td><a href="index.html#global_X">X</a></td> -<td>Y</td> -<td><a href="index.html#global_Z">Z</a></td> -<td>_</td> -<td><a href="index.html#global_*">other</a></td> -<td>(1571 entries)</td> -</tr> -<tr> -<td>Notation Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#notation_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td><a href="index.html#notation_*">other</a></td> -<td>(19 entries)</td> -</tr> -<tr> -<td>Module Index</td> -<td><a href="index.html#module_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#module_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#module_I">I</a></td> -<td><a href="index.html#module_J">J</a></td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#module_P">P</a></td> -<td>Q</td> -<td><a href="index.html#module_R">R</a></td> -<td><a href="index.html#module_S">S</a></td> -<td>T</td> -<td>U</td> -<td>V</td> -<td><a href="index.html#module_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(28 entries)</td> -</tr> -<tr> -<td>Variable Index</td> -<td><a href="index.html#variable_A">A</a></td> -<td><a href="index.html#variable_B">B</a></td> -<td>C</td> -<td>D</td> -<td><a href="index.html#variable_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#variable_I">I</a></td> -<td><a href="index.html#variable_J">J</a></td> -<td>K</td> -<td><a href="index.html#variable_L">L</a></td> -<td>M</td> -<td><a href="index.html#variable_N">N</a></td> -<td><a href="index.html#variable_O">O</a></td> -<td><a href="index.html#variable_P">P</a></td> -<td>Q</td> -<td><a href="index.html#variable_R">R</a></td> -<td><a href="index.html#variable_S">S</a></td> -<td><a href="index.html#variable_T">T</a></td> -<td>U</td> -<td>V</td> -<td><a href="index.html#variable_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(767 entries)</td> -</tr> -<tr> -<td>Library Index</td> -<td><a href="index.html#library_A">A</a></td> -<td><a href="index.html#library_B">B</a></td> -<td>C</td> -<td>D</td> -<td><a href="index.html#library_E">E</a></td> -<td>F</td> -<td><a href="index.html#library_G">G</a></td> -<td>H</td> -<td><a href="index.html#library_I">I</a></td> -<td><a href="index.html#library_J">J</a></td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#library_P">P</a></td> -<td>Q</td> -<td><a href="index.html#library_R">R</a></td> -<td><a href="index.html#library_S">S</a></td> -<td><a href="index.html#library_T">T</a></td> -<td><a href="index.html#library_U">U</a></td> -<td><a href="index.html#library_V">V</a></td> -<td><a href="index.html#library_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(29 entries)</td> -</tr> -<tr> -<td>Lemma Index</td> -<td><a href="index.html#lemma_A">A</a></td> -<td><a href="index.html#lemma_B">B</a></td> -<td><a href="index.html#lemma_C">C</a></td> -<td><a href="index.html#lemma_D">D</a></td> -<td><a href="index.html#lemma_E">E</a></td> -<td><a href="index.html#lemma_F">F</a></td> -<td>G</td> -<td>H</td> -<td><a href="index.html#lemma_I">I</a></td> -<td>J</td> -<td>K</td> -<td><a href="index.html#lemma_L">L</a></td> -<td><a href="index.html#lemma_M">M</a></td> -<td><a href="index.html#lemma_N">N</a></td> -<td><a href="index.html#lemma_O">O</a></td> -<td><a href="index.html#lemma_P">P</a></td> -<td>Q</td> -<td><a href="index.html#lemma_R">R</a></td> -<td><a href="index.html#lemma_S">S</a></td> -<td><a href="index.html#lemma_T">T</a></td> -<td><a href="index.html#lemma_U">U</a></td> -<td><a href="index.html#lemma_V">V</a></td> -<td><a href="index.html#lemma_W">W</a></td> -<td><a href="index.html#lemma_X">X</a></td> -<td>Y</td> -<td><a href="index.html#lemma_Z">Z</a></td> -<td>_</td> -<td>other</td> -<td>(385 entries)</td> -</tr> -<tr> -<td>Constructor Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#constructor_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#constructor_I">I</a></td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#constructor_P">P</a></td> -<td>Q</td> -<td><a href="index.html#constructor_R">R</a></td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(7 entries)</td> -</tr> -<tr> -<td>Axiom Index</td> -<td><a href="index.html#axiom_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td>E</td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(1 entry)</td> -</tr> -<tr> -<td>Projection Index</td> -<td><a href="index.html#projection_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#projection_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(4 entries)</td> -</tr> -<tr> -<td>Inductive Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td>E</td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#inductive_I">I</a></td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#inductive_P">P</a></td> -<td>Q</td> -<td><a href="index.html#inductive_R">R</a></td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(3 entries)</td> -</tr> -<tr> -<td>Section Index</td> -<td><a href="index.html#section_A">A</a></td> -<td><a href="index.html#section_B">B</a></td> -<td>C</td> -<td>D</td> -<td><a href="index.html#section_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#section_I">I</a></td> -<td><a href="index.html#section_J">J</a></td> -<td>K</td> -<td>L</td> -<td>M</td> -<td><a href="index.html#section_N">N</a></td> -<td><a href="index.html#section_O">O</a></td> -<td><a href="index.html#section_P">P</a></td> -<td>Q</td> -<td><a href="index.html#section_R">R</a></td> -<td><a href="index.html#section_S">S</a></td> -<td><a href="index.html#section_T">T</a></td> -<td>U</td> -<td>V</td> -<td><a href="index.html#section_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(143 entries)</td> -</tr> -<tr> -<td>Abbreviation Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#abbreviation_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(5 entries)</td> -</tr> -<tr> -<td>Definition Index</td> -<td><a href="index.html#definition_A">A</a></td> -<td>B</td> -<td><a href="index.html#definition_C">C</a></td> -<td><a href="index.html#definition_D">D</a></td> -<td><a href="index.html#definition_E">E</a></td> -<td><a href="index.html#definition_F">F</a></td> -<td>G</td> -<td>H</td> -<td><a href="index.html#definition_I">I</a></td> -<td><a href="index.html#definition_J">J</a></td> -<td>K</td> -<td>L</td> -<td><a href="index.html#definition_M">M</a></td> -<td><a href="index.html#definition_N">N</a></td> -<td><a href="index.html#definition_O">O</a></td> -<td><a href="index.html#definition_P">P</a></td> -<td>Q</td> -<td><a href="index.html#definition_R">R</a></td> -<td><a href="index.html#definition_S">S</a></td> -<td><a href="index.html#definition_T">T</a></td> -<td><a href="index.html#definition_U">U</a></td> -<td>V</td> -<td><a href="index.html#definition_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(177 entries)</td> -</tr> -<tr> -<td>Record Index</td> -<td><a href="index.html#record_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#record_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(3 entries)</td> -</tr> -</table> -<hr/> -<h1>Global Index</h1> -<a name="global_A"></a><h2>A </h2> -<a href="ExtraRelations.html#acyclic">acyclic</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#acyclic_mon">acyclic_mon</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#addmovl">addmovl</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#addmovr">addmovr</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#addnb">addnb</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#andP">andP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#antisymmetric_over_seq">antisymmetric_over_seq</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="extralib.html#appA">appA</a> [definition, in <a href="extralib.html">extralib</a>]<br/> -<a href="Vbase.html#appP">appP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence">ArrivalSequence</a> [module, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceDef">ArrivalSequence.ArrivalSequenceDef</a> [section, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceDef.Job">ArrivalSequence.ArrivalSequenceDef.Job</a> [variable, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties">ArrivalSequence.ArrivalSequenceProperties</a> [section, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.arr_seq">ArrivalSequence.ArrivalSequenceProperties.arr_seq</a> [variable, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrival_sequence_is_a_set">ArrivalSequence.arrival_sequence_is_a_set</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrival_sequence">ArrivalSequence.arrival_sequence</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrived_between">ArrivalSequence.arrived_between</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrived_before">ArrivalSequence.arrived_before</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrives_at">ArrivalSequence.arrives_at</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivingJobs">ArrivalSequence.ArrivingJobs</a> [section, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.j">ArrivalSequence.ArrivingJobs.j</a> [variable, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.eqn_jobin">ArrivalSequence.eqn_jobin</a> [axiom, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.has_arrived">ArrivalSequence.has_arrived</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.JobIn">ArrivalSequence.JobIn</a> [record, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence">ArrivalSequence.JobInArrivalSequence</a> [section, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.jobin_eqType">ArrivalSequence.jobin_eqType</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.jobin_eqMixin">ArrivalSequence.jobin_eqMixin</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.jobin_eqdef">ArrivalSequence.jobin_eqdef</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.JobIn_is_Job">ArrivalSequence.JobIn_is_Job</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.job_arrival">ArrivalSequence.job_arrival</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.no_multiple_arrivals">ArrivalSequence.no_multiple_arrivals</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.time">ArrivalSequence.time</a> [definition, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence._arrival_time">ArrivalSequence._arrival_time</a> [projection, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence._job_in">ArrivalSequence._job_in</a> [projection, in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html">arrival_sequence</a> [library]<br/> -<a href="ExtraRelations.html#asymmetric">asymmetric</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="global_B"></a><h2>B </h2> -<a href="util_lemmas.html#before_ij_implies_leq_ij">before_ij_implies_leq_ij</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#beq_sym">beq_sym</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#beq_refl">beq_refl</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="bertogna_edf_comp.html">bertogna_edf_comp</a> [library]<br/> -<a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a> [library]<br/> -<a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a> [library]<br/> -<a href="bertogna_fp_comp.html">bertogna_fp_comp</a> [library]<br/> -<a href="bertogna_fp_theory.html">bertogna_fp_theory</a> [library]<br/> -<a href="bertogna_edf_theory.html">bertogna_edf_theory</a> [library]<br/> -<a href="util_lemmas.html#bigcat_ord_uniq">bigcat_ord_uniq</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#big_mkord_ord">big_mkord_ord</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#BoolIf">BoolIf</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.A">BoolIf.A</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.b">BoolIf.b</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.B">BoolIf.B</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.f">BoolIf.f</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.vF">BoolIf.vF</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.vT">BoolIf.vT</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.x">BoolIf.x</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="global_C"></a><h2>C </h2> -<a href="ExtraRelations.html#clos_trans_imm2">clos_trans_imm2</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_imm">clos_trans_imm</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_eq_union">clos_trans_restr_eq_union</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_trans_cycle">clos_trans_restr_trans_cycle</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_trans_mid">clos_trans_restr_trans_mid</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_disj_rel">clos_trans_disj_rel</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr">clos_trans_restr</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_monotonic">clos_trans_monotonic</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_inclusion_clos_refl_trans">clos_trans_inclusion_clos_refl_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_inclusion">clos_trans_inclusion</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_eqD">clos_trans_restr_eqD</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restrD">clos_trans_restrD</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_of_clos_trans1">clos_trans_of_clos_trans1</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_eq">clos_trans_eq</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_of_transitive">clos_trans_of_transitive</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_in_rt">clos_trans_in_rt</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_refl_transE">clos_refl_transE</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_refl_trans_mon">clos_refl_trans_mon</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_mon">clos_trans_mon</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#comp_relation_trans">comp_relation_trans</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#comp_relation">comp_relation</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#contra">contra</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#cycle_disj">cycle_disj</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#cycle_decomp_u_1">cycle_decomp_u_1</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#cycle_decomp_u_total">cycle_decomp_u_total</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#cycle_decomp_u1">cycle_decomp_u1</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="global_D"></a><h2>D </h2> -<a href="Vbase.html#decP">decP</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#decPcases">decPcases</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="extralib.html#disjoint">disjoint</a> [definition, in <a href="extralib.html">extralib</a>]<br/> -<a href="util_lemmas.html#divSn_cases">divSn_cases</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_divround.html#div_ceil">div_ceil</a> [definition, in <a href="util_divround.html">util_divround</a>]<br/> -<a href="util_divround.html#div_floor">div_floor</a> [definition, in <a href="util_divround.html">util_divround</a>]<br/> -<br/><br/><a name="global_E"></a><h2>E </h2> -<a href="interference_bound_edf.html#EDFSpecificBound">EDFSpecificBound</a> [module, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef">EDFSpecificBound.EDFBoundDef</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.delta">EDFSpecificBound.EDFBoundDef.delta</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.R_other">EDFSpecificBound.EDFBoundDef.R_other</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_deadline">EDFSpecificBound.EDFBoundDef.task_deadline</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_period">EDFSpecificBound.EDFBoundDef.task_period</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_cost">EDFSpecificBound.EDFBoundDef.task_cost</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk">EDFSpecificBound.EDFBoundDef.tsk</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk_other">EDFSpecificBound.EDFBoundDef.tsk_other</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.edf_specific_interference_bound">EDFSpecificBound.edf_specific_interference_bound</a> [definition, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_bounds_interference">EDFSpecificBound.interference_bound_edf_bounds_interference</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_multiple_jobs">EDFSpecificBound.interference_bound_edf_holds_for_multiple_jobs</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_remainder_and_slack">EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_remainder_and_slack</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_concatenation_of_intervals">EDFSpecificBound.interference_bound_edf_simpl_by_concatenation_of_intervals</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_bounding_interference_with_interval_lengths">EDFSpecificBound.interference_bound_edf_bounding_interference_with_interval_lengths</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_of_j_fst_bounded_by_response_time">EDFSpecificBound.interference_bound_edf_interference_of_j_fst_bounded_by_response_time</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_moving_to_left_side">EDFSpecificBound.interference_bound_edf_simpl_by_moving_to_left_side</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_remainder_ge_slack">EDFSpecificBound.interference_bound_edf_remainder_ge_slack</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_n_k_equals_num_mid_jobs_plus_one">EDFSpecificBound.interference_bound_edf_n_k_equals_num_mid_jobs_plus_one</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_middle_and_last_jobs">EDFSpecificBound.interference_bound_edf_holds_for_middle_and_last_jobs</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_n_k_covers_middle_jobs_plus_one">EDFSpecificBound.interference_bound_edf_n_k_covers_middle_jobs_plus_one</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_many_periods_in_between">EDFSpecificBound.interference_bound_edf_many_periods_in_between</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_completed_on_time">EDFSpecificBound.interference_bound_edf_j_fst_completed_on_time</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_last_job_arrives_before_end_of_interval">EDFSpecificBound.interference_bound_edf_last_job_arrives_before_end_of_interval</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_before_j_lst">EDFSpecificBound.interference_bound_edf_j_fst_before_j_lst</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_lst_deadline">EDFSpecificBound.interference_bound_edf_j_lst_deadline</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_lst_is_job_of_tsk_k">EDFSpecificBound.interference_bound_edf_j_lst_is_job_of_tsk_k</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_a_single_job">EDFSpecificBound.interference_bound_edf_holds_for_a_single_job</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_slack">EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_slack</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_small_slack">EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_small_slack</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_big_slack">EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_big_slack</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_response_time_bound_of_j_fst_after_interval">EDFSpecificBound.interference_bound_edf_response_time_bound_of_j_fst_after_interval</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_single_job_that_completes_on_time">EDFSpecificBound.interference_bound_edf_holds_for_single_job_that_completes_on_time</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_when_there's_one_job">EDFSpecificBound.interference_bound_edf_simpl_when_there's_one_job</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval">EDFSpecificBound.interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_i_deadline">EDFSpecificBound.interference_bound_edf_j_i_deadline</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_deadline">EDFSpecificBound.interference_bound_edf_j_fst_deadline</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_is_job_of_tsk_k">EDFSpecificBound.interference_bound_edf_j_fst_is_job_of_tsk_k</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_at_least_one_job">EDFSpecificBound.interference_bound_edf_at_least_one_job</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_at_most_n_k_jobs">EDFSpecificBound.interference_bound_edf_holds_for_at_most_n_k_jobs</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_under_edf_implies_shorter_deadlines">EDFSpecificBound.interference_under_edf_implies_shorter_deadlines</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_le_task_cost">EDFSpecificBound.interference_bound_edf_interference_le_task_cost</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_jobs_ordered_by_arrival">EDFSpecificBound.interference_bound_edf_jobs_ordered_by_arrival</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_all_jobs_from_tsk_k">EDFSpecificBound.interference_bound_edf_all_jobs_from_tsk_k</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_job_in_same_sequence">EDFSpecificBound.interference_bound_edf_job_in_same_sequence</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_sorting_interfering_jobs">EDFSpecificBound.interference_bound_edf_simpl_by_sorting_interfering_jobs</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_filtering_interfering_jobs">EDFSpecificBound.interference_bound_edf_simpl_by_filtering_interfering_jobs</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_use_another_definition">EDFSpecificBound.interference_bound_edf_use_another_definition</a> [lemma, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound">EDFSpecificBound.ProofInterferenceBound</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.all_jobs_from_taskset">EDFSpecificBound.ProofInterferenceBound.all_jobs_from_taskset</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.delta">EDFSpecificBound.ProofInterferenceBound.delta</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.higher_eq_priority">EDFSpecificBound.ProofInterferenceBound.higher_eq_priority</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_all_previous_jobs_completed_on_time">EDFSpecificBound.ProofInterferenceBound.H_all_previous_jobs_completed_on_time</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_delta_le_deadline">EDFSpecificBound.ProofInterferenceBound.H_delta_le_deadline</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_R_k_le_deadline">EDFSpecificBound.ProofInterferenceBound.H_R_k_le_deadline</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_tsk_k_in_task_set">EDFSpecificBound.ProofInterferenceBound.H_tsk_k_in_task_set</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_job_of_tsk_i">EDFSpecificBound.ProofInterferenceBound.H_job_of_tsk_i</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_tsk_i_in_task_set">EDFSpecificBound.ProofInterferenceBound.H_tsk_i_in_task_set</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_global_scheduling_invariant">EDFSpecificBound.ProofInterferenceBound.H_global_scheduling_invariant</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_restricted_deadlines">EDFSpecificBound.ProofInterferenceBound.H_restricted_deadlines</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_valid_task_parameters">EDFSpecificBound.ProofInterferenceBound.H_valid_task_parameters</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_at_least_one_cpu">EDFSpecificBound.ProofInterferenceBound.H_at_least_one_cpu</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_no_parallelism">EDFSpecificBound.ProofInterferenceBound.H_no_parallelism</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_completed_jobs_dont_execute">EDFSpecificBound.ProofInterferenceBound.H_completed_jobs_dont_execute</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_jobs_must_arrive_to_execute">EDFSpecificBound.ProofInterferenceBound.H_jobs_must_arrive_to_execute</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_valid_job_parameters">EDFSpecificBound.ProofInterferenceBound.H_valid_job_parameters</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_sporadic_tasks">EDFSpecificBound.ProofInterferenceBound.H_sporadic_tasks</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task">EDFSpecificBound.ProofInterferenceBound.job_task</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline">EDFSpecificBound.ProofInterferenceBound.job_deadline</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost">EDFSpecificBound.ProofInterferenceBound.job_cost</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i">EDFSpecificBound.ProofInterferenceBound.j_i</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof">EDFSpecificBound.ProofInterferenceBound.MainProof</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k">EDFSpecificBound.ProofInterferenceBound.MainProof.D_k</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i">EDFSpecificBound.ProofInterferenceBound.MainProof.D_i</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.FactsAboutEDF">EDFSpecificBound.ProofInterferenceBound.MainProof.FactsAboutEDF</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs.H_few_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs.H_few_jobs</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.FactsAboutFirstJob">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.FactsAboutFirstJob</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.H_many_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.H_many_jobs</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.H_only_one_job">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.H_only_one_job</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded.H_j_fst_completed_by_rt_bound">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded.H_j_fst_completed_by_rt_bound</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded.H_j_fst_not_complete_by_rt_bound">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded.H_j_fst_not_complete_by_rt_bound</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.FactsAboutFirstAndLastJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.FactsAboutFirstAndLastJobs</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.H_at_least_two_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.H_at_least_two_jobs</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.InterferenceOfFirstJob">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.InterferenceOfFirstJob</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by">EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound">EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k">EDFSpecificBound.ProofInterferenceBound.MainProof.n_k</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.order">EDFSpecificBound.ProofInterferenceBound.MainProof.order</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k">EDFSpecificBound.ProofInterferenceBound.MainProof.p_k</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.SimplifyJobSequence">EDFSpecificBound.ProofInterferenceBound.MainProof.SimplifyJobSequence</a> [section, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1">EDFSpecificBound.ProofInterferenceBound.MainProof.t1</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2">EDFSpecificBound.ProofInterferenceBound.MainProof.t2</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.x">EDFSpecificBound.ProofInterferenceBound.MainProof.x</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.no_deadline_is_missed_by_tsk">EDFSpecificBound.ProofInterferenceBound.no_deadline_is_missed_by_tsk</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.num_cpus">EDFSpecificBound.ProofInterferenceBound.num_cpus</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.response_time_bounded_by">EDFSpecificBound.ProofInterferenceBound.response_time_bounded_by</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k">EDFSpecificBound.ProofInterferenceBound.R_k</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched">EDFSpecificBound.ProofInterferenceBound.sched</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline">EDFSpecificBound.ProofInterferenceBound.task_deadline</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period">EDFSpecificBound.ProofInterferenceBound.task_period</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost">EDFSpecificBound.ProofInterferenceBound.task_cost</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts">EDFSpecificBound.ProofInterferenceBound.ts</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k">EDFSpecificBound.ProofInterferenceBound.tsk_k</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i">EDFSpecificBound.ProofInterferenceBound.tsk_i</a> [variable, in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="Vbase.html#elimF">elimF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimFn">elimFn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimN">elimN</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimNf">elimNf</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimNTF">elimNTF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimT">elimT</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimTF">elimTF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimTFn">elimTFn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimTn">elimTn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eqE">eqE</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eqP">eqP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality">Equality</a> [module, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.axiom">Equality.axiom</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.class">Equality.class</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.ClassDef">Equality.ClassDef</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.ClassDef.cT">Equality.ClassDef.cT</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.ClassDef.T">Equality.ClassDef.T</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.class_of">Equality.class_of</a> [abbreviation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.clone">Equality.clone</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports">Equality.Exports</a> [module, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.EqMixin">Equality.Exports.EqMixin</a> [abbreviation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.EqType">Equality.Exports.EqType</a> [abbreviation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.eqType">Equality.Exports.eqType</a> [abbreviation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.:form_scope:'['_'eqType'_'of'_x_']'">[ eqType of _ ] (form_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.:form_scope:'['_'eqType'_'of'_x_'for'_x_']'">[ eqType of _ for _ ] (form_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.:form_scope:'['_'eqMixin'_'of'_x_']'">[ eqMixin of _ ] (form_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Mixin">Equality.Mixin</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.mixin_of">Equality.mixin_of</a> [record, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.op">Equality.op</a> [projection, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.pack">Equality.pack</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Pack">Equality.Pack</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.sort">Equality.sort</a> [projection, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.type">Equality.type</a> [record, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#equivPif">equivPif</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#equivPifn">equivPifn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eqxx">eqxx</a> [abbreviation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#eq_ext_tuple_to_fun_index">eq_ext_tuple_to_fun_index</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#eq_bigr_ord">eq_bigr_ord</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#eq_fun_ord_to_nat">eq_fun_ord_to_nat</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#eq_op">eq_op</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#exists_unzip2">exists_unzip2</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#exists_inPQ_nat">exists_inPQ_nat</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#exists_inP_nat">exists_inP_nat</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#extend_sum">extend_sum</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#extend_ord">extend_ord</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="extralib.html">extralib</a> [library]<br/> -<a href="ExtraRelations.html">ExtraRelations</a> [library]<br/> -<a href="util_lemmas.html#ext_tuple_to_fun_index">ext_tuple_to_fun_index</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ex2E">ex2E</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="global_F"></a><h2>F </h2> -<a href="extralib.html#flatten">flatten</a> [definition, in <a href="extralib.html">extralib</a>]<br/> -<a href="util_lemmas.html#forall_inP_nat">forall_inP_nat</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_mon_iter_mon_generic">fun_mon_iter_mon_generic</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_mon_iter_mon_helper">fun_mon_iter_mon_helper</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_mon_iter_mon">fun_mon_iter_mon</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_ord_to_nat">fun_ord_to_nat</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#fun_if">fun_if</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="global_G"></a><h2>G </h2> -<a href="guan_fp_comp.html">guan_fp_comp</a> [library]<br/> -<a href="guan_fp_theory.html">guan_fp_theory</a> [library]<br/> -<br/><br/><a name="global_I"></a><h2>I </h2> -<a href="Vbase.html#idfun">idfun</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#idP">idP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#idPn">idPn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#iffP">iffP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ifP">ifP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#IfSpecFalse">IfSpecFalse</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#IfSpecTrue">IfSpecTrue</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_arg">if_arg</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_neg">if_neg</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_same">if_same</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_spec">if_spec</a> [inductive, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#immediate">immediate</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="interference.html#Interference">Interference</a> [module, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html">interference</a> [library]<br/> -<a href="interference_bound_edf.html">interference_bound_edf</a> [library]<br/> -<a href="interference.html#Interference.complement_of_interf_equals_service">Interference.complement_of_interf_equals_service</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs">Interference.InterferenceDefs</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.BasicLemmas">Interference.InterferenceDefs.BasicLemmas</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.BoundUsingPerJobInterference">Interference.InterferenceDefs.BoundUsingPerJobInterference</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService">Interference.InterferenceDefs.CorrespondenceWithService</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.completed_jobs_dont_execute">Interference.InterferenceDefs.CorrespondenceWithService.completed_jobs_dont_execute</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.jobs_must_arrive_to_execute">Interference.InterferenceDefs.CorrespondenceWithService.jobs_must_arrive_to_execute</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.job_is_not_complete">Interference.InterferenceDefs.CorrespondenceWithService.job_is_not_complete</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.job_has_arrived">Interference.InterferenceDefs.CorrespondenceWithService.job_has_arrived</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.no_parallelism">Interference.InterferenceDefs.CorrespondenceWithService.no_parallelism</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t1">Interference.InterferenceDefs.CorrespondenceWithService.t1</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t2">Interference.InterferenceDefs.CorrespondenceWithService.t2</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.EquivalenceWithPerJobInterference">Interference.InterferenceDefs.EquivalenceWithPerJobInterference</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.EquivalenceWithPerJobInterference.H_no_intratask_parallelism">Interference.InterferenceDefs.EquivalenceWithPerJobInterference.H_no_intratask_parallelism</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.j">Interference.InterferenceDefs.j</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.JobInterference">Interference.InterferenceDefs.JobInterference</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.JobInterference.job_other">Interference.InterferenceDefs.JobInterference.job_other</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.job_is_backlogged">Interference.InterferenceDefs.job_is_backlogged</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.job_task">Interference.InterferenceDefs.job_task</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.job_cost">Interference.InterferenceDefs.job_cost</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.sched">Interference.InterferenceDefs.sched</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterference">Interference.InterferenceDefs.TaskInterference</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterferenceJobList">Interference.InterferenceDefs.TaskInterferenceJobList</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterferenceJobList.tsk_other">Interference.InterferenceDefs.TaskInterferenceJobList.tsk_other</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterference.tsk_other">Interference.InterferenceDefs.TaskInterference.tsk_other</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TotalInterference">Interference.InterferenceDefs.TotalInterference</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.interference_le_interference_joblist">Interference.interference_le_interference_joblist</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.interference_eq_interference_joblist">Interference.interference_eq_interference_joblist</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks">Interference.InterferingTasks</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.FP">Interference.InterferingTasks.FP</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.FP.higher_eq_priority">Interference.InterferingTasks.FP.higher_eq_priority</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.JLFP">Interference.InterferingTasks.JLFP</a> [section, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.task_deadline">Interference.InterferingTasks.task_deadline</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.task_period">Interference.InterferingTasks.task_period</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.task_cost">Interference.InterferingTasks.task_cost</a> [variable, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.is_interfering_task_jlfp">Interference.is_interfering_task_jlfp</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.is_interfering_task_fp">Interference.is_interfering_task_fp</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.job_interference_le_service">Interference.job_interference_le_service</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.job_interference_le_delta">Interference.job_interference_le_delta</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.job_interference">Interference.job_interference</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.schedules_job_of_tsk">Interference.schedules_job_of_tsk</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_interference_le_workload">Interference.task_interference_le_workload</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_interference_joblist">Interference.task_interference_joblist</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_interference">Interference.task_interference</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_is_scheduled">Interference.task_is_scheduled</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.total_interference_le_delta">Interference.total_interference_le_delta</a> [lemma, in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.total_interference">Interference.total_interference</a> [definition, in <a href="interference.html">interference</a>]<br/> -<a href="Vbase.html#introF">introF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introFn">introFn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introN">introN</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introNf">introNf</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introNTF">introNTF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introP">introP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introT">introT</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introTF">introTF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introTFn">introTFn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introTn">introTn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#In_undup">In_undup</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="extralib.html#In_flatten">In_flatten</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_filterD">In_filterD</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_filterI">In_filterI</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_filter">In_filter</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_map">In_map</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_mapD">In_mapD</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_mapI">In_mapI</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_revD">In_revD</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_revI">In_revI</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_rev">In_rev</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_app">In_app</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_appD">In_appD</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_appI2">In_appI2</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_appI1">In_appI1</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_dec">In_dec</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_split">In_split</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_nil">In_nil</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_cons">In_cons</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_eq">In_eq</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="ExtraRelations.html#irreflexive">irreflexive</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#irreflexive_inclusion">irreflexive_inclusion</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#is_total_restr">is_total_restr</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#is_total">is_total</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="Vbase.html#is_true">is_true</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#iter_fix">iter_fix</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="global_J"></a><h2>J </h2> -<a href="job.html#Job">Job</a> [module, in <a href="job.html">job</a>]<br/> -<a href="job.html">job</a> [library]<br/> -<a href="job.html#Job.job_jitter_leq_task_jitter">Job.job_jitter_leq_task_jitter</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_deadline_eq_task_deadline">Job.job_deadline_eq_task_deadline</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_cost_le_task_cost">Job.job_cost_le_task_cost</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_cost_le_deadline">Job.job_cost_le_deadline</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_deadline_positive">Job.job_deadline_positive</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_cost_positive">Job.job_cost_positive</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidJob">Job.ValidJob</a> [section, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidJob.j">Job.ValidJob.j</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidJob.job_cost">Job.ValidJob.job_cost</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob">Job.ValidRealtimeJob</a> [section, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob.j">Job.ValidRealtimeJob.j</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob.job_deadline">Job.ValidRealtimeJob.job_deadline</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob.job_cost">Job.ValidRealtimeJob.job_cost</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob">Job.ValidSporadicTaskJob</a> [section, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter">Job.ValidSporadicTaskJobWithJitter</a> [section, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.j">Job.ValidSporadicTaskJobWithJitter.j</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_jitter">Job.ValidSporadicTaskJobWithJitter.job_jitter</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_task">Job.ValidSporadicTaskJobWithJitter.job_task</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_deadline">Job.ValidSporadicTaskJobWithJitter.job_deadline</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_cost">Job.ValidSporadicTaskJobWithJitter.job_cost</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.j_is_valid_job">Job.ValidSporadicTaskJobWithJitter.j_is_valid_job</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.task_jitter">Job.ValidSporadicTaskJobWithJitter.task_jitter</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.task_deadline">Job.ValidSporadicTaskJobWithJitter.task_deadline</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.task_cost">Job.ValidSporadicTaskJobWithJitter.task_cost</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.j">Job.ValidSporadicTaskJob.j</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.job_task">Job.ValidSporadicTaskJob.job_task</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.job_deadline">Job.ValidSporadicTaskJob.job_deadline</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.job_cost">Job.ValidSporadicTaskJob.job_cost</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.task_deadline">Job.ValidSporadicTaskJob.task_deadline</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.task_cost">Job.ValidSporadicTaskJob.task_cost</a> [variable, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.valid_sporadic_job_with_jitter">Job.valid_sporadic_job_with_jitter</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.valid_sporadic_job">Job.valid_sporadic_job</a> [definition, in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.valid_realtime_job">Job.valid_realtime_job</a> [definition, in <a href="job.html">job</a>]<br/> -<br/><br/><a name="global_L"></a><h2>L </h2> -<a href="util_lemmas.html#l">l</a> [variable, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#leq_big_max">leq_big_max</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#leq_ij_implies_before_ij">leq_ij_implies_before_ij</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#leq_as_delta">leq_as_delta</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ltn_div_trunc">ltn_div_trunc</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ltSnm">ltSnm</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="global_M"></a><h2>M </h2> -<a href="util_lemmas.html#make_sequence">make_sequence</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#max_elt_clos_trans">max_elt_clos_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#max_elt">max_elt</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#mem_zip_exists">mem_zip_exists</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_zip">mem_zip</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_powerset">mem_powerset</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_bigcat_ord_exists">mem_bigcat_ord_exists</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_bigcat_ord">mem_bigcat_ord</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_bigcat_nat">mem_bigcat_nat</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#min_lt_same">min_lt_same</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="global_N"></a><h2>N </h2> -<a href="Vbase.html#nandP">nandP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#NegationLemmas">NegationLemmas</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#NegationLemmas.b">NegationLemmas.b</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#NegationLemmas.c">NegationLemmas.c</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbF">negbF</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbFE">negbFE</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbLR">negbLR</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbNE">negbNE</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbRL">negbRL</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbT">negbT</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbTE">negbTE</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negP">negP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negPf">negPf</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negPn">negPn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#neqP">neqP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#NoDup_undup">NoDup_undup</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="extralib.html#NoDup_mapD">NoDup_mapD</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#NoDup_eq_one">NoDup_eq_one</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#NoDup_filter">NoDup_filter</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append_left">nodup_append_left</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append_right">nodup_append_right</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append">nodup_append</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_app">nodup_app</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_cons">nodup_cons</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append_commut">nodup_append_commut</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_map">nodup_map</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_one">nodup_one</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="Vbase.html#norP">norP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#no_intersection">no_intersection</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#NW">NW</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="global_O"></a><h2>O </h2> -<a href="ExtraRelations.html#one_ext_total_elem">one_ext_total_elem</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext_irr">one_ext_irr</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext_trans">one_ext_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext_extends">one_ext_extends</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext">one_ext</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_extension.rel">one_extension.rel</a> [variable, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_extension.elem">one_extension.elem</a> [variable, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_extension.X">one_extension.X</a> [variable, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_extension">one_extension</a> [section, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#order_sorted_rcons">order_sorted_rcons</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#orP">orP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="global_P"></a><h2>P </h2> -<a href="util_lemmas.html#Pair">Pair</a> [section, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#pair_2nd">pair_2nd</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#pair_1st">pair_1st</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#Pair.p">Pair.p</a> [variable, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#path_decomp_u_1">path_decomp_u_1</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#path_decomp_u_total">path_decomp_u_total</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#path_decomp_u1">path_decomp_u1</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="extralib.html#Permutation_NoDup">Permutation_NoDup</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#perm_from_subset">perm_from_subset</a> [lemma, in <a href="extralib.html">extralib</a>]<br/> -<a href="Vbase.html#Phantom">Phantom</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#phantom">phantom</a> [inductive, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#phant_id">phant_id</a> [definition, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="platform.html#Platform">Platform</a> [module, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html">platform</a> [library]<br/> -<a href="platform.html#Platform.cpus_busy_with_interfering_tasks">Platform.cpus_busy_with_interfering_tasks</a> [lemma, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.FP_scheduling_invariant_holds">Platform.FP_scheduling_invariant_holds</a> [definition, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.interfering_job_has_higher_eq_prio">Platform.interfering_job_has_higher_eq_prio</a> [lemma, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.JLFP_JLDP_scheduling_invariant_holds">Platform.JLFP_JLDP_scheduling_invariant_holds</a> [definition, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.scheduled_jobs_unique">Platform.scheduled_jobs_unique</a> [lemma, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants">Platform.SchedulingInvariants</a> [section, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.FP">Platform.SchedulingInvariants.FP</a> [section, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.FP.higher_eq_priority">Platform.SchedulingInvariants.FP.higher_eq_priority</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP">Platform.SchedulingInvariants.JLDP</a> [section, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas">Platform.SchedulingInvariants.JLDP.BasicLemmas</a> [section, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_intra_task_parallelism">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_intra_task_parallelism</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_parallelism">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_parallelism</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_all_jobs_from_taskset">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_all_jobs_from_taskset</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_ts_is_a_set">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_ts_is_a_set</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_invariant_holds">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_invariant_holds</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.higher_eq_priority">Platform.SchedulingInvariants.JLDP.higher_eq_priority</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.job_task">Platform.SchedulingInvariants.job_task</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.job_deadline">Platform.SchedulingInvariants.job_deadline</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.job_cost">Platform.SchedulingInvariants.job_cost</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.num_cpus">Platform.SchedulingInvariants.num_cpus</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.sched">Platform.SchedulingInvariants.sched</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.task_deadline">Platform.SchedulingInvariants.task_deadline</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.task_period">Platform.SchedulingInvariants.task_period</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.task_cost">Platform.SchedulingInvariants.task_cost</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.ts">Platform.SchedulingInvariants.ts</a> [variable, in <a href="platform.html">platform</a>]<br/> -<a href="util_lemmas.html#powerset">powerset</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#prev_le_next">prev_le_next</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="priority.html#Priority">Priority</a> [module, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html">priority</a> [library]<br/> -<a href="priority.html#Priority.DM">Priority.DM</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.dm_is_valid">Priority.dm_is_valid</a> [lemma, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.EDF">Priority.EDF</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.EDFDefs">Priority.EDFDefs</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.EDFDefs.arr_seq">Priority.EDFDefs.arr_seq</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.EDFDefs.job_deadline">Priority.EDFDefs.job_deadline</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.edf_valid_policy">Priority.edf_valid_policy</a> [lemma, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.edf_jlfp">Priority.edf_jlfp</a> [lemma, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_jlfp">Priority.fp_is_jlfp</a> [lemma, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_to_jldp">Priority.fp_to_jldp</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_total">Priority.fp_is_total</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_transitive">Priority.fp_is_transitive</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_reflexive">Priority.fp_is_reflexive</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_policy">Priority.fp_policy</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP">Priority.GeneralizeFP</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP.arr_seq">Priority.GeneralizeFP.arr_seq</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP.job_task">Priority.GeneralizeFP.job_task</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP.num_cpus">Priority.GeneralizeFP.num_cpus</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.is_jlfp_policy">Priority.is_jlfp_policy</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jldp_policy">Priority.jldp_policy</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.JLFPDefs">Priority.JLFPDefs</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.JLFPDefs.is_higher_priority">Priority.JLFPDefs.is_higher_priority</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.JLFPDefs.job_task">Priority.JLFPDefs.job_task</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jlfp_is_total">Priority.jlfp_is_total</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jlfp_is_transitive">Priority.jlfp_is_transitive</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jlfp_is_reflexive">Priority.jlfp_is_reflexive</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs">Priority.PriorityDefs</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.arr_seq">Priority.PriorityDefs.arr_seq</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.sporadic_task">Priority.PriorityDefs.sporadic_task</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidFPPolicy">Priority.PriorityDefs.ValidFPPolicy</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidFPPolicy.is_higher_priority">Priority.PriorityDefs.ValidFPPolicy.is_higher_priority</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy">Priority.PriorityDefs.ValidJLFPPolicy</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority">Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RateDeadlineMonotonic">Priority.RateDeadlineMonotonic</a> [section, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RateDeadlineMonotonic.task_deadline">Priority.RateDeadlineMonotonic.task_deadline</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RateDeadlineMonotonic.task_period">Priority.RateDeadlineMonotonic.task_period</a> [variable, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RM">Priority.RM</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.rm_is_valid">Priority.rm_is_valid</a> [lemma, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.valid_fp_is_valid_jldp">Priority.valid_fp_is_valid_jldp</a> [lemma, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.valid_fp_policy">Priority.valid_fp_policy</a> [definition, in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.valid_jldp_policy">Priority.valid_jldp_policy</a> [definition, in <a href="priority.html">priority</a>]<br/> -<br/><br/><a name="global_R"></a><h2>R </h2> -<a href="Vbase.html#Reflect">Reflect</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#reflect">reflect</a> [inductive, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives">ReflectConnectives</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b1">ReflectConnectives.b1</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b2">ReflectConnectives.b2</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b3">ReflectConnectives.b3</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b4">ReflectConnectives.b4</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b5">ReflectConnectives.b5</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore">ReflectCore</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.b">ReflectCore.b</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.c">ReflectCore.c</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.Hb">ReflectCore.Hb</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.P">ReflectCore.P</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.Q">ReflectCore.Q</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectF">ReflectF</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore">ReflectNegCore</a> [section, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.b">ReflectNegCore.b</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.c">ReflectNegCore.c</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.Hb">ReflectNegCore.Hb</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.P">ReflectNegCore.P</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.Q">ReflectNegCore.Q</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectT">ReflectT</a> [constructor, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.b">Reflect.b</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.b'">Reflect.b'</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.c">Reflect.c</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.P">Reflect.P</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.Pb">Reflect.Pb</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.Pb'">Reflect.Pb'</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.Q">Reflect.Q</a> [variable, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="response_time.html#ResponseTime">ResponseTime</a> [module, in <a href="response_time.html">response_time</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF">ResponseTimeAnalysisEDF</a> [module, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_cirinei_response_time_bound_edf">ResponseTimeAnalysisEDF.bertogna_cirinei_response_time_bound_edf</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_exists_task_that_exceeds_bound">ResponseTimeAnalysisEDF.bertogna_edf_exists_task_that_exceeds_bound</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_sum_exceeds_total_interference">ResponseTimeAnalysisEDF.bertogna_edf_sum_exceeds_total_interference</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_minimum_exceeds_interference">ResponseTimeAnalysisEDF.bertogna_edf_minimum_exceeds_interference</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_helper_lemma">ResponseTimeAnalysisEDF.bertogna_edf_helper_lemma</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_all_cpus_busy">ResponseTimeAnalysisEDF.bertogna_edf_all_cpus_busy</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_too_much_interference">ResponseTimeAnalysisEDF.bertogna_edf_too_much_interference</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_specific_bound_holds">ResponseTimeAnalysisEDF.bertogna_edf_specific_bound_holds</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_workload_bounds_interference">ResponseTimeAnalysisEDF.bertogna_edf_workload_bounds_interference</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_R_other_ge_cost">ResponseTimeAnalysisEDF.bertogna_edf_R_other_ge_cost</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_tsk_other_in_ts">ResponseTimeAnalysisEDF.bertogna_edf_tsk_other_in_ts</a> [lemma, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.interference_bound_edf">ResponseTimeAnalysisEDF.interference_bound_edf</a> [definition, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound">ResponseTimeAnalysisEDF.ResponseTimeBound</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.all_jobs_from_taskset">ResponseTimeAnalysisEDF.ResponseTimeBound.all_jobs_from_taskset</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.higher_eq_priority">ResponseTimeAnalysisEDF.ResponseTimeBound.higher_eq_priority</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_ts_is_a_set">ResponseTimeAnalysisEDF.ResponseTimeBound.H_ts_is_a_set</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_global_scheduling_invariant">ResponseTimeAnalysisEDF.ResponseTimeBound.H_global_scheduling_invariant</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_tasks_miss_no_deadlines">ResponseTimeAnalysisEDF.ResponseTimeBound.H_tasks_miss_no_deadlines</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_response_time_is_fixed_point">ResponseTimeAnalysisEDF.ResponseTimeBound.H_response_time_is_fixed_point</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_rt_bounds_contains_all_tasks">ResponseTimeAnalysisEDF.ResponseTimeBound.H_rt_bounds_contains_all_tasks</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_restricted_deadlines">ResponseTimeAnalysisEDF.ResponseTimeBound.H_restricted_deadlines</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_task_parameters">ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_task_parameters</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_intra_task_parallelism">ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_intra_task_parallelism</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_at_least_one_cpu">ResponseTimeAnalysisEDF.ResponseTimeBound.H_at_least_one_cpu</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_parallelism">ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_parallelism</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_completed_jobs_dont_execute">ResponseTimeAnalysisEDF.ResponseTimeBound.H_completed_jobs_dont_execute</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_jobs_must_arrive_to_execute">ResponseTimeAnalysisEDF.ResponseTimeBound.H_jobs_must_arrive_to_execute</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_job_parameters">ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_job_parameters</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_sporadic_tasks">ResponseTimeAnalysisEDF.ResponseTimeBound.H_sporadic_tasks</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.I">ResponseTimeAnalysisEDF.ResponseTimeBound.I</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task">ResponseTimeAnalysisEDF.ResponseTimeBound.job_task</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline">ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost">ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.edf_specific_bound">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.edf_specific_bound</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_all_previous_jobs_completed_on_time">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_all_previous_jobs_completed_on_time</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_j_not_completed">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_j_not_completed</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_job_of_tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_job_of_tsk</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_tsk_R_in_rt_bounds">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_tsk_R_in_rt_bounds</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.interference_bound">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.interference_bound</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.workload_bound">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.workload_bound</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.H_tsk_R_in_rt_bounds">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.H_tsk_R_in_rt_bounds</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.no_deadline_is_missed_by_tsk</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus">ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.response_time_bounded_by">ResponseTimeAnalysisEDF.ResponseTimeBound.response_time_bounded_by</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds">ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched">ResponseTimeAnalysisEDF.ResponseTimeBound.sched</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_with_response_time">ResponseTimeAnalysisEDF.ResponseTimeBound.task_with_response_time</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline">ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period">ResponseTimeAnalysisEDF.ResponseTimeBound.task_period</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost">ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts">ResponseTimeAnalysisEDF.ResponseTimeBound.ts</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks.interferes_with_tsk">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks.interferes_with_tsk</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.delta">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.delta</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask</a> [section, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.basic_interference_bound">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.basic_interference_bound</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.edf_specific_bound">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.edf_specific_bound</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.R_other">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.R_other</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_other">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_other</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.R_prev">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.R_prev</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_deadline">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_deadline</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk</a> [variable, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.total_interference_bound_edf">ResponseTimeAnalysisEDF.total_interference_bound_edf</a> [definition, in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP">ResponseTimeAnalysisFP</a> [module, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_cirinei_response_time_bound_fp">ResponseTimeAnalysisFP.bertogna_cirinei_response_time_bound_fp</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_exists_task_that_exceeds_bound">ResponseTimeAnalysisFP.bertogna_fp_exists_task_that_exceeds_bound</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_sum_exceeds_total_interference">ResponseTimeAnalysisFP.bertogna_fp_sum_exceeds_total_interference</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_minimum_exceeds_interference">ResponseTimeAnalysisFP.bertogna_fp_minimum_exceeds_interference</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_helper_lemma">ResponseTimeAnalysisFP.bertogna_fp_helper_lemma</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_all_cpus_busy">ResponseTimeAnalysisFP.bertogna_fp_all_cpus_busy</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_too_much_interference">ResponseTimeAnalysisFP.bertogna_fp_too_much_interference</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_workload_bounds_interference">ResponseTimeAnalysisFP.bertogna_fp_workload_bounds_interference</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_tsk_other_interferes">ResponseTimeAnalysisFP.bertogna_fp_tsk_other_interferes</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_tsk_other_in_ts">ResponseTimeAnalysisFP.bertogna_fp_tsk_other_in_ts</a> [lemma, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP">ResponseTimeAnalysisFP.InterferenceBoundFP</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks">ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.higher_eq_priority">ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.higher_eq_priority</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.interferes_with_tsk">ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.interferes_with_tsk</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.delta">ResponseTimeAnalysisFP.InterferenceBoundFP.delta</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.R_other">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.R_other</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_other">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_other</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.R_prev">ResponseTimeAnalysisFP.InterferenceBoundFP.R_prev</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time">ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_deadline">ResponseTimeAnalysisFP.InterferenceBoundFP.task_deadline</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_period">ResponseTimeAnalysisFP.InterferenceBoundFP.task_period</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost">ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.tsk">ResponseTimeAnalysisFP.InterferenceBoundFP.tsk</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.interference_bound_fp">ResponseTimeAnalysisFP.interference_bound_fp</a> [definition, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound">ResponseTimeAnalysisFP.ResponseTimeBound</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority">ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds">ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_no_larger_than_deadline">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_no_larger_than_deadline</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_recurrence_holds">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_recurrence_holds</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_global_scheduling_invariant">ResponseTimeAnalysisFP.ResponseTimeBound.H_global_scheduling_invariant</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines">ResponseTimeAnalysisFP.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_bounds_ge_cost">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_bounds_ge_cost</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_hp_bounds_has_interfering_tasks">ResponseTimeAnalysisFP.ResponseTimeBound.H_hp_bounds_has_interfering_tasks</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_restricted_deadlines">ResponseTimeAnalysisFP.ResponseTimeBound.H_restricted_deadlines</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_task_parameters">ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_task_parameters</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_at_least_one_cpu">ResponseTimeAnalysisFP.ResponseTimeBound.H_at_least_one_cpu</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_no_parallelism">ResponseTimeAnalysisFP.ResponseTimeBound.H_no_parallelism</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_completed_jobs_dont_execute">ResponseTimeAnalysisFP.ResponseTimeBound.H_completed_jobs_dont_execute</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_jobs_must_arrive_to_execute">ResponseTimeAnalysisFP.ResponseTimeBound.H_jobs_must_arrive_to_execute</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_job_parameters">ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_job_parameters</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_sporadic_tasks">ResponseTimeAnalysisFP.ResponseTimeBound.H_sporadic_tasks</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk">ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.is_response_time_bound">ResponseTimeAnalysisFP.ResponseTimeBound.is_response_time_bound</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task">ResponseTimeAnalysisFP.ResponseTimeBound.job_task</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline">ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost">ResponseTimeAnalysisFP.ResponseTimeBound.job_cost</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_j_not_completed">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_j_not_completed</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_job_of_tsk">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_job_of_tsk</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks</a> [section, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisFP.ResponseTimeBound.no_deadline_is_missed_by_tsk</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus">ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R">ResponseTimeAnalysisFP.ResponseTimeBound.R</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched">ResponseTimeAnalysisFP.ResponseTimeBound.sched</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_with_response_time">ResponseTimeAnalysisFP.ResponseTimeBound.task_with_response_time</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_in_ts">ResponseTimeAnalysisFP.ResponseTimeBound.task_in_ts</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline">ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period">ResponseTimeAnalysisFP.ResponseTimeBound.task_period</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost">ResponseTimeAnalysisFP.ResponseTimeBound.task_cost</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts">ResponseTimeAnalysisFP.ResponseTimeBound.ts</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk">ResponseTimeAnalysisFP.ResponseTimeBound.tsk</a> [variable, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.total_interference_bound_fp">ResponseTimeAnalysisFP.total_interference_bound_fp</a> [definition, in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan">ResponseTimeAnalysisGuan</a> [module, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.guan_response_time_bound_fp">ResponseTimeAnalysisGuan.guan_response_time_bound_fp</a> [lemma, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.guan_interference_bound">ResponseTimeAnalysisGuan.guan_interference_bound</a> [definition, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan">ResponseTimeAnalysisGuan.InterferenceBoundGuan</a> [section, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.delta">ResponseTimeAnalysisGuan.InterferenceBoundGuan.delta</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.higher_eq_priority">ResponseTimeAnalysisGuan.InterferenceBoundGuan.higher_eq_priority</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry</a> [section, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.R_other">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.R_other</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_other">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_other</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_R">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_R</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.num_cpus">ResponseTimeAnalysisGuan.InterferenceBoundGuan.num_cpus</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.R_prev">ResponseTimeAnalysisGuan.InterferenceBoundGuan.R_prev</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition">ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition</a> [section, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.all_combinations">ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.all_combinations</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.interfering_tasks">ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.interfering_tasks</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_with_response_time">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_with_response_time</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_deadline">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_deadline</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_period">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_period</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_cost">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_cost</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.tsk">ResponseTimeAnalysisGuan.InterferenceBoundGuan.tsk</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.interference_bound_CI">ResponseTimeAnalysisGuan.interference_bound_CI</a> [definition, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.interference_bound_NC">ResponseTimeAnalysisGuan.interference_bound_NC</a> [definition, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan</a> [section, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.higher_eq_priority">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.higher_eq_priority</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.hp_bounds">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.hp_bounds</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_no_larger_than_deadline">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_no_larger_than_deadline</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_recurrence_holds">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_recurrence_holds</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_global_scheduling_invariant">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_global_scheduling_invariant</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_interfering_tasks_miss_no_deadlines">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_interfering_tasks_miss_no_deadlines</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_bounds_ge_cost">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_bounds_ge_cost</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_of_interfering_tasks_is_known">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_of_interfering_tasks_is_known</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_hp_bounds_has_interfering_tasks">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_hp_bounds_has_interfering_tasks</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_restricted_deadlines">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_restricted_deadlines</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_task_parameters">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_task_parameters</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_at_least_one_cpu">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_at_least_one_cpu</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_no_parallelism">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_no_parallelism</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_completed_jobs_dont_execute">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_completed_jobs_dont_execute</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_jobs_execute_after_jitter">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_jobs_execute_after_jitter</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_job_parameters">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_job_parameters</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_sporadic_tasks">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_sporadic_tasks</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.I">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.I</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.interferes_with_tsk">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.interferes_with_tsk</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.is_response_time_bound">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.is_response_time_bound</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_task">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_task</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_deadline">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_deadline</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_cost">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_cost</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.no_deadline_is_missed_by_tsk</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.num_cpus">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.num_cpus</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.R">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.R</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.sched">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.sched</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_with_response_time">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_with_response_time</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_in_ts">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_in_ts</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_deadline">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_deadline</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_period">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_period</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_cost">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_cost</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.ts">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.ts</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.tsk">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.tsk</a> [variable, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.valid_NC_CI_partitions">ResponseTimeAnalysisGuan.valid_NC_CI_partitions</a> [definition, in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter">ResponseTimeAnalysisJitter</a> [module, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.bertogna_cirinei_response_time_bound_fp_with_jitter">ResponseTimeAnalysisJitter.bertogna_cirinei_response_time_bound_fp_with_jitter</a> [lemma, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter">ResponseTimeAnalysisJitter.InterferenceBoundJitter</a> [section, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.delta">ResponseTimeAnalysisJitter.InterferenceBoundJitter.delta</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP">ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP</a> [section, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP.higher_eq_priority">ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP.higher_eq_priority</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP">ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP</a> [section, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP.is_interfering_task_jlfp">ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP.is_interfering_task_jlfp</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask</a> [section, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.R_other">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.R_other</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_other">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_other</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_R">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_R</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.R_prev">ResponseTimeAnalysisJitter.InterferenceBoundJitter.R_prev</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_with_response_time">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_with_response_time</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_jitter">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_jitter</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_deadline">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_deadline</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_period">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_period</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_cost">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_cost</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.tsk">ResponseTimeAnalysisJitter.InterferenceBoundJitter.tsk</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.interference_bound_jitter">ResponseTimeAnalysisJitter.interference_bound_jitter</a> [definition, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.is_interfering_task_fp">ResponseTimeAnalysisJitter.is_interfering_task_fp</a> [definition, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound">ResponseTimeAnalysisJitter.ResponseTimeBound</a> [section, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.higher_eq_priority">ResponseTimeAnalysisJitter.ResponseTimeBound.higher_eq_priority</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.hp_bounds">ResponseTimeAnalysisJitter.ResponseTimeBound.hp_bounds</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_no_larger_than_deadline">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_no_larger_than_deadline</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_recurrence_holds">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_recurrence_holds</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_global_scheduling_invariant">ResponseTimeAnalysisJitter.ResponseTimeBound.H_global_scheduling_invariant</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines">ResponseTimeAnalysisJitter.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_bounds_ge_cost">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_bounds_ge_cost</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_hp_bounds_has_interfering_tasks">ResponseTimeAnalysisJitter.ResponseTimeBound.H_hp_bounds_has_interfering_tasks</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_restricted_deadlines">ResponseTimeAnalysisJitter.ResponseTimeBound.H_restricted_deadlines</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_task_parameters">ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_task_parameters</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_at_least_one_cpu">ResponseTimeAnalysisJitter.ResponseTimeBound.H_at_least_one_cpu</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_no_parallelism">ResponseTimeAnalysisJitter.ResponseTimeBound.H_no_parallelism</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_completed_jobs_dont_execute">ResponseTimeAnalysisJitter.ResponseTimeBound.H_completed_jobs_dont_execute</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_jobs_execute_after_jitter">ResponseTimeAnalysisJitter.ResponseTimeBound.H_jobs_execute_after_jitter</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_job_parameters">ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_job_parameters</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_sporadic_tasks">ResponseTimeAnalysisJitter.ResponseTimeBound.H_sporadic_tasks</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.I">ResponseTimeAnalysisJitter.ResponseTimeBound.I</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.interferes_with_tsk">ResponseTimeAnalysisJitter.ResponseTimeBound.interferes_with_tsk</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.is_response_time_bound">ResponseTimeAnalysisJitter.ResponseTimeBound.is_response_time_bound</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_jitter">ResponseTimeAnalysisJitter.ResponseTimeBound.job_jitter</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_task">ResponseTimeAnalysisJitter.ResponseTimeBound.job_task</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_deadline">ResponseTimeAnalysisJitter.ResponseTimeBound.job_deadline</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_cost">ResponseTimeAnalysisJitter.ResponseTimeBound.job_cost</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisJitter.ResponseTimeBound.no_deadline_is_missed_by_tsk</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.num_cpus">ResponseTimeAnalysisJitter.ResponseTimeBound.num_cpus</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.R">ResponseTimeAnalysisJitter.ResponseTimeBound.R</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.R'">ResponseTimeAnalysisJitter.ResponseTimeBound.R'</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.sched">ResponseTimeAnalysisJitter.ResponseTimeBound.sched</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_with_response_time">ResponseTimeAnalysisJitter.ResponseTimeBound.task_with_response_time</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_in_ts">ResponseTimeAnalysisJitter.ResponseTimeBound.task_in_ts</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_jitter">ResponseTimeAnalysisJitter.ResponseTimeBound.task_jitter</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_deadline">ResponseTimeAnalysisJitter.ResponseTimeBound.task_deadline</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_period">ResponseTimeAnalysisJitter.ResponseTimeBound.task_period</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_cost">ResponseTimeAnalysisJitter.ResponseTimeBound.task_cost</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.ts">ResponseTimeAnalysisJitter.ResponseTimeBound.ts</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.tsk">ResponseTimeAnalysisJitter.ResponseTimeBound.tsk</a> [variable, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.total_interference_bound_jlfp_jitter">ResponseTimeAnalysisJitter.total_interference_bound_jlfp_jitter</a> [definition, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.total_interference_bound_fp_jitter">ResponseTimeAnalysisJitter.total_interference_bound_fp_jitter</a> [definition, in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF">ResponseTimeIterationEDF</a> [module, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.all_le_transitive">ResponseTimeIterationEDF.all_le_transitive</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.all_le_reflexive">ResponseTimeIterationEDF.all_le_reflexive</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis">ResponseTimeIterationEDF.Analysis</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence">ResponseTimeIterationEDF.Analysis.Convergence</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le">ResponseTimeIterationEDF.Analysis.Convergence.all_le</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction">ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_keeps_diverging">ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_keeps_diverging</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_at_least_one_task">ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_at_least_one_task</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f">ResponseTimeIterationEDF.Analysis.Convergence.f</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.H_valid_task_parameters">ResponseTimeIterationEDF.Analysis.Convergence.H_valid_task_parameters</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.one_lt">ResponseTimeIterationEDF.Analysis.Convergence.one_lt</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.RelationProperties">ResponseTimeIterationEDF.Analysis.Convergence.RelationProperties</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts">ResponseTimeIterationEDF.Analysis.Convergence.ts</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.I">ResponseTimeIterationEDF.Analysis.I</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state">ResponseTimeIterationEDF.Analysis.initial_state</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task">ResponseTimeIterationEDF.Analysis.job_task</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_deadline">ResponseTimeIterationEDF.Analysis.job_deadline</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost">ResponseTimeIterationEDF.Analysis.job_cost</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof">ResponseTimeIterationEDF.Analysis.MainProof</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.higher_eq_priority">ResponseTimeIterationEDF.Analysis.MainProof.higher_eq_priority</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_test_succeeds">ResponseTimeIterationEDF.Analysis.MainProof.H_test_succeeds</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_global_scheduling_invariant">ResponseTimeIterationEDF.Analysis.MainProof.H_global_scheduling_invariant</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_no_intra_task_parallelism">ResponseTimeIterationEDF.Analysis.MainProof.H_no_intra_task_parallelism</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_no_parallelism">ResponseTimeIterationEDF.Analysis.MainProof.H_no_parallelism</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_completed_jobs_dont_execute">ResponseTimeIterationEDF.Analysis.MainProof.H_completed_jobs_dont_execute</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_jobs_must_arrive_to_execute">ResponseTimeIterationEDF.Analysis.MainProof.H_jobs_must_arrive_to_execute</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_at_least_one_cpu">ResponseTimeIterationEDF.Analysis.MainProof.H_at_least_one_cpu</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_sporadic_tasks">ResponseTimeIterationEDF.Analysis.MainProof.H_sporadic_tasks</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_valid_job_parameters">ResponseTimeIterationEDF.Analysis.MainProof.H_valid_job_parameters</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_all_jobs_from_taskset">ResponseTimeIterationEDF.Analysis.MainProof.H_all_jobs_from_taskset</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_restricted_deadlines">ResponseTimeIterationEDF.Analysis.MainProof.H_restricted_deadlines</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_valid_task_parameters">ResponseTimeIterationEDF.Analysis.MainProof.H_valid_task_parameters</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_ts_is_a_set">ResponseTimeIterationEDF.Analysis.MainProof.H_ts_is_a_set</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched">ResponseTimeIterationEDF.Analysis.MainProof.sched</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts">ResponseTimeIterationEDF.Analysis.MainProof.ts</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps">ResponseTimeIterationEDF.Analysis.max_steps</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_cost_le_rt_bound">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_cost_le_rt_bound</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_response_time_monotonic">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_response_time_monotonic</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_delta_monotonic">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_delta_monotonic</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_period_positive">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_period_positive</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus">ResponseTimeIterationEDF.Analysis.num_cpus</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.SimpleLemmas">ResponseTimeIterationEDF.Analysis.SimpleLemmas</a> [section, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time">ResponseTimeIterationEDF.Analysis.task_with_response_time</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline">ResponseTimeIterationEDF.Analysis.task_deadline</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period">ResponseTimeIterationEDF.Analysis.task_period</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost">ResponseTimeIterationEDF.Analysis.task_cost</a> [variable, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_rt_grows_too_much">ResponseTimeIterationEDF.bertogna_edf_comp_rt_grows_too_much</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_f_increases">ResponseTimeIterationEDF.bertogna_edf_comp_f_increases</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_early">ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_early</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_with_no_tasks">ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_with_no_tasks</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_iteration_monotonic">ResponseTimeIterationEDF.bertogna_edf_comp_iteration_monotonic</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_order">ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_order</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_minimum">ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_minimum</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_analysis_yields_response_time_bounds">ResponseTimeIterationEDF.edf_analysis_yields_response_time_bounds</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_converges">ResponseTimeIterationEDF.edf_claimed_bounds_converges</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_converges_helper">ResponseTimeIterationEDF.edf_claimed_bounds_converges_helper</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_has_R_for_every_task">ResponseTimeIterationEDF.edf_claimed_bounds_has_R_for_every_task</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_le_deadline">ResponseTimeIterationEDF.edf_claimed_bounds_le_deadline</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_ge_cost">ResponseTimeIterationEDF.edf_claimed_bounds_ge_cost</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_size">ResponseTimeIterationEDF.edf_claimed_bounds_size</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_iteration">ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_iteration</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_update_bound">ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_update_bound</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_schedulable">ResponseTimeIterationEDF.edf_schedulable</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds">ResponseTimeIterationEDF.edf_claimed_bounds</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration">ResponseTimeIterationEDF.edf_rta_iteration</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_response_time_bound">ResponseTimeIterationEDF.edf_response_time_bound</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.interference_bound_edf_monotonic">ResponseTimeIterationEDF.interference_bound_edf_monotonic</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.jobs_schedulable_by_edf_rta">ResponseTimeIterationEDF.jobs_schedulable_by_edf_rta</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.no_deadline_missed_by_job">ResponseTimeIterationEDF.no_deadline_missed_by_job</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.no_deadline_missed_by_task">ResponseTimeIterationEDF.no_deadline_missed_by_task</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.R_le_deadline">ResponseTimeIterationEDF.R_le_deadline</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.taskset_schedulable_by_edf_rta">ResponseTimeIterationEDF.taskset_schedulable_by_edf_rta</a> [lemma, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.update_bound">ResponseTimeIterationEDF.update_bound</a> [definition, in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP">ResponseTimeIterationFP</a> [module, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan">ResponseTimeIterationFPGuan</a> [module, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis">ResponseTimeIterationFPGuan.Analysis</a> [section, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.AuxiliaryLemmas">ResponseTimeIterationFPGuan.Analysis.AuxiliaryLemmas</a> [section, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.higher_eq_priority">ResponseTimeIterationFPGuan.Analysis.higher_eq_priority</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.I">ResponseTimeIterationFPGuan.Analysis.I</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.job_task">ResponseTimeIterationFPGuan.Analysis.job_task</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.job_deadline">ResponseTimeIterationFPGuan.Analysis.job_deadline</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.job_cost">ResponseTimeIterationFPGuan.Analysis.job_cost</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.max_steps">ResponseTimeIterationFPGuan.Analysis.max_steps</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.num_cpus">ResponseTimeIterationFPGuan.Analysis.num_cpus</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof">ResponseTimeIterationFPGuan.Analysis.Proof</a> [section, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.HelperLemma">ResponseTimeIterationFPGuan.Analysis.Proof.HelperLemma</a> [section, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_test_succeeds">ResponseTimeIterationFPGuan.Analysis.Proof.H_test_succeeds</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_global_scheduling_invariant">ResponseTimeIterationFPGuan.Analysis.Proof.H_global_scheduling_invariant</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_no_parallelism">ResponseTimeIterationFPGuan.Analysis.Proof.H_no_parallelism</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_completed_jobs_dont_execute">ResponseTimeIterationFPGuan.Analysis.Proof.H_completed_jobs_dont_execute</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_jobs_execute_after_jitter">ResponseTimeIterationFPGuan.Analysis.Proof.H_jobs_execute_after_jitter</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_at_least_one_cpu">ResponseTimeIterationFPGuan.Analysis.Proof.H_at_least_one_cpu</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_sporadic_tasks">ResponseTimeIterationFPGuan.Analysis.Proof.H_sporadic_tasks</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_job_parameters">ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_job_parameters</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_all_jobs_from_taskset">ResponseTimeIterationFPGuan.Analysis.Proof.H_all_jobs_from_taskset</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_sorted_ts">ResponseTimeIterationFPGuan.Analysis.Proof.H_sorted_ts</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_restricted_deadlines">ResponseTimeIterationFPGuan.Analysis.Proof.H_restricted_deadlines</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_task_parameters">ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_task_parameters</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_ts_is_a_set">ResponseTimeIterationFPGuan.Analysis.Proof.H_ts_is_a_set</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_unique_priorities">ResponseTimeIterationFPGuan.Analysis.Proof.H_unique_priorities</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_policy">ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_policy</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.sched">ResponseTimeIterationFPGuan.Analysis.Proof.sched</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.ts">ResponseTimeIterationFPGuan.Analysis.Proof.ts</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_with_response_time">ResponseTimeIterationFPGuan.Analysis.task_with_response_time</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_deadline">ResponseTimeIterationFPGuan.Analysis.task_deadline</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_period">ResponseTimeIterationFPGuan.Analysis.task_period</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_cost">ResponseTimeIterationFPGuan.Analysis.task_cost</a> [variable, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.guan_fp_schedulability_test_yields_response_time_bounds">ResponseTimeIterationFPGuan.guan_fp_schedulability_test_yields_response_time_bounds</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.guan_fp_schedulable">ResponseTimeIterationFPGuan.guan_fp_schedulable</a> [definition, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.jobs_with_jitter_schedulable_by_guan_fp_rta">ResponseTimeIterationFPGuan.jobs_with_jitter_schedulable_by_guan_fp_rta</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.no_deadline_missed_by_job">ResponseTimeIterationFPGuan.no_deadline_missed_by_job</a> [definition, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.no_deadline_missed_by_task">ResponseTimeIterationFPGuan.no_deadline_missed_by_task</a> [definition, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.per_task_rta_fold">ResponseTimeIterationFPGuan.per_task_rta_fold</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.per_task_rta_converges">ResponseTimeIterationFPGuan.per_task_rta_converges</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.per_task_rta">ResponseTimeIterationFPGuan.per_task_rta</a> [definition, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_has_response_time_bounds">ResponseTimeIterationFPGuan.R_list_has_response_time_bounds</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_unzip1">ResponseTimeIterationFPGuan.R_list_unzip1</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_non_empty">ResponseTimeIterationFPGuan.R_list_non_empty</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_ge_cost">ResponseTimeIterationFPGuan.R_list_ge_cost</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_le_deadline">ResponseTimeIterationFPGuan.R_list_le_deadline</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_rcons_response_time">ResponseTimeIterationFPGuan.R_list_rcons_response_time</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_rcons_task">ResponseTimeIterationFPGuan.R_list_rcons_task</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_rcons_prefix">ResponseTimeIterationFPGuan.R_list_rcons_prefix</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list">ResponseTimeIterationFPGuan.R_list</a> [definition, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_helper">ResponseTimeIterationFPGuan.R_list_helper</a> [definition, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.taskset_schedulable_by_guan_fp_rta">ResponseTimeIterationFPGuan.taskset_schedulable_by_guan_fp_rta</a> [lemma, in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter">ResponseTimeIterationFPWithJitter</a> [module, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis">ResponseTimeIterationFPWithJitter.Analysis</a> [section, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.AuxiliaryLemmas">ResponseTimeIterationFPWithJitter.Analysis.AuxiliaryLemmas</a> [section, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.higher_eq_priority">ResponseTimeIterationFPWithJitter.Analysis.higher_eq_priority</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.I">ResponseTimeIterationFPWithJitter.Analysis.I</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_jitter">ResponseTimeIterationFPWithJitter.Analysis.job_jitter</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_task">ResponseTimeIterationFPWithJitter.Analysis.job_task</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_deadline">ResponseTimeIterationFPWithJitter.Analysis.job_deadline</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_cost">ResponseTimeIterationFPWithJitter.Analysis.job_cost</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.max_steps">ResponseTimeIterationFPWithJitter.Analysis.max_steps</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.num_cpus">ResponseTimeIterationFPWithJitter.Analysis.num_cpus</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof">ResponseTimeIterationFPWithJitter.Analysis.Proof</a> [section, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.HelperLemma">ResponseTimeIterationFPWithJitter.Analysis.Proof.HelperLemma</a> [section, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_test_succeeds">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_test_succeeds</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_global_scheduling_invariant">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_global_scheduling_invariant</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_no_parallelism">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_no_parallelism</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_completed_jobs_dont_execute">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_completed_jobs_dont_execute</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_jobs_execute_after_jitter">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_jobs_execute_after_jitter</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_at_least_one_cpu">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_at_least_one_cpu</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sporadic_tasks">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sporadic_tasks</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_job_parameters">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_job_parameters</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_all_jobs_from_taskset">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_all_jobs_from_taskset</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sorted_ts">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sorted_ts</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_restricted_deadlines">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_restricted_deadlines</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_task_parameters">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_task_parameters</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_ts_is_a_set">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_ts_is_a_set</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_unique_priorities">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_unique_priorities</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_policy">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_policy</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.sched">ResponseTimeIterationFPWithJitter.Analysis.Proof.sched</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.ts">ResponseTimeIterationFPWithJitter.Analysis.Proof.ts</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_with_response_time">ResponseTimeIterationFPWithJitter.Analysis.task_with_response_time</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_jitter">ResponseTimeIterationFPWithJitter.Analysis.task_jitter</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_deadline">ResponseTimeIterationFPWithJitter.Analysis.task_deadline</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_period">ResponseTimeIterationFPWithJitter.Analysis.task_period</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_cost">ResponseTimeIterationFPWithJitter.Analysis.task_cost</a> [variable, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.fp_schedulability_test_with_jitter_yields_response_time_bounds">ResponseTimeIterationFPWithJitter.fp_schedulability_test_with_jitter_yields_response_time_bounds</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.fp_schedulable">ResponseTimeIterationFPWithJitter.fp_schedulable</a> [definition, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.jobs_with_jitter_schedulable_by_fp_rta">ResponseTimeIterationFPWithJitter.jobs_with_jitter_schedulable_by_fp_rta</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.no_deadline_missed_by_job">ResponseTimeIterationFPWithJitter.no_deadline_missed_by_job</a> [definition, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.no_deadline_missed_by_task">ResponseTimeIterationFPWithJitter.no_deadline_missed_by_task</a> [definition, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.per_task_rta_fold">ResponseTimeIterationFPWithJitter.per_task_rta_fold</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.per_task_rta_converges">ResponseTimeIterationFPWithJitter.per_task_rta_converges</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.per_task_rta">ResponseTimeIterationFPWithJitter.per_task_rta</a> [definition, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_has_response_time_bounds">ResponseTimeIterationFPWithJitter.R_list_has_response_time_bounds</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_unzip1">ResponseTimeIterationFPWithJitter.R_list_unzip1</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_non_empty">ResponseTimeIterationFPWithJitter.R_list_non_empty</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_ge_cost">ResponseTimeIterationFPWithJitter.R_list_ge_cost</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_le_deadline">ResponseTimeIterationFPWithJitter.R_list_le_deadline</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_rcons_response_time">ResponseTimeIterationFPWithJitter.R_list_rcons_response_time</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_rcons_task">ResponseTimeIterationFPWithJitter.R_list_rcons_task</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_rcons_prefix">ResponseTimeIterationFPWithJitter.R_list_rcons_prefix</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list">ResponseTimeIterationFPWithJitter.R_list</a> [definition, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_helper">ResponseTimeIterationFPWithJitter.R_list_helper</a> [definition, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.taskset_with_jitter_schedulable_by_fp_rta">ResponseTimeIterationFPWithJitter.taskset_with_jitter_schedulable_by_fp_rta</a> [lemma, in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis">ResponseTimeIterationFP.Analysis</a> [section, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence">ResponseTimeIterationFP.Analysis.Convergence</a> [section, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction">ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction</a> [section, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction.H_keeps_diverging">ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction.H_keeps_diverging</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f">ResponseTimeIterationFP.Analysis.Convergence.f</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.H_no_larger_than_deadline">ResponseTimeIterationFP.Analysis.Convergence.H_no_larger_than_deadline</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.H_valid_task_parameters">ResponseTimeIterationFP.Analysis.Convergence.H_valid_task_parameters</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.H_test_succeeds">ResponseTimeIterationFP.Analysis.Convergence.H_test_succeeds</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.rt_bounds">ResponseTimeIterationFP.Analysis.Convergence.rt_bounds</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk">ResponseTimeIterationFP.Analysis.Convergence.tsk</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.ts_hp">ResponseTimeIterationFP.Analysis.Convergence.ts_hp</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority">ResponseTimeIterationFP.Analysis.higher_priority</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks">ResponseTimeIterationFP.Analysis.HighPriorityTasks</a> [section, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds">ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_analysis_succeeds">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_analysis_succeeds</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_priority_transitive">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_priority_transitive</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_sorted">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_sorted</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_a_set">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_a_set</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.R">ResponseTimeIterationFP.Analysis.HighPriorityTasks.R</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk">ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp">ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task">ResponseTimeIterationFP.Analysis.job_task</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_deadline">ResponseTimeIterationFP.Analysis.job_deadline</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost">ResponseTimeIterationFP.Analysis.job_cost</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof">ResponseTimeIterationFP.Analysis.MainProof</a> [section, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_test_succeeds">ResponseTimeIterationFP.Analysis.MainProof.H_test_succeeds</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_global_scheduling_invariant">ResponseTimeIterationFP.Analysis.MainProof.H_global_scheduling_invariant</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_no_parallelism">ResponseTimeIterationFP.Analysis.MainProof.H_no_parallelism</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_completed_jobs_dont_execute">ResponseTimeIterationFP.Analysis.MainProof.H_completed_jobs_dont_execute</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_jobs_must_arrive_to_execute">ResponseTimeIterationFP.Analysis.MainProof.H_jobs_must_arrive_to_execute</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_at_least_one_cpu">ResponseTimeIterationFP.Analysis.MainProof.H_at_least_one_cpu</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_sporadic_tasks">ResponseTimeIterationFP.Analysis.MainProof.H_sporadic_tasks</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_valid_job_parameters">ResponseTimeIterationFP.Analysis.MainProof.H_valid_job_parameters</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_all_jobs_from_taskset">ResponseTimeIterationFP.Analysis.MainProof.H_all_jobs_from_taskset</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_sorted_ts">ResponseTimeIterationFP.Analysis.MainProof.H_sorted_ts</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_restricted_deadlines">ResponseTimeIterationFP.Analysis.MainProof.H_restricted_deadlines</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_valid_task_parameters">ResponseTimeIterationFP.Analysis.MainProof.H_valid_task_parameters</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_ts_is_a_set">ResponseTimeIterationFP.Analysis.MainProof.H_ts_is_a_set</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_total">ResponseTimeIterationFP.Analysis.MainProof.H_total</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_unique_priorities">ResponseTimeIterationFP.Analysis.MainProof.H_unique_priorities</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_transitive">ResponseTimeIterationFP.Analysis.MainProof.H_transitive</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_job">ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_job</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_task">ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_task</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.response_time_bounded_by">ResponseTimeIterationFP.Analysis.MainProof.response_time_bounded_by</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched">ResponseTimeIterationFP.Analysis.MainProof.sched</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts">ResponseTimeIterationFP.Analysis.MainProof.ts</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus">ResponseTimeIterationFP.Analysis.num_cpus</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.SimpleLemmas">ResponseTimeIterationFP.Analysis.SimpleLemmas</a> [section, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_with_response_time">ResponseTimeIterationFP.Analysis.task_with_response_time</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline">ResponseTimeIterationFP.Analysis.task_deadline</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period">ResponseTimeIterationFP.Analysis.task_period</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost">ResponseTimeIterationFP.Analysis.task_cost</a> [variable, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_rt_grows_too_much">ResponseTimeIterationFP.bertogna_fp_comp_rt_grows_too_much</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_f_increases">ResponseTimeIterationFP.bertogna_fp_comp_f_increases</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_f_converges_early">ResponseTimeIterationFP.bertogna_fp_comp_f_converges_early</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_f_monotonic">ResponseTimeIterationFP.bertogna_fp_comp_f_monotonic</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_analysis_yields_response_time_bounds">ResponseTimeIterationFP.fp_analysis_yields_response_time_bounds</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_unzip1">ResponseTimeIterationFP.fp_claimed_bounds_unzip1</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_non_empty">ResponseTimeIterationFP.fp_claimed_bounds_non_empty</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_ge_cost">ResponseTimeIterationFP.fp_claimed_bounds_ge_cost</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_le_deadline">ResponseTimeIterationFP.fp_claimed_bounds_le_deadline</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_rcons_response_time">ResponseTimeIterationFP.fp_claimed_bounds_rcons_response_time</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_rcons_task">ResponseTimeIterationFP.fp_claimed_bounds_rcons_task</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_rcons_prefix">ResponseTimeIterationFP.fp_claimed_bounds_rcons_prefix</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_schedulable">ResponseTimeIterationFP.fp_schedulable</a> [definition, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds">ResponseTimeIterationFP.fp_claimed_bounds</a> [definition, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_bound_of_task">ResponseTimeIterationFP.fp_bound_of_task</a> [definition, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.jobs_schedulable_by_fp_rta">ResponseTimeIterationFP.jobs_schedulable_by_fp_rta</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps">ResponseTimeIterationFP.max_steps</a> [definition, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta_converges">ResponseTimeIterationFP.per_task_rta_converges</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta_fold">ResponseTimeIterationFP.per_task_rta_fold</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta">ResponseTimeIterationFP.per_task_rta</a> [definition, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.taskset_schedulable_by_fp_rta">ResponseTimeIterationFP.taskset_schedulable_by_fp_rta</a> [lemma, in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas">ResponseTime.BasicLemmas</a> [section, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs">ResponseTime.BasicLemmas.AllJobs</a> [section, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.H_job_of_task">ResponseTime.BasicLemmas.AllJobs.H_job_of_task</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j">ResponseTime.BasicLemmas.AllJobs.j</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.R">ResponseTime.BasicLemmas.AllJobs.R</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.response_time_bound">ResponseTime.BasicLemmas.AllJobs.response_time_bound</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.tsk">ResponseTime.BasicLemmas.AllJobs.tsk</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.H_completed_jobs_dont_execute">ResponseTime.BasicLemmas.H_completed_jobs_dont_execute</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.job_has_completed_by">ResponseTime.BasicLemmas.job_has_completed_by</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.job_task">ResponseTime.BasicLemmas.job_task</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.job_cost">ResponseTime.BasicLemmas.job_cost</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.sched">ResponseTime.BasicLemmas.sched</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob">ResponseTime.BasicLemmas.SpecificJob</a> [section, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j">ResponseTime.BasicLemmas.SpecificJob.j</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.R">ResponseTime.BasicLemmas.SpecificJob.R</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.response_time_bound">ResponseTime.BasicLemmas.SpecificJob.response_time_bound</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.cumulative_service_after_task_rt_zero">ResponseTime.cumulative_service_after_task_rt_zero</a> [lemma, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.cumulative_service_after_job_rt_zero">ResponseTime.cumulative_service_after_job_rt_zero</a> [lemma, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.is_response_time_bound_of_task">ResponseTime.is_response_time_bound_of_task</a> [definition, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound">ResponseTime.ResponseTimeBound</a> [section, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.job_has_completed_by">ResponseTime.ResponseTimeBound.job_has_completed_by</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.job_task">ResponseTime.ResponseTimeBound.job_task</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.job_cost">ResponseTime.ResponseTimeBound.job_cost</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.R">ResponseTime.ResponseTimeBound.R</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.sched">ResponseTime.ResponseTimeBound.sched</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.tsk">ResponseTime.ResponseTimeBound.tsk</a> [variable, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.service_after_task_rt_zero">ResponseTime.service_after_task_rt_zero</a> [lemma, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.service_after_job_rt_zero">ResponseTime.service_after_job_rt_zero</a> [lemma, in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html">response_time</a> [library]<br/> -<a href="ExtraRelations.html#restr_eq_union">restr_eq_union</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_rel_trans">restr_rel_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_eq_rel">restr_eq_rel</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_rel">restr_rel</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_subset">restr_subset</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#reverse_sorted">reverse_sorted</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#revert_comp_relation">revert_comp_relation</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#rt_t_trans">rt_t_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="global_S"></a><h2>S </h2> -<a href="Vbase.html#sameP">sameP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#same_relation_restr">same_relation_restr</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#same_relation_trans">same_relation_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#same_relation_sym">same_relation_sym</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#same_relation_refl">same_relation_refl</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="schedulability.html#Schedulability">Schedulability</a> [module, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html">schedulability</a> [library]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas">Schedulability.BasicLemmas</a> [section, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs">Schedulability.BasicLemmas.AllJobs</a> [section, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.H_valid_job">Schedulability.BasicLemmas.AllJobs.H_valid_job</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.H_job_of_task">Schedulability.BasicLemmas.AllJobs.H_job_of_task</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j">Schedulability.BasicLemmas.AllJobs.j</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.no_deadline_misses">Schedulability.BasicLemmas.AllJobs.no_deadline_misses</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.tsk">Schedulability.BasicLemmas.AllJobs.tsk</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.H_completed_jobs_dont_execute">Schedulability.BasicLemmas.H_completed_jobs_dont_execute</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.job_task">Schedulability.BasicLemmas.job_task</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.job_deadline">Schedulability.BasicLemmas.job_deadline</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.job_cost">Schedulability.BasicLemmas.job_cost</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.sched">Schedulability.BasicLemmas.sched</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.SpecificJob">Schedulability.BasicLemmas.SpecificJob</a> [section, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j">Schedulability.BasicLemmas.SpecificJob.j</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.no_deadline_miss">Schedulability.BasicLemmas.SpecificJob.no_deadline_miss</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.task_deadline">Schedulability.BasicLemmas.task_deadline</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.task_period">Schedulability.BasicLemmas.task_period</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.task_cost">Schedulability.BasicLemmas.task_cost</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.cumulative_service_after_task_deadline_zero">Schedulability.cumulative_service_after_task_deadline_zero</a> [lemma, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.cumulative_service_after_job_deadline_zero">Schedulability.cumulative_service_after_job_deadline_zero</a> [lemma, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.job_misses_no_deadline">Schedulability.job_misses_no_deadline</a> [definition, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs">Schedulability.SchedulableDefs</a> [section, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.job_deadline">Schedulability.SchedulableDefs.job_deadline</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.job_cost">Schedulability.SchedulableDefs.job_cost</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs">Schedulability.SchedulableDefs.ScheduleOfJobs</a> [section, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.j">Schedulability.SchedulableDefs.ScheduleOfJobs.j</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.sched">Schedulability.SchedulableDefs.ScheduleOfJobs.sched</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks">Schedulability.SchedulableDefs.ScheduleOfTasks</a> [section, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.job_task">Schedulability.SchedulableDefs.ScheduleOfTasks.job_task</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.sched">Schedulability.SchedulableDefs.ScheduleOfTasks.sched</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.tsk">Schedulability.SchedulableDefs.ScheduleOfTasks.tsk</a> [variable, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.service_after_task_deadline_zero">Schedulability.service_after_task_deadline_zero</a> [lemma, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.service_after_job_deadline_zero">Schedulability.service_after_job_deadline_zero</a> [lemma, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.task_misses_no_deadline_before">Schedulability.task_misses_no_deadline_before</a> [definition, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.task_misses_no_deadline">Schedulability.task_misses_no_deadline</a> [definition, in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedule.html#Schedule">Schedule</a> [module, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html">schedule</a> [library]<br/> -<a href="schedule.html#ScheduleOfSporadicTask">ScheduleOfSporadicTask</a> [module, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas">ScheduleOfSporadicTask.BasicLemmas</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.H_job_of_task">ScheduleOfSporadicTask.BasicLemmas.H_job_of_task</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.j">ScheduleOfSporadicTask.BasicLemmas.j</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.jobs_dont_execute_after_completion">ScheduleOfSporadicTask.BasicLemmas.jobs_dont_execute_after_completion</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_task">ScheduleOfSporadicTask.BasicLemmas.job_task</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_deadline">ScheduleOfSporadicTask.BasicLemmas.job_deadline</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_cost">ScheduleOfSporadicTask.BasicLemmas.job_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sched">ScheduleOfSporadicTask.BasicLemmas.sched</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_deadline">ScheduleOfSporadicTask.BasicLemmas.task_deadline</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_cost">ScheduleOfSporadicTask.BasicLemmas.task_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.tsk">ScheduleOfSporadicTask.BasicLemmas.tsk</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.valid_job">ScheduleOfSporadicTask.BasicLemmas.valid_job</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.cumulative_service_le_task_cost">ScheduleOfSporadicTask.cumulative_service_le_task_cost</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel">ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule">ScheduleOfSporadicTask.ValidSchedule</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.job_task">ScheduleOfSporadicTask.ValidSchedule.job_task</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.job_cost">ScheduleOfSporadicTask.ValidSchedule.job_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.sched">ScheduleOfSporadicTask.ValidSchedule.sched</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter">ScheduleOfTaskWithJitter</a> [module, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter">ScheduleOfTaskWithJitter.ArrivalAfterJitter</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.BasicLemmas">ScheduleOfTaskWithJitter.ArrivalAfterJitter.BasicLemmas</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_jitter">ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_jitter</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_task">ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_task</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_cost">ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched">ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.arrival_before_jitter">ScheduleOfTaskWithJitter.arrival_before_jitter</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.jobs_execute_after_jitter">ScheduleOfTaskWithJitter.jobs_execute_after_jitter</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.backlogged">Schedule.backlogged</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.carried_out">Schedule.carried_out</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.carried_in">Schedule.carried_in</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.completed">Schedule.completed</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.completed_jobs_dont_execute">Schedule.completed_jobs_dont_execute</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.completion_monotonic">Schedule.completion_monotonic</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.cumulative_service_before_job_arrival_zero">Schedule.cumulative_service_before_job_arrival_zero</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.cumulative_service_le_job_cost">Schedule.cumulative_service_le_job_cost</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.cumulative_service_le_delta">Schedule.cumulative_service_le_delta</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.is_idle">Schedule.is_idle</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_must_arrive_to_execute">Schedule.jobs_must_arrive_to_execute</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_dont_execute_in_parallel">Schedule.jobs_dont_execute_in_parallel</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_scheduled_between">Schedule.jobs_scheduled_between</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_scheduled_at">Schedule.jobs_scheduled_at</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.job_scheduled_during_interval">Schedule.job_scheduled_during_interval</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.not_scheduled_no_service">Schedule.not_scheduled_no_service</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.pending">Schedule.pending</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.processor">Schedule.processor</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.schedule">Schedule.schedule</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.scheduled">Schedule.scheduled</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduleDef">Schedule.ScheduleDef</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduleDef.arr_seq">Schedule.ScheduleDef.arr_seq</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduleDef.num_cpus">Schedule.ScheduleDef.num_cpus</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs">Schedule.ScheduledJobs</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs.j">Schedule.ScheduledJobs.j</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs.job_cost">Schedule.ScheduledJobs.job_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs.sched">Schedule.ScheduledJobs.sched</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service">Schedule.service</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas">Schedule.ServiceLemmas</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Arrival">Schedule.ServiceLemmas.Arrival</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Arrival.H_jobs_must_arrive">Schedule.ServiceLemmas.Arrival.H_jobs_must_arrive</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Basic">Schedule.ServiceLemmas.Basic</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Completion">Schedule.ServiceLemmas.Completion</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Completion.H_completed_jobs">Schedule.ServiceLemmas.Completion.H_completed_jobs</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.j">Schedule.ServiceLemmas.j</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.job_cost">Schedule.ServiceLemmas.job_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.NoParallelism">Schedule.ServiceLemmas.NoParallelism</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.NoParallelism.no_parallelism">Schedule.ServiceLemmas.NoParallelism.no_parallelism</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.sched">Schedule.ServiceLemmas.sched</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_before_arrival_eq_service_during">Schedule.service_before_arrival_eq_service_during</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_before_job_arrival_zero">Schedule.service_before_job_arrival_zero</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_at_most_one">Schedule.service_at_most_one</a> [lemma, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_during">Schedule.service_during</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_at">Schedule.service_at</a> [definition, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ValidSchedules">Schedule.ValidSchedules</a> [section, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ValidSchedules.job_cost">Schedule.ValidSchedules.job_cost</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ValidSchedules.sched">Schedule.ValidSchedules.sched</a> [variable, in <a href="schedule.html">schedule</a>]<br/> -<a href="util_lemmas.html#size_bigcat_ord">size_bigcat_ord</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sorted_rcons_prefix">sorted_rcons_prefix</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="task.html#SporadicTask">SporadicTask</a> [module, in <a href="task.html">task</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival">SporadicTaskArrival</a> [module, in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels">SporadicTaskArrival.ArrivalModels</a> [section, in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels.arr_seq">SporadicTaskArrival.ArrivalModels.arr_seq</a> [variable, in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels.job_task">SporadicTaskArrival.ArrivalModels.job_task</a> [variable, in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels.task_period">SporadicTaskArrival.ArrivalModels.task_period</a> [variable, in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.sporadic_task_model">SporadicTaskArrival.sporadic_task_model</a> [definition, in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task.html#SporadicTaskset">SporadicTaskset</a> [module, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.arbitrary_deadline_model">SporadicTaskset.arbitrary_deadline_model</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.implicit_deadline_model">SporadicTaskset.implicit_deadline_model</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.restricted_deadline_model">SporadicTaskset.restricted_deadline_model</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs">SporadicTaskset.TasksetDefs</a> [section, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties">SporadicTaskset.TasksetDefs.TasksetProperties</a> [section, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.is_valid_task">SporadicTaskset.TasksetDefs.TasksetProperties.is_valid_task</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline">SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_period">SporadicTaskset.TasksetDefs.TasksetProperties.task_period</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_cost">SporadicTaskset.TasksetDefs.TasksetProperties.task_cost</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.ts">SporadicTaskset.TasksetDefs.TasksetProperties.ts</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.taskset_of">SporadicTaskset.taskset_of</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.valid_sporadic_taskset">SporadicTaskset.valid_sporadic_taskset</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask">SporadicTask.BasicTask</a> [section, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.task_deadline">SporadicTask.BasicTask.task_deadline</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.task_period">SporadicTask.BasicTask.task_period</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.task_cost">SporadicTask.BasicTask.task_cost</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.ValidParameters">SporadicTask.BasicTask.ValidParameters</a> [section, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.ValidParameters.tsk">SporadicTask.BasicTask.ValidParameters.tsk</a> [variable, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.is_valid_sporadic_task">SporadicTask.is_valid_sporadic_task</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_cost_le_period">SporadicTask.task_cost_le_period</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_cost_le_deadline">SporadicTask.task_cost_le_deadline</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_deadline_positive">SporadicTask.task_deadline_positive</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_period_positive">SporadicTask.task_period_positive</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_cost_positive">SporadicTask.task_cost_positive</a> [definition, in <a href="task.html">task</a>]<br/> -<a href="ssromega.html">ssromega</a> [library]<br/> -<a href="util_lemmas.html#strong_ind_lt">strong_ind_lt</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#strong_ind">strong_ind</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh1">subh1</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh2">subh2</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh3">subh3</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh4">subh4</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subndiv_eq_mod">subndiv_eq_mod</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sum_nat_eq0_nat">sum_nat_eq0_nat</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sum_diff">sum_diff</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sum_diff_monotonic">sum_diff_monotonic</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="global_T"></a><h2>T </h2> -<a href="task.html">task</a> [library]<br/> -<a href="task_arrival.html">task_arrival</a> [library]<br/> -<a href="util_lemmas.html#telescoping_sum">telescoping_sum</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#total_immediate_unique">total_immediate_unique</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#total_over_seq">total_over_seq</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#tot_ext_inv">tot_ext_inv</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_irr">tot_ext_irr</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_trans">tot_ext_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_extends">tot_ext_extends</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext">tot_ext</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#trans_irr_acyclic">trans_irr_acyclic</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#Triple">Triple</a> [section, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#triple_3rd">triple_3rd</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#triple_2nd">triple_2nd</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#triple_1st">triple_1st</a> [definition, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#Triple.p">Triple.p</a> [variable, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#t_rt_step">t_rt_step</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#t_step_rt">t_step_rt</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#t_rt_trans">t_rt_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="global_U"></a><h2>U </h2> -<a href="ExtraRelations.html#undup">undup</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#union_restr">union_restr</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#upward_clos_trans">upward_clos_trans</a> [lemma, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#upward_closed">upward_closed</a> [definition, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html">util_lemmas</a> [library]<br/> -<a href="util_divround.html">util_divround</a> [library]<br/> -<br/><br/><a name="global_V"></a><h2>V </h2> -<a href="Vbase.html">Vbase</a> [library]<br/> -<a href="Vbase.html#vlib__beq_rewrite">vlib__beq_rewrite</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__eqb_split">vlib__eqb_split</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__norb_split">vlib__norb_split</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__orb_split">vlib__orb_split</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__nandb_split">vlib__nandb_split</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__andb_split">vlib__andb_split</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__negb_rewrite">vlib__negb_rewrite</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__internal_eqP">vlib__internal_eqP</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__not_false_is_true">vlib__not_false_is_true</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__true_is_true">vlib__true_is_true</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="global_W"></a><h2>W </h2> -<a href="workload.html#Workload">Workload</a> [module, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html">workload</a> [library]<br/> -<a href="workload_bound.html#WorkloadBound">WorkloadBound</a> [module, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan">WorkloadBoundGuan</a> [module, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry">WorkloadBoundGuan.BasicLemmasCarry</a> [section, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.period_positive">WorkloadBoundGuan.BasicLemmasCarry.period_positive</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.R">WorkloadBoundGuan.BasicLemmasCarry.R</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.task_period">WorkloadBoundGuan.BasicLemmasCarry.task_period</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.task_cost">WorkloadBoundGuan.BasicLemmasCarry.task_cost</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.tsk">WorkloadBoundGuan.BasicLemmasCarry.tsk</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.workload_bound_CI">WorkloadBoundGuan.BasicLemmasCarry.workload_bound_CI</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.workload_bound_NC">WorkloadBoundGuan.BasicLemmasCarry.workload_bound_NC</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.max_jobs_CI">WorkloadBoundGuan.max_jobs_CI</a> [definition, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.max_jobs_NC">WorkloadBoundGuan.max_jobs_NC</a> [definition, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound">WorkloadBoundGuan.ProofWorkloadBound</a> [section, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.arr_seq">WorkloadBoundGuan.ProofWorkloadBound.arr_seq</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.delta">WorkloadBoundGuan.ProofWorkloadBound.delta</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_response_time_bound">WorkloadBoundGuan.ProofWorkloadBound.H_response_time_bound</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_response_time_ge_cost">WorkloadBoundGuan.ProofWorkloadBound.H_response_time_ge_cost</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_no_deadline_misses_during_interval">WorkloadBoundGuan.ProofWorkloadBound.H_no_deadline_misses_during_interval</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_restricted_deadline">WorkloadBoundGuan.ProofWorkloadBound.H_restricted_deadline</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_valid_task_parameters">WorkloadBoundGuan.ProofWorkloadBound.H_valid_task_parameters</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_sporadic_tasks">WorkloadBoundGuan.ProofWorkloadBound.H_sporadic_tasks</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_no_parallelism">WorkloadBoundGuan.ProofWorkloadBound.H_no_parallelism</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_completed_jobs_dont_execute">WorkloadBoundGuan.ProofWorkloadBound.H_completed_jobs_dont_execute</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_jobs_must_arrive_to_execute">WorkloadBoundGuan.ProofWorkloadBound.H_jobs_must_arrive_to_execute</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_jobs_have_valid_parameters">WorkloadBoundGuan.ProofWorkloadBound.H_jobs_have_valid_parameters</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_has_completed_by">WorkloadBoundGuan.ProofWorkloadBound.job_has_completed_by</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_deadline">WorkloadBoundGuan.ProofWorkloadBound.job_deadline</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_task">WorkloadBoundGuan.ProofWorkloadBound.job_task</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_cost">WorkloadBoundGuan.ProofWorkloadBound.job_cost</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.no_deadline_misses_by">WorkloadBoundGuan.ProofWorkloadBound.no_deadline_misses_by</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.num_cpus">WorkloadBoundGuan.ProofWorkloadBound.num_cpus</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.R_tsk">WorkloadBoundGuan.ProofWorkloadBound.R_tsk</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.sched">WorkloadBoundGuan.ProofWorkloadBound.sched</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.schedule_of_platform">WorkloadBoundGuan.ProofWorkloadBound.schedule_of_platform</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.sched_of_platform">WorkloadBoundGuan.ProofWorkloadBound.sched_of_platform</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.task_deadline">WorkloadBoundGuan.ProofWorkloadBound.task_deadline</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.task_period">WorkloadBoundGuan.ProofWorkloadBound.task_period</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.task_cost">WorkloadBoundGuan.ProofWorkloadBound.task_cost</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.tsk">WorkloadBoundGuan.ProofWorkloadBound.tsk</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.t1">WorkloadBoundGuan.ProofWorkloadBound.t1</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.workload_of">WorkloadBoundGuan.ProofWorkloadBound.workload_of</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry">WorkloadBoundGuan.WorkloadBoundCarry</a> [section, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.delta">WorkloadBoundGuan.WorkloadBoundCarry.delta</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.e">WorkloadBoundGuan.WorkloadBoundCarry.e</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.p">WorkloadBoundGuan.WorkloadBoundCarry.p</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.R_tsk">WorkloadBoundGuan.WorkloadBoundCarry.R_tsk</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.task_period">WorkloadBoundGuan.WorkloadBoundCarry.task_period</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.task_cost">WorkloadBoundGuan.WorkloadBoundCarry.task_cost</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.tsk">WorkloadBoundGuan.WorkloadBoundCarry.tsk</a> [variable, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_CI_monotonic">WorkloadBoundGuan.W_CI_monotonic</a> [lemma, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_NC_monotonic">WorkloadBoundGuan.W_NC_monotonic</a> [lemma, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_CI">WorkloadBoundGuan.W_CI</a> [definition, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_NC">WorkloadBoundGuan.W_NC</a> [definition, in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas">WorkloadBound.BasicLemmas</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.H_R1_le_R2">WorkloadBound.BasicLemmas.H_R1_le_R2</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.H_R_lower_bound">WorkloadBound.BasicLemmas.H_R_lower_bound</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.H_period_positive">WorkloadBound.BasicLemmas.H_period_positive</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.R1">WorkloadBound.BasicLemmas.R1</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.R2">WorkloadBound.BasicLemmas.R2</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.task_period">WorkloadBound.BasicLemmas.task_period</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.task_cost">WorkloadBound.BasicLemmas.task_cost</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.tsk">WorkloadBound.BasicLemmas.tsk</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.workload_bound">WorkloadBound.BasicLemmas.workload_bound</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.max_jobs">WorkloadBound.max_jobs</a> [definition, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound">WorkloadBound.ProofWorkloadBound</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq">WorkloadBound.ProofWorkloadBound.arr_seq</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.delta">WorkloadBound.ProofWorkloadBound.delta</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_response_time_bound">WorkloadBound.ProofWorkloadBound.H_response_time_bound</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_response_time_ge_cost">WorkloadBound.ProofWorkloadBound.H_response_time_ge_cost</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_no_deadline_misses_during_interval">WorkloadBound.ProofWorkloadBound.H_no_deadline_misses_during_interval</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_restricted_deadline">WorkloadBound.ProofWorkloadBound.H_restricted_deadline</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_valid_task_parameters">WorkloadBound.ProofWorkloadBound.H_valid_task_parameters</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_sporadic_tasks">WorkloadBound.ProofWorkloadBound.H_sporadic_tasks</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_no_parallelism">WorkloadBound.ProofWorkloadBound.H_no_parallelism</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_completed_jobs_dont_execute">WorkloadBound.ProofWorkloadBound.H_completed_jobs_dont_execute</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_jobs_must_arrive_to_execute">WorkloadBound.ProofWorkloadBound.H_jobs_must_arrive_to_execute</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_jobs_have_valid_parameters">WorkloadBound.ProofWorkloadBound.H_jobs_have_valid_parameters</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_has_completed_by">WorkloadBound.ProofWorkloadBound.job_has_completed_by</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_deadline">WorkloadBound.ProofWorkloadBound.job_deadline</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task">WorkloadBound.ProofWorkloadBound.job_task</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_cost">WorkloadBound.ProofWorkloadBound.job_cost</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof">WorkloadBound.ProofWorkloadBound.MainProof</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs">WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.n_k">WorkloadBound.ProofWorkloadBound.MainProof.n_k</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.order">WorkloadBound.ProofWorkloadBound.MainProof.order</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.SimplifyJobSequence">WorkloadBound.ProofWorkloadBound.MainProof.SimplifyJobSequence</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs">WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2">WorkloadBound.ProofWorkloadBound.MainProof.t2</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadNotManyJobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadNotManyJobs</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.H_at_least_one_job">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.H_at_least_one_job</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.H_at_least_two_jobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.H_at_least_two_jobs</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound">WorkloadBound.ProofWorkloadBound.MainProof.workload_bound</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.no_deadline_misses_by">WorkloadBound.ProofWorkloadBound.no_deadline_misses_by</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk">WorkloadBound.ProofWorkloadBound.R_tsk</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched">WorkloadBound.ProofWorkloadBound.sched</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_deadline">WorkloadBound.ProofWorkloadBound.task_deadline</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period">WorkloadBound.ProofWorkloadBound.task_period</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost">WorkloadBound.ProofWorkloadBound.task_cost</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk">WorkloadBound.ProofWorkloadBound.tsk</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1">WorkloadBound.ProofWorkloadBound.t1</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.workload_of">WorkloadBound.ProofWorkloadBound.workload_of</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.W">WorkloadBound.W</a> [definition, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef">WorkloadBound.WorkloadBoundDef</a> [section, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.delta">WorkloadBound.WorkloadBoundDef.delta</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.R_tsk">WorkloadBound.WorkloadBoundDef.R_tsk</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_period">WorkloadBound.WorkloadBoundDef.task_period</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_cost">WorkloadBound.WorkloadBoundDef.task_cost</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.tsk">WorkloadBound.WorkloadBoundDef.tsk</a> [variable, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bounded_by_W">WorkloadBound.workload_bounded_by_W</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_n_k_equals_num_mid_jobs_plus_1">WorkloadBound.workload_bound_n_k_equals_num_mid_jobs_plus_1</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_n_k_equals_num_mid_jobs">WorkloadBound.workload_bound_n_k_equals_num_mid_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_n_k_covers_middle_jobs">WorkloadBound.workload_bound_n_k_covers_middle_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_helper_lemma">WorkloadBound.workload_bound_helper_lemma</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_many_periods_in_between">WorkloadBound.workload_bound_many_periods_in_between</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_service_of_middle_jobs">WorkloadBound.workload_bound_service_of_middle_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_simpl_expression_with_first_and_last">WorkloadBound.workload_bound_simpl_expression_with_first_and_last</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_service_of_first_and_last_jobs">WorkloadBound.workload_bound_service_of_first_and_last_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_last_job_arrives_before_end_of_interval">WorkloadBound.workload_bound_last_job_arrives_before_end_of_interval</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_response_time_of_first_job_inside_interval">WorkloadBound.workload_bound_response_time_of_first_job_inside_interval</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_j_lst_is_job_of_tsk">WorkloadBound.workload_bound_j_lst_is_job_of_tsk</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_holds_for_a_single_job">WorkloadBound.workload_bound_holds_for_a_single_job</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_j_fst_is_job_of_tsk">WorkloadBound.workload_bound_j_fst_is_job_of_tsk</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_holds_for_at_most_n_k_jobs">WorkloadBound.workload_bound_holds_for_at_most_n_k_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_jobs_ordered_by_arrival">WorkloadBound.workload_bound_jobs_ordered_by_arrival</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_all_jobs_from_tsk">WorkloadBound.workload_bound_all_jobs_from_tsk</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_job_in_same_sequence">WorkloadBound.workload_bound_job_in_same_sequence</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_simpl_by_sorting_interfering_jobs">WorkloadBound.workload_bound_simpl_by_sorting_interfering_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_simpl_by_filtering_interfering_jobs">WorkloadBound.workload_bound_simpl_by_filtering_interfering_jobs</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.W_monotonic">WorkloadBound.W_monotonic</a> [lemma, in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter">WorkloadWithJitter</a> [module, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas">WorkloadWithJitter.BasicLemmas</a> [section, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.period_positive">WorkloadWithJitter.BasicLemmas.period_positive</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.R">WorkloadWithJitter.BasicLemmas.R</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.R_lower_bound">WorkloadWithJitter.BasicLemmas.R_lower_bound</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.task_jitter">WorkloadWithJitter.BasicLemmas.task_jitter</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.task_period">WorkloadWithJitter.BasicLemmas.task_period</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.task_cost">WorkloadWithJitter.BasicLemmas.task_cost</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.tsk">WorkloadWithJitter.BasicLemmas.tsk</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.workload_bound">WorkloadWithJitter.BasicLemmas.workload_bound</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.max_jobs_jitter">WorkloadWithJitter.max_jobs_jitter</a> [definition, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.no_deadline_misses_by">WorkloadWithJitter.no_deadline_misses_by</a> [definition, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter">WorkloadWithJitter.ProofWorkloadBoundJitter</a> [section, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.arr_seq">WorkloadWithJitter.ProofWorkloadBoundJitter.arr_seq</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions">WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions</a> [section, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions.tsk">WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions.tsk</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.delta">WorkloadWithJitter.ProofWorkloadBoundJitter.delta</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.H_completed_jobs_dont_execute">WorkloadWithJitter.ProofWorkloadBoundJitter.H_completed_jobs_dont_execute</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.H_jobs_must_arrive_after_jitter">WorkloadWithJitter.ProofWorkloadBoundJitter.H_jobs_must_arrive_after_jitter</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.jobs_have_valid_parameters">WorkloadWithJitter.ProofWorkloadBoundJitter.jobs_have_valid_parameters</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_jitter">WorkloadWithJitter.ProofWorkloadBoundJitter.job_jitter</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_deadline">WorkloadWithJitter.ProofWorkloadBoundJitter.job_deadline</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_task">WorkloadWithJitter.ProofWorkloadBoundJitter.job_task</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_cost">WorkloadWithJitter.ProofWorkloadBoundJitter.job_cost</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.no_deadline_misses_during_interval">WorkloadWithJitter.ProofWorkloadBoundJitter.no_deadline_misses_during_interval</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.no_parallelism">WorkloadWithJitter.ProofWorkloadBoundJitter.no_parallelism</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.num_cpus">WorkloadWithJitter.ProofWorkloadBoundJitter.num_cpus</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_ge_cost">WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_ge_cost</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_bound">WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_bound</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.restricted_deadline">WorkloadWithJitter.ProofWorkloadBoundJitter.restricted_deadline</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.R_tsk">WorkloadWithJitter.ProofWorkloadBoundJitter.R_tsk</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.sched">WorkloadWithJitter.ProofWorkloadBoundJitter.sched</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.schedule_of_platform">WorkloadWithJitter.ProofWorkloadBoundJitter.schedule_of_platform</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.sched_of_platform">WorkloadWithJitter.ProofWorkloadBoundJitter.sched_of_platform</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.sporadic_tasks">WorkloadWithJitter.ProofWorkloadBoundJitter.sporadic_tasks</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_jitter">WorkloadWithJitter.ProofWorkloadBoundJitter.task_jitter</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_deadline">WorkloadWithJitter.ProofWorkloadBoundJitter.task_deadline</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_period">WorkloadWithJitter.ProofWorkloadBoundJitter.task_period</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_cost">WorkloadWithJitter.ProofWorkloadBoundJitter.task_cost</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.tsk">WorkloadWithJitter.ProofWorkloadBoundJitter.tsk</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.t1">WorkloadWithJitter.ProofWorkloadBoundJitter.t1</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.valid_task_parameters">WorkloadWithJitter.ProofWorkloadBoundJitter.valid_task_parameters</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.workload_bound">WorkloadWithJitter.ProofWorkloadBoundJitter.workload_bound</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.response_time_bound_of">WorkloadWithJitter.response_time_bound_of</a> [definition, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter">WorkloadWithJitter.WorkloadBoundWithJitter</a> [section, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.delta">WorkloadWithJitter.WorkloadBoundWithJitter.delta</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.job_task">WorkloadWithJitter.WorkloadBoundWithJitter.job_task</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.R_tsk">WorkloadWithJitter.WorkloadBoundWithJitter.R_tsk</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.sched">WorkloadWithJitter.WorkloadBoundWithJitter.sched</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.task_jitter">WorkloadWithJitter.WorkloadBoundWithJitter.task_jitter</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.task_period">WorkloadWithJitter.WorkloadBoundWithJitter.task_period</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.task_cost">WorkloadWithJitter.WorkloadBoundWithJitter.task_cost</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.tsk">WorkloadWithJitter.WorkloadBoundWithJitter.tsk</a> [variable, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.workload_bounded_by_W_jitter">WorkloadWithJitter.workload_bounded_by_W_jitter</a> [lemma, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.workload_of">WorkloadWithJitter.workload_of</a> [definition, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.W_jitter_monotonic">WorkloadWithJitter.W_jitter_monotonic</a> [lemma, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.W_jitter">WorkloadWithJitter.W_jitter</a> [definition, in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html">workload_jitter</a> [library]<br/> -<a href="workload_guan.html">workload_guan</a> [library]<br/> -<a href="workload_bound.html">workload_bound</a> [library]<br/> -<a href="workload.html#Workload.service_of_task">Workload.service_of_task</a> [definition, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.workload">Workload.workload</a> [definition, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.WorkloadDef">Workload.WorkloadDef</a> [section, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.WorkloadDef.job_task">Workload.WorkloadDef.job_task</a> [variable, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.WorkloadDef.sched">Workload.WorkloadDef.sched</a> [variable, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.WorkloadDef.tsk">Workload.WorkloadDef.tsk</a> [variable, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.workload_eq_workload_joblist">Workload.workload_eq_workload_joblist</a> [lemma, in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.workload_joblist">Workload.workload_joblist</a> [definition, in <a href="workload.html">workload</a>]<br/> -<br/><br/><a name="global_X"></a><h2>X </h2> -<a href="Vbase.html#xorPif">xorPif</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#xorPifn">xorPifn</a> [lemma, in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="global_Z"></a><h2>Z </h2> -<a href="util_lemmas.html#zipP">zipP</a> [lemma, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="global_*"></a><h2>other </h2> -<a href="util_lemmas.html#:bool_scope:x_'\In'_x">_ \In _ (bool_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'!='_x_':>'_x">_ != _ :> _ (bool_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'!='_x">_ != _ (bool_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'=='_x_':>'_x">_ == _ :> _ (bool_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'=='_x">_ == _ (bool_scope)</a> [notation, in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_'|'_x_')'_x">\cat_ ( _ < _ | _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x">\cat_ ( _ < _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\max_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x">\max_ ( ( _ , _ ) <- _ | _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\max_'_'('_'('_x_','_x_')'_'<-'_x_')'_x">\max_ ( ( _ , _ ) <- _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x">\sum_ ( ( _ , _ ) <- _ | _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x">\sum_ ( ( _ , _ ) <- _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_'|'_x_')'_x">\cat_ ( _ <= _ < _ | _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x">\cat_ ( _ <= _ < _ ) _ (nat_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:seq_scope:'['_'seq'_'('_x_','_x_')'_'<-'_x_'|'_x_']'">[ seq ( _ , _ ) <- _ | _ ] (seq_scope)</a> [notation, in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#::x_'<-->'_x">_ <--> _</a> [notation, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#::x_'UNION1'_'('_x_','_x_')'">_ UNION1 ( _ , _ )</a> [notation, in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><hr/> -<h1>Notation Index</h1> -<a name="notation_E"></a><h2>E </h2> -<a href="Vbase.html#Equality.Exports.:form_scope:'['_'eqType'_'of'_x_']'">[ eqType of _ ] (form_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.:form_scope:'['_'eqType'_'of'_x_'for'_x_']'">[ eqType of _ for _ ] (form_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.:form_scope:'['_'eqMixin'_'of'_x_']'">[ eqMixin of _ ] (form_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="notation_*"></a><h2>other </h2> -<a href="util_lemmas.html#:bool_scope:x_'\In'_x">_ \In _ (bool_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'!='_x_':>'_x">_ != _ :> _ (bool_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'!='_x">_ != _ (bool_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'=='_x_':>'_x">_ == _ :> _ (bool_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#:bool_scope:x_'=='_x">_ == _ (bool_scope)</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_'|'_x_')'_x">\cat_ ( _ < _ | _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x">\cat_ ( _ < _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\max_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x">\max_ ( ( _ , _ ) <- _ | _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\max_'_'('_'('_x_','_x_')'_'<-'_x_')'_x">\max_ ( ( _ , _ ) <- _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x">\sum_ ( ( _ , _ ) <- _ | _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x">\sum_ ( ( _ , _ ) <- _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_'|'_x_')'_x">\cat_ ( _ <= _ < _ | _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x">\cat_ ( _ <= _ < _ ) _ (nat_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#:seq_scope:'['_'seq'_'('_x_','_x_')'_'<-'_x_'|'_x_']'">[ seq ( _ , _ ) <- _ | _ ] (seq_scope)</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#::x_'<-->'_x">_ <--> _</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#::x_'UNION1'_'('_x_','_x_')'">_ UNION1 ( _ , _ )</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><hr/> -<h1>Module Index</h1> -<a name="module_A"></a><h2>A </h2> -<a href="arrival_sequence.html#ArrivalSequence">ArrivalSequence</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<br/><br/><a name="module_E"></a><h2>E </h2> -<a href="interference_bound_edf.html#EDFSpecificBound">EDFSpecificBound</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="Vbase.html#Equality">Equality</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports">Equality.Exports</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="module_I"></a><h2>I </h2> -<a href="interference.html#Interference">Interference</a> [in <a href="interference.html">interference</a>]<br/> -<br/><br/><a name="module_J"></a><h2>J </h2> -<a href="job.html#Job">Job</a> [in <a href="job.html">job</a>]<br/> -<br/><br/><a name="module_P"></a><h2>P </h2> -<a href="platform.html#Platform">Platform</a> [in <a href="platform.html">platform</a>]<br/> -<a href="priority.html#Priority">Priority</a> [in <a href="priority.html">priority</a>]<br/> -<br/><br/><a name="module_R"></a><h2>R </h2> -<a href="response_time.html#ResponseTime">ResponseTime</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF">ResponseTimeAnalysisEDF</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP">ResponseTimeAnalysisFP</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan">ResponseTimeAnalysisGuan</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter">ResponseTimeAnalysisJitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF">ResponseTimeIterationEDF</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP">ResponseTimeIterationFP</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan">ResponseTimeIterationFPGuan</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter">ResponseTimeIterationFPWithJitter</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<br/><br/><a name="module_S"></a><h2>S </h2> -<a href="schedulability.html#Schedulability">Schedulability</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedule.html#Schedule">Schedule</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask">ScheduleOfSporadicTask</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter">ScheduleOfTaskWithJitter</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="task.html#SporadicTask">SporadicTask</a> [in <a href="task.html">task</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival">SporadicTaskArrival</a> [in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task.html#SporadicTaskset">SporadicTaskset</a> [in <a href="task.html">task</a>]<br/> -<br/><br/><a name="module_W"></a><h2>W </h2> -<a href="workload.html#Workload">Workload</a> [in <a href="workload.html">workload</a>]<br/> -<a href="workload_bound.html#WorkloadBound">WorkloadBound</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan">WorkloadBoundGuan</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter">WorkloadWithJitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<br/><br/><hr/> -<h1>Variable Index</h1> -<a name="variable_A"></a><h2>A </h2> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceDef.Job">ArrivalSequence.ArrivalSequenceDef.Job</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties.arr_seq">ArrivalSequence.ArrivalSequenceProperties.arr_seq</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivingJobs.j">ArrivalSequence.ArrivingJobs.j</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<br/><br/><a name="variable_B"></a><h2>B </h2> -<a href="Vbase.html#BoolIf.A">BoolIf.A</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.b">BoolIf.b</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.B">BoolIf.B</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.f">BoolIf.f</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.vF">BoolIf.vF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.vT">BoolIf.vT</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#BoolIf.x">BoolIf.x</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="variable_E"></a><h2>E </h2> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.delta">EDFSpecificBound.EDFBoundDef.delta</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.R_other">EDFSpecificBound.EDFBoundDef.R_other</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_deadline">EDFSpecificBound.EDFBoundDef.task_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_period">EDFSpecificBound.EDFBoundDef.task_period</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_cost">EDFSpecificBound.EDFBoundDef.task_cost</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk">EDFSpecificBound.EDFBoundDef.tsk</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk_other">EDFSpecificBound.EDFBoundDef.tsk_other</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.all_jobs_from_taskset">EDFSpecificBound.ProofInterferenceBound.all_jobs_from_taskset</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.delta">EDFSpecificBound.ProofInterferenceBound.delta</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.higher_eq_priority">EDFSpecificBound.ProofInterferenceBound.higher_eq_priority</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_all_previous_jobs_completed_on_time">EDFSpecificBound.ProofInterferenceBound.H_all_previous_jobs_completed_on_time</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_delta_le_deadline">EDFSpecificBound.ProofInterferenceBound.H_delta_le_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_R_k_le_deadline">EDFSpecificBound.ProofInterferenceBound.H_R_k_le_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_tsk_k_in_task_set">EDFSpecificBound.ProofInterferenceBound.H_tsk_k_in_task_set</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_job_of_tsk_i">EDFSpecificBound.ProofInterferenceBound.H_job_of_tsk_i</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_tsk_i_in_task_set">EDFSpecificBound.ProofInterferenceBound.H_tsk_i_in_task_set</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_global_scheduling_invariant">EDFSpecificBound.ProofInterferenceBound.H_global_scheduling_invariant</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_restricted_deadlines">EDFSpecificBound.ProofInterferenceBound.H_restricted_deadlines</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_valid_task_parameters">EDFSpecificBound.ProofInterferenceBound.H_valid_task_parameters</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_at_least_one_cpu">EDFSpecificBound.ProofInterferenceBound.H_at_least_one_cpu</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_no_parallelism">EDFSpecificBound.ProofInterferenceBound.H_no_parallelism</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_completed_jobs_dont_execute">EDFSpecificBound.ProofInterferenceBound.H_completed_jobs_dont_execute</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_jobs_must_arrive_to_execute">EDFSpecificBound.ProofInterferenceBound.H_jobs_must_arrive_to_execute</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_valid_job_parameters">EDFSpecificBound.ProofInterferenceBound.H_valid_job_parameters</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.H_sporadic_tasks">EDFSpecificBound.ProofInterferenceBound.H_sporadic_tasks</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task">EDFSpecificBound.ProofInterferenceBound.job_task</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline">EDFSpecificBound.ProofInterferenceBound.job_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost">EDFSpecificBound.ProofInterferenceBound.job_cost</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i">EDFSpecificBound.ProofInterferenceBound.j_i</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k">EDFSpecificBound.ProofInterferenceBound.MainProof.D_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i">EDFSpecificBound.ProofInterferenceBound.MainProof.D_i</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs.H_few_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs.H_few_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.H_many_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.H_many_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.H_only_one_job">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.H_only_one_job</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded.H_j_fst_completed_by_rt_bound">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded.H_j_fst_completed_by_rt_bound</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded.H_j_fst_not_complete_by_rt_bound">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded.H_j_fst_not_complete_by_rt_bound</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.H_at_least_two_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.H_at_least_two_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by">EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound">EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k">EDFSpecificBound.ProofInterferenceBound.MainProof.n_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.order">EDFSpecificBound.ProofInterferenceBound.MainProof.order</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k">EDFSpecificBound.ProofInterferenceBound.MainProof.p_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs">EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1">EDFSpecificBound.ProofInterferenceBound.MainProof.t1</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2">EDFSpecificBound.ProofInterferenceBound.MainProof.t2</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.x">EDFSpecificBound.ProofInterferenceBound.MainProof.x</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.no_deadline_is_missed_by_tsk">EDFSpecificBound.ProofInterferenceBound.no_deadline_is_missed_by_tsk</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.num_cpus">EDFSpecificBound.ProofInterferenceBound.num_cpus</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.response_time_bounded_by">EDFSpecificBound.ProofInterferenceBound.response_time_bounded_by</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k">EDFSpecificBound.ProofInterferenceBound.R_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched">EDFSpecificBound.ProofInterferenceBound.sched</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline">EDFSpecificBound.ProofInterferenceBound.task_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period">EDFSpecificBound.ProofInterferenceBound.task_period</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost">EDFSpecificBound.ProofInterferenceBound.task_cost</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts">EDFSpecificBound.ProofInterferenceBound.ts</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k">EDFSpecificBound.ProofInterferenceBound.tsk_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i">EDFSpecificBound.ProofInterferenceBound.tsk_i</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="Vbase.html#Equality.ClassDef.cT">Equality.ClassDef.cT</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.ClassDef.T">Equality.ClassDef.T</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="variable_I"></a><h2>I </h2> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.completed_jobs_dont_execute">Interference.InterferenceDefs.CorrespondenceWithService.completed_jobs_dont_execute</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.jobs_must_arrive_to_execute">Interference.InterferenceDefs.CorrespondenceWithService.jobs_must_arrive_to_execute</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.job_is_not_complete">Interference.InterferenceDefs.CorrespondenceWithService.job_is_not_complete</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.job_has_arrived">Interference.InterferenceDefs.CorrespondenceWithService.job_has_arrived</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.no_parallelism">Interference.InterferenceDefs.CorrespondenceWithService.no_parallelism</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t1">Interference.InterferenceDefs.CorrespondenceWithService.t1</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t2">Interference.InterferenceDefs.CorrespondenceWithService.t2</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.EquivalenceWithPerJobInterference.H_no_intratask_parallelism">Interference.InterferenceDefs.EquivalenceWithPerJobInterference.H_no_intratask_parallelism</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.j">Interference.InterferenceDefs.j</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.JobInterference.job_other">Interference.InterferenceDefs.JobInterference.job_other</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.job_is_backlogged">Interference.InterferenceDefs.job_is_backlogged</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.job_task">Interference.InterferenceDefs.job_task</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.job_cost">Interference.InterferenceDefs.job_cost</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.sched">Interference.InterferenceDefs.sched</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterferenceJobList.tsk_other">Interference.InterferenceDefs.TaskInterferenceJobList.tsk_other</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterference.tsk_other">Interference.InterferenceDefs.TaskInterference.tsk_other</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.FP.higher_eq_priority">Interference.InterferingTasks.FP.higher_eq_priority</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.task_deadline">Interference.InterferingTasks.task_deadline</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.task_period">Interference.InterferingTasks.task_period</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.task_cost">Interference.InterferingTasks.task_cost</a> [in <a href="interference.html">interference</a>]<br/> -<br/><br/><a name="variable_J"></a><h2>J </h2> -<a href="job.html#Job.ValidJob.j">Job.ValidJob.j</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidJob.job_cost">Job.ValidJob.job_cost</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob.j">Job.ValidRealtimeJob.j</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob.job_deadline">Job.ValidRealtimeJob.job_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob.job_cost">Job.ValidRealtimeJob.job_cost</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.j">Job.ValidSporadicTaskJobWithJitter.j</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_jitter">Job.ValidSporadicTaskJobWithJitter.job_jitter</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_task">Job.ValidSporadicTaskJobWithJitter.job_task</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_deadline">Job.ValidSporadicTaskJobWithJitter.job_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.job_cost">Job.ValidSporadicTaskJobWithJitter.job_cost</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.j_is_valid_job">Job.ValidSporadicTaskJobWithJitter.j_is_valid_job</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.task_jitter">Job.ValidSporadicTaskJobWithJitter.task_jitter</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.task_deadline">Job.ValidSporadicTaskJobWithJitter.task_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter.task_cost">Job.ValidSporadicTaskJobWithJitter.task_cost</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.j">Job.ValidSporadicTaskJob.j</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.job_task">Job.ValidSporadicTaskJob.job_task</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.job_deadline">Job.ValidSporadicTaskJob.job_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.job_cost">Job.ValidSporadicTaskJob.job_cost</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.task_deadline">Job.ValidSporadicTaskJob.task_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob.task_cost">Job.ValidSporadicTaskJob.task_cost</a> [in <a href="job.html">job</a>]<br/> -<br/><br/><a name="variable_L"></a><h2>L </h2> -<a href="util_lemmas.html#l">l</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="variable_N"></a><h2>N </h2> -<a href="Vbase.html#NegationLemmas.b">NegationLemmas.b</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#NegationLemmas.c">NegationLemmas.c</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="variable_O"></a><h2>O </h2> -<a href="ExtraRelations.html#one_extension.rel">one_extension.rel</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_extension.elem">one_extension.elem</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_extension.X">one_extension.X</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="variable_P"></a><h2>P </h2> -<a href="util_lemmas.html#Pair.p">Pair.p</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.FP.higher_eq_priority">Platform.SchedulingInvariants.FP.higher_eq_priority</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_intra_task_parallelism">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_intra_task_parallelism</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_parallelism">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_parallelism</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_all_jobs_from_taskset">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_all_jobs_from_taskset</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_ts_is_a_set">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_ts_is_a_set</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas.H_invariant_holds">Platform.SchedulingInvariants.JLDP.BasicLemmas.H_invariant_holds</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.higher_eq_priority">Platform.SchedulingInvariants.JLDP.higher_eq_priority</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.job_task">Platform.SchedulingInvariants.job_task</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.job_deadline">Platform.SchedulingInvariants.job_deadline</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.job_cost">Platform.SchedulingInvariants.job_cost</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.num_cpus">Platform.SchedulingInvariants.num_cpus</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.sched">Platform.SchedulingInvariants.sched</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.task_deadline">Platform.SchedulingInvariants.task_deadline</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.task_period">Platform.SchedulingInvariants.task_period</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.task_cost">Platform.SchedulingInvariants.task_cost</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.ts">Platform.SchedulingInvariants.ts</a> [in <a href="platform.html">platform</a>]<br/> -<a href="priority.html#Priority.EDFDefs.arr_seq">Priority.EDFDefs.arr_seq</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.EDFDefs.job_deadline">Priority.EDFDefs.job_deadline</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP.arr_seq">Priority.GeneralizeFP.arr_seq</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP.job_task">Priority.GeneralizeFP.job_task</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP.num_cpus">Priority.GeneralizeFP.num_cpus</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.JLFPDefs.is_higher_priority">Priority.JLFPDefs.is_higher_priority</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.JLFPDefs.job_task">Priority.JLFPDefs.job_task</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.arr_seq">Priority.PriorityDefs.arr_seq</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.sporadic_task">Priority.PriorityDefs.sporadic_task</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidFPPolicy.is_higher_priority">Priority.PriorityDefs.ValidFPPolicy.is_higher_priority</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority">Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RateDeadlineMonotonic.task_deadline">Priority.RateDeadlineMonotonic.task_deadline</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RateDeadlineMonotonic.task_period">Priority.RateDeadlineMonotonic.task_period</a> [in <a href="priority.html">priority</a>]<br/> -<br/><br/><a name="variable_R"></a><h2>R </h2> -<a href="Vbase.html#ReflectConnectives.b1">ReflectConnectives.b1</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b2">ReflectConnectives.b2</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b3">ReflectConnectives.b3</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b4">ReflectConnectives.b4</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives.b5">ReflectConnectives.b5</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.b">ReflectCore.b</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.c">ReflectCore.c</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.Hb">ReflectCore.Hb</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.P">ReflectCore.P</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore.Q">ReflectCore.Q</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.b">ReflectNegCore.b</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.c">ReflectNegCore.c</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.Hb">ReflectNegCore.Hb</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.P">ReflectNegCore.P</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore.Q">ReflectNegCore.Q</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.b">Reflect.b</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.b'">Reflect.b'</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.c">Reflect.c</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.P">Reflect.P</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.Pb">Reflect.Pb</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.Pb'">Reflect.Pb'</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Reflect.Q">Reflect.Q</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.all_jobs_from_taskset">ResponseTimeAnalysisEDF.ResponseTimeBound.all_jobs_from_taskset</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.higher_eq_priority">ResponseTimeAnalysisEDF.ResponseTimeBound.higher_eq_priority</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_ts_is_a_set">ResponseTimeAnalysisEDF.ResponseTimeBound.H_ts_is_a_set</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_global_scheduling_invariant">ResponseTimeAnalysisEDF.ResponseTimeBound.H_global_scheduling_invariant</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_tasks_miss_no_deadlines">ResponseTimeAnalysisEDF.ResponseTimeBound.H_tasks_miss_no_deadlines</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_response_time_is_fixed_point">ResponseTimeAnalysisEDF.ResponseTimeBound.H_response_time_is_fixed_point</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_rt_bounds_contains_all_tasks">ResponseTimeAnalysisEDF.ResponseTimeBound.H_rt_bounds_contains_all_tasks</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_restricted_deadlines">ResponseTimeAnalysisEDF.ResponseTimeBound.H_restricted_deadlines</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_task_parameters">ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_task_parameters</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_intra_task_parallelism">ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_intra_task_parallelism</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_at_least_one_cpu">ResponseTimeAnalysisEDF.ResponseTimeBound.H_at_least_one_cpu</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_parallelism">ResponseTimeAnalysisEDF.ResponseTimeBound.H_no_parallelism</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_completed_jobs_dont_execute">ResponseTimeAnalysisEDF.ResponseTimeBound.H_completed_jobs_dont_execute</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_jobs_must_arrive_to_execute">ResponseTimeAnalysisEDF.ResponseTimeBound.H_jobs_must_arrive_to_execute</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_job_parameters">ResponseTimeAnalysisEDF.ResponseTimeBound.H_valid_job_parameters</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.H_sporadic_tasks">ResponseTimeAnalysisEDF.ResponseTimeBound.H_sporadic_tasks</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.I">ResponseTimeAnalysisEDF.ResponseTimeBound.I</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_task">ResponseTimeAnalysisEDF.ResponseTimeBound.job_task</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline">ResponseTimeAnalysisEDF.ResponseTimeBound.job_deadline</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost">ResponseTimeAnalysisEDF.ResponseTimeBound.job_cost</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.edf_specific_bound">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.edf_specific_bound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_all_previous_jobs_completed_on_time">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_all_previous_jobs_completed_on_time</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_j_not_completed">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_j_not_completed</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_job_of_tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_job_of_tsk</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_tsk_R_in_rt_bounds">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.H_tsk_R_in_rt_bounds</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.interference_bound">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.interference_bound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.j</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.R</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.tsk</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.ts_interf</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.workload_bound">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.workload_bound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.X</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.x</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.H_tsk_R_in_rt_bounds">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.H_tsk_R_in_rt_bounds</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.R</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof.tsk</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisEDF.ResponseTimeBound.no_deadline_is_missed_by_tsk</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus">ResponseTimeAnalysisEDF.ResponseTimeBound.num_cpus</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.response_time_bounded_by">ResponseTimeAnalysisEDF.ResponseTimeBound.response_time_bounded_by</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds">ResponseTimeAnalysisEDF.ResponseTimeBound.rt_bounds</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.sched">ResponseTimeAnalysisEDF.ResponseTimeBound.sched</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_with_response_time">ResponseTimeAnalysisEDF.ResponseTimeBound.task_with_response_time</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline">ResponseTimeAnalysisEDF.ResponseTimeBound.task_deadline</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_period">ResponseTimeAnalysisEDF.ResponseTimeBound.task_period</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost">ResponseTimeAnalysisEDF.ResponseTimeBound.task_cost</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.ts">ResponseTimeAnalysisEDF.ResponseTimeBound.ts</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks.interferes_with_tsk">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks.interferes_with_tsk</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.delta">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.delta</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.basic_interference_bound">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.basic_interference_bound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.edf_specific_bound">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.edf_specific_bound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.R_other">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.R_other</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_other">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_other</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask.tsk_R</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.R_prev">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.R_prev</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_with_response_time</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_deadline">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_deadline</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_period</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.task_cost</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.tsk</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.higher_eq_priority">ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.higher_eq_priority</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.interferes_with_tsk">ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks.interferes_with_tsk</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.delta">ResponseTimeAnalysisFP.InterferenceBoundFP.delta</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.R_other">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.R_other</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_other">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_other</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask.tsk_R</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.R_prev">ResponseTimeAnalysisFP.InterferenceBoundFP.R_prev</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time">ResponseTimeAnalysisFP.InterferenceBoundFP.task_with_response_time</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_deadline">ResponseTimeAnalysisFP.InterferenceBoundFP.task_deadline</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_period">ResponseTimeAnalysisFP.InterferenceBoundFP.task_period</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost">ResponseTimeAnalysisFP.InterferenceBoundFP.task_cost</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.tsk">ResponseTimeAnalysisFP.InterferenceBoundFP.tsk</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority">ResponseTimeAnalysisFP.ResponseTimeBound.higher_eq_priority</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds">ResponseTimeAnalysisFP.ResponseTimeBound.hp_bounds</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_no_larger_than_deadline">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_no_larger_than_deadline</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_recurrence_holds">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_recurrence_holds</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_global_scheduling_invariant">ResponseTimeAnalysisFP.ResponseTimeBound.H_global_scheduling_invariant</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines">ResponseTimeAnalysisFP.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_bounds_ge_cost">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_bounds_ge_cost</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known">ResponseTimeAnalysisFP.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_hp_bounds_has_interfering_tasks">ResponseTimeAnalysisFP.ResponseTimeBound.H_hp_bounds_has_interfering_tasks</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_restricted_deadlines">ResponseTimeAnalysisFP.ResponseTimeBound.H_restricted_deadlines</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_task_parameters">ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_task_parameters</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_at_least_one_cpu">ResponseTimeAnalysisFP.ResponseTimeBound.H_at_least_one_cpu</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_no_parallelism">ResponseTimeAnalysisFP.ResponseTimeBound.H_no_parallelism</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_completed_jobs_dont_execute">ResponseTimeAnalysisFP.ResponseTimeBound.H_completed_jobs_dont_execute</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_jobs_must_arrive_to_execute">ResponseTimeAnalysisFP.ResponseTimeBound.H_jobs_must_arrive_to_execute</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_job_parameters">ResponseTimeAnalysisFP.ResponseTimeBound.H_valid_job_parameters</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.H_sporadic_tasks">ResponseTimeAnalysisFP.ResponseTimeBound.H_sporadic_tasks</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk">ResponseTimeAnalysisFP.ResponseTimeBound.interferes_with_tsk</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.is_response_time_bound">ResponseTimeAnalysisFP.ResponseTimeBound.is_response_time_bound</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_task">ResponseTimeAnalysisFP.ResponseTimeBound.job_task</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline">ResponseTimeAnalysisFP.ResponseTimeBound.job_deadline</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.job_cost">ResponseTimeAnalysisFP.ResponseTimeBound.job_cost</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction.cardGE</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_j_not_completed">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_j_not_completed</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_job_of_tsk">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.H_job_of_tsk</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.j</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.H_response_time_of_tsk_other</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.R_other</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks.tsk_other</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.ts_interf</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.workload_bound</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.X</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.x</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisFP.ResponseTimeBound.no_deadline_is_missed_by_tsk</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus">ResponseTimeAnalysisFP.ResponseTimeBound.num_cpus</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.R">ResponseTimeAnalysisFP.ResponseTimeBound.R</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.sched">ResponseTimeAnalysisFP.ResponseTimeBound.sched</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_with_response_time">ResponseTimeAnalysisFP.ResponseTimeBound.task_with_response_time</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_in_ts">ResponseTimeAnalysisFP.ResponseTimeBound.task_in_ts</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline">ResponseTimeAnalysisFP.ResponseTimeBound.task_deadline</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_period">ResponseTimeAnalysisFP.ResponseTimeBound.task_period</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.task_cost">ResponseTimeAnalysisFP.ResponseTimeBound.task_cost</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.ts">ResponseTimeAnalysisFP.ResponseTimeBound.ts</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.tsk">ResponseTimeAnalysisFP.ResponseTimeBound.tsk</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.delta">ResponseTimeAnalysisGuan.InterferenceBoundGuan.delta</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.higher_eq_priority">ResponseTimeAnalysisGuan.InterferenceBoundGuan.higher_eq_priority</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.R_other">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.R_other</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_other">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_other</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_R">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry.tsk_R</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.num_cpus">ResponseTimeAnalysisGuan.InterferenceBoundGuan.num_cpus</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.R_prev">ResponseTimeAnalysisGuan.InterferenceBoundGuan.R_prev</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.all_combinations">ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.all_combinations</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.interfering_tasks">ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition.interfering_tasks</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_with_response_time">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_with_response_time</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_deadline">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_deadline</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_period">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_period</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_cost">ResponseTimeAnalysisGuan.InterferenceBoundGuan.task_cost</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.tsk">ResponseTimeAnalysisGuan.InterferenceBoundGuan.tsk</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.higher_eq_priority">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.higher_eq_priority</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.hp_bounds">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.hp_bounds</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_no_larger_than_deadline">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_no_larger_than_deadline</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_recurrence_holds">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_recurrence_holds</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_global_scheduling_invariant">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_global_scheduling_invariant</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_interfering_tasks_miss_no_deadlines">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_interfering_tasks_miss_no_deadlines</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_bounds_ge_cost">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_bounds_ge_cost</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_of_interfering_tasks_is_known">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_response_time_of_interfering_tasks_is_known</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_hp_bounds_has_interfering_tasks">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_hp_bounds_has_interfering_tasks</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_restricted_deadlines">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_restricted_deadlines</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_task_parameters">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_task_parameters</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_at_least_one_cpu">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_at_least_one_cpu</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_no_parallelism">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_no_parallelism</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_completed_jobs_dont_execute">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_completed_jobs_dont_execute</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_jobs_execute_after_jitter">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_jobs_execute_after_jitter</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_job_parameters">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_valid_job_parameters</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_sporadic_tasks">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.H_sporadic_tasks</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.I">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.I</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.interferes_with_tsk">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.interferes_with_tsk</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.is_response_time_bound">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.is_response_time_bound</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_task">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_task</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_deadline">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_deadline</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_cost">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.job_cost</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.no_deadline_is_missed_by_tsk</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.num_cpus">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.num_cpus</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.R">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.R</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.sched">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.sched</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_with_response_time">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_with_response_time</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_in_ts">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_in_ts</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_deadline">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_deadline</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_period">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_period</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_cost">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.task_cost</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.ts">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.ts</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.tsk">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan.tsk</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.delta">ResponseTimeAnalysisJitter.InterferenceBoundJitter.delta</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP.higher_eq_priority">ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP.higher_eq_priority</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP.is_interfering_task_jlfp">ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP.is_interfering_task_jlfp</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.R_other">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.R_other</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_other">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_other</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_R">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask.tsk_R</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.R_prev">ResponseTimeAnalysisJitter.InterferenceBoundJitter.R_prev</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_with_response_time">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_with_response_time</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_jitter">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_deadline">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_deadline</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_period">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_period</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_cost">ResponseTimeAnalysisJitter.InterferenceBoundJitter.task_cost</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.tsk">ResponseTimeAnalysisJitter.InterferenceBoundJitter.tsk</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.higher_eq_priority">ResponseTimeAnalysisJitter.ResponseTimeBound.higher_eq_priority</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.hp_bounds">ResponseTimeAnalysisJitter.ResponseTimeBound.hp_bounds</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_no_larger_than_deadline">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_no_larger_than_deadline</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_recurrence_holds">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_recurrence_holds</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_global_scheduling_invariant">ResponseTimeAnalysisJitter.ResponseTimeBound.H_global_scheduling_invariant</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines">ResponseTimeAnalysisJitter.ResponseTimeBound.H_interfering_tasks_miss_no_deadlines</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_bounds_ge_cost">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_bounds_ge_cost</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known">ResponseTimeAnalysisJitter.ResponseTimeBound.H_response_time_of_interfering_tasks_is_known</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_hp_bounds_has_interfering_tasks">ResponseTimeAnalysisJitter.ResponseTimeBound.H_hp_bounds_has_interfering_tasks</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_restricted_deadlines">ResponseTimeAnalysisJitter.ResponseTimeBound.H_restricted_deadlines</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_task_parameters">ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_task_parameters</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_at_least_one_cpu">ResponseTimeAnalysisJitter.ResponseTimeBound.H_at_least_one_cpu</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_no_parallelism">ResponseTimeAnalysisJitter.ResponseTimeBound.H_no_parallelism</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_completed_jobs_dont_execute">ResponseTimeAnalysisJitter.ResponseTimeBound.H_completed_jobs_dont_execute</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_jobs_execute_after_jitter">ResponseTimeAnalysisJitter.ResponseTimeBound.H_jobs_execute_after_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_job_parameters">ResponseTimeAnalysisJitter.ResponseTimeBound.H_valid_job_parameters</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.H_sporadic_tasks">ResponseTimeAnalysisJitter.ResponseTimeBound.H_sporadic_tasks</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.I">ResponseTimeAnalysisJitter.ResponseTimeBound.I</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.interferes_with_tsk">ResponseTimeAnalysisJitter.ResponseTimeBound.interferes_with_tsk</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.is_response_time_bound">ResponseTimeAnalysisJitter.ResponseTimeBound.is_response_time_bound</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_jitter">ResponseTimeAnalysisJitter.ResponseTimeBound.job_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_task">ResponseTimeAnalysisJitter.ResponseTimeBound.job_task</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_deadline">ResponseTimeAnalysisJitter.ResponseTimeBound.job_deadline</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.job_cost">ResponseTimeAnalysisJitter.ResponseTimeBound.job_cost</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.no_deadline_is_missed_by_tsk">ResponseTimeAnalysisJitter.ResponseTimeBound.no_deadline_is_missed_by_tsk</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.num_cpus">ResponseTimeAnalysisJitter.ResponseTimeBound.num_cpus</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.R">ResponseTimeAnalysisJitter.ResponseTimeBound.R</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.R'">ResponseTimeAnalysisJitter.ResponseTimeBound.R'</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.sched">ResponseTimeAnalysisJitter.ResponseTimeBound.sched</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_with_response_time">ResponseTimeAnalysisJitter.ResponseTimeBound.task_with_response_time</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_in_ts">ResponseTimeAnalysisJitter.ResponseTimeBound.task_in_ts</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_jitter">ResponseTimeAnalysisJitter.ResponseTimeBound.task_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_deadline">ResponseTimeAnalysisJitter.ResponseTimeBound.task_deadline</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_period">ResponseTimeAnalysisJitter.ResponseTimeBound.task_period</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.task_cost">ResponseTimeAnalysisJitter.ResponseTimeBound.task_cost</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.ts">ResponseTimeAnalysisJitter.ResponseTimeBound.ts</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound.tsk">ResponseTimeAnalysisJitter.ResponseTimeBound.tsk</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.all_le">ResponseTimeIterationEDF.Analysis.Convergence.all_le</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_keeps_diverging">ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_keeps_diverging</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_at_least_one_task">ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction.H_at_least_one_task</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.f">ResponseTimeIterationEDF.Analysis.Convergence.f</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.H_valid_task_parameters">ResponseTimeIterationEDF.Analysis.Convergence.H_valid_task_parameters</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.one_lt">ResponseTimeIterationEDF.Analysis.Convergence.one_lt</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.ts">ResponseTimeIterationEDF.Analysis.Convergence.ts</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.I">ResponseTimeIterationEDF.Analysis.I</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.initial_state">ResponseTimeIterationEDF.Analysis.initial_state</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_task">ResponseTimeIterationEDF.Analysis.job_task</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_deadline">ResponseTimeIterationEDF.Analysis.job_deadline</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.job_cost">ResponseTimeIterationEDF.Analysis.job_cost</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.higher_eq_priority">ResponseTimeIterationEDF.Analysis.MainProof.higher_eq_priority</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_test_succeeds">ResponseTimeIterationEDF.Analysis.MainProof.H_test_succeeds</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_global_scheduling_invariant">ResponseTimeIterationEDF.Analysis.MainProof.H_global_scheduling_invariant</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_no_intra_task_parallelism">ResponseTimeIterationEDF.Analysis.MainProof.H_no_intra_task_parallelism</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_no_parallelism">ResponseTimeIterationEDF.Analysis.MainProof.H_no_parallelism</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_completed_jobs_dont_execute">ResponseTimeIterationEDF.Analysis.MainProof.H_completed_jobs_dont_execute</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_jobs_must_arrive_to_execute">ResponseTimeIterationEDF.Analysis.MainProof.H_jobs_must_arrive_to_execute</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_at_least_one_cpu">ResponseTimeIterationEDF.Analysis.MainProof.H_at_least_one_cpu</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_sporadic_tasks">ResponseTimeIterationEDF.Analysis.MainProof.H_sporadic_tasks</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_valid_job_parameters">ResponseTimeIterationEDF.Analysis.MainProof.H_valid_job_parameters</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_all_jobs_from_taskset">ResponseTimeIterationEDF.Analysis.MainProof.H_all_jobs_from_taskset</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_restricted_deadlines">ResponseTimeIterationEDF.Analysis.MainProof.H_restricted_deadlines</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_valid_task_parameters">ResponseTimeIterationEDF.Analysis.MainProof.H_valid_task_parameters</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.H_ts_is_a_set">ResponseTimeIterationEDF.Analysis.MainProof.H_ts_is_a_set</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.sched">ResponseTimeIterationEDF.Analysis.MainProof.sched</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof.ts">ResponseTimeIterationEDF.Analysis.MainProof.ts</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.max_steps">ResponseTimeIterationEDF.Analysis.max_steps</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.delta'</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_cost_le_rt_bound">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_cost_le_rt_bound</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_response_time_monotonic">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_response_time_monotonic</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_delta_monotonic">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_delta_monotonic</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_period_positive">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.H_period_positive</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.R'</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound.tsk_other</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.num_cpus">ResponseTimeIterationEDF.Analysis.num_cpus</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_with_response_time">ResponseTimeIterationEDF.Analysis.task_with_response_time</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_deadline">ResponseTimeIterationEDF.Analysis.task_deadline</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_period">ResponseTimeIterationEDF.Analysis.task_period</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.task_cost">ResponseTimeIterationEDF.Analysis.task_cost</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.higher_eq_priority">ResponseTimeIterationFPGuan.Analysis.higher_eq_priority</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.I">ResponseTimeIterationFPGuan.Analysis.I</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.job_task">ResponseTimeIterationFPGuan.Analysis.job_task</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.job_deadline">ResponseTimeIterationFPGuan.Analysis.job_deadline</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.job_cost">ResponseTimeIterationFPGuan.Analysis.job_cost</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.max_steps">ResponseTimeIterationFPGuan.Analysis.max_steps</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.num_cpus">ResponseTimeIterationFPGuan.Analysis.num_cpus</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_test_succeeds">ResponseTimeIterationFPGuan.Analysis.Proof.H_test_succeeds</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_global_scheduling_invariant">ResponseTimeIterationFPGuan.Analysis.Proof.H_global_scheduling_invariant</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_no_parallelism">ResponseTimeIterationFPGuan.Analysis.Proof.H_no_parallelism</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_completed_jobs_dont_execute">ResponseTimeIterationFPGuan.Analysis.Proof.H_completed_jobs_dont_execute</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_jobs_execute_after_jitter">ResponseTimeIterationFPGuan.Analysis.Proof.H_jobs_execute_after_jitter</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_at_least_one_cpu">ResponseTimeIterationFPGuan.Analysis.Proof.H_at_least_one_cpu</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_sporadic_tasks">ResponseTimeIterationFPGuan.Analysis.Proof.H_sporadic_tasks</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_job_parameters">ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_job_parameters</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_all_jobs_from_taskset">ResponseTimeIterationFPGuan.Analysis.Proof.H_all_jobs_from_taskset</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_sorted_ts">ResponseTimeIterationFPGuan.Analysis.Proof.H_sorted_ts</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_restricted_deadlines">ResponseTimeIterationFPGuan.Analysis.Proof.H_restricted_deadlines</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_task_parameters">ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_task_parameters</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_ts_is_a_set">ResponseTimeIterationFPGuan.Analysis.Proof.H_ts_is_a_set</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_unique_priorities">ResponseTimeIterationFPGuan.Analysis.Proof.H_unique_priorities</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_policy">ResponseTimeIterationFPGuan.Analysis.Proof.H_valid_policy</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.sched">ResponseTimeIterationFPGuan.Analysis.Proof.sched</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.ts">ResponseTimeIterationFPGuan.Analysis.Proof.ts</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_with_response_time">ResponseTimeIterationFPGuan.Analysis.task_with_response_time</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_deadline">ResponseTimeIterationFPGuan.Analysis.task_deadline</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_period">ResponseTimeIterationFPGuan.Analysis.task_period</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.task_cost">ResponseTimeIterationFPGuan.Analysis.task_cost</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.higher_eq_priority">ResponseTimeIterationFPWithJitter.Analysis.higher_eq_priority</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.I">ResponseTimeIterationFPWithJitter.Analysis.I</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_jitter">ResponseTimeIterationFPWithJitter.Analysis.job_jitter</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_task">ResponseTimeIterationFPWithJitter.Analysis.job_task</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_deadline">ResponseTimeIterationFPWithJitter.Analysis.job_deadline</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.job_cost">ResponseTimeIterationFPWithJitter.Analysis.job_cost</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.max_steps">ResponseTimeIterationFPWithJitter.Analysis.max_steps</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.num_cpus">ResponseTimeIterationFPWithJitter.Analysis.num_cpus</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_test_succeeds">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_test_succeeds</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_global_scheduling_invariant">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_global_scheduling_invariant</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_no_parallelism">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_no_parallelism</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_completed_jobs_dont_execute">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_completed_jobs_dont_execute</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_jobs_execute_after_jitter">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_jobs_execute_after_jitter</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_at_least_one_cpu">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_at_least_one_cpu</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sporadic_tasks">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sporadic_tasks</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_job_parameters">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_job_parameters</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_all_jobs_from_taskset">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_all_jobs_from_taskset</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sorted_ts">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_sorted_ts</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_restricted_deadlines">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_restricted_deadlines</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_task_parameters">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_task_parameters</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_ts_is_a_set">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_ts_is_a_set</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_unique_priorities">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_unique_priorities</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_policy">ResponseTimeIterationFPWithJitter.Analysis.Proof.H_valid_policy</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.sched">ResponseTimeIterationFPWithJitter.Analysis.Proof.sched</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.ts">ResponseTimeIterationFPWithJitter.Analysis.Proof.ts</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_with_response_time">ResponseTimeIterationFPWithJitter.Analysis.task_with_response_time</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_jitter">ResponseTimeIterationFPWithJitter.Analysis.task_jitter</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_deadline">ResponseTimeIterationFPWithJitter.Analysis.task_deadline</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_period">ResponseTimeIterationFPWithJitter.Analysis.task_period</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.task_cost">ResponseTimeIterationFPWithJitter.Analysis.task_cost</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction.H_keeps_diverging">ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction.H_keeps_diverging</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.f">ResponseTimeIterationFP.Analysis.Convergence.f</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.H_no_larger_than_deadline">ResponseTimeIterationFP.Analysis.Convergence.H_no_larger_than_deadline</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.H_valid_task_parameters">ResponseTimeIterationFP.Analysis.Convergence.H_valid_task_parameters</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.H_test_succeeds">ResponseTimeIterationFP.Analysis.Convergence.H_test_succeeds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.rt_bounds">ResponseTimeIterationFP.Analysis.Convergence.rt_bounds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.tsk">ResponseTimeIterationFP.Analysis.Convergence.tsk</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.ts_hp">ResponseTimeIterationFP.Analysis.Convergence.ts_hp</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.higher_priority">ResponseTimeIterationFP.Analysis.higher_priority</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds">ResponseTimeIterationFP.Analysis.HighPriorityTasks.hp_bounds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_analysis_succeeds">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_analysis_succeeds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_priority_transitive">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_priority_transitive</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_sorted">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_sorted</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_a_set">ResponseTimeIterationFP.Analysis.HighPriorityTasks.H_task_set_is_a_set</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.R">ResponseTimeIterationFP.Analysis.HighPriorityTasks.R</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk">ResponseTimeIterationFP.Analysis.HighPriorityTasks.tsk</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp">ResponseTimeIterationFP.Analysis.HighPriorityTasks.ts_hp</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_task">ResponseTimeIterationFP.Analysis.job_task</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_deadline">ResponseTimeIterationFP.Analysis.job_deadline</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.job_cost">ResponseTimeIterationFP.Analysis.job_cost</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_test_succeeds">ResponseTimeIterationFP.Analysis.MainProof.H_test_succeeds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_global_scheduling_invariant">ResponseTimeIterationFP.Analysis.MainProof.H_global_scheduling_invariant</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_no_parallelism">ResponseTimeIterationFP.Analysis.MainProof.H_no_parallelism</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_completed_jobs_dont_execute">ResponseTimeIterationFP.Analysis.MainProof.H_completed_jobs_dont_execute</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_jobs_must_arrive_to_execute">ResponseTimeIterationFP.Analysis.MainProof.H_jobs_must_arrive_to_execute</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_at_least_one_cpu">ResponseTimeIterationFP.Analysis.MainProof.H_at_least_one_cpu</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_sporadic_tasks">ResponseTimeIterationFP.Analysis.MainProof.H_sporadic_tasks</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_valid_job_parameters">ResponseTimeIterationFP.Analysis.MainProof.H_valid_job_parameters</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_all_jobs_from_taskset">ResponseTimeIterationFP.Analysis.MainProof.H_all_jobs_from_taskset</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_sorted_ts">ResponseTimeIterationFP.Analysis.MainProof.H_sorted_ts</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_restricted_deadlines">ResponseTimeIterationFP.Analysis.MainProof.H_restricted_deadlines</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_valid_task_parameters">ResponseTimeIterationFP.Analysis.MainProof.H_valid_task_parameters</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_ts_is_a_set">ResponseTimeIterationFP.Analysis.MainProof.H_ts_is_a_set</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_total">ResponseTimeIterationFP.Analysis.MainProof.H_total</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_unique_priorities">ResponseTimeIterationFP.Analysis.MainProof.H_unique_priorities</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.H_transitive">ResponseTimeIterationFP.Analysis.MainProof.H_transitive</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_job">ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_job</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_task">ResponseTimeIterationFP.Analysis.MainProof.no_deadline_missed_by_task</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.response_time_bounded_by">ResponseTimeIterationFP.Analysis.MainProof.response_time_bounded_by</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.sched">ResponseTimeIterationFP.Analysis.MainProof.sched</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof.ts">ResponseTimeIterationFP.Analysis.MainProof.ts</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.num_cpus">ResponseTimeIterationFP.Analysis.num_cpus</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_with_response_time">ResponseTimeIterationFP.Analysis.task_with_response_time</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_deadline">ResponseTimeIterationFP.Analysis.task_deadline</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_period">ResponseTimeIterationFP.Analysis.task_period</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.task_cost">ResponseTimeIterationFP.Analysis.task_cost</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.H_job_of_task">ResponseTime.BasicLemmas.AllJobs.H_job_of_task</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j">ResponseTime.BasicLemmas.AllJobs.j</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.R">ResponseTime.BasicLemmas.AllJobs.R</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.response_time_bound">ResponseTime.BasicLemmas.AllJobs.response_time_bound</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs.tsk">ResponseTime.BasicLemmas.AllJobs.tsk</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.H_completed_jobs_dont_execute">ResponseTime.BasicLemmas.H_completed_jobs_dont_execute</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.job_has_completed_by">ResponseTime.BasicLemmas.job_has_completed_by</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.job_task">ResponseTime.BasicLemmas.job_task</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.job_cost">ResponseTime.BasicLemmas.job_cost</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.sched">ResponseTime.BasicLemmas.sched</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j">ResponseTime.BasicLemmas.SpecificJob.j</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.R">ResponseTime.BasicLemmas.SpecificJob.R</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.response_time_bound">ResponseTime.BasicLemmas.SpecificJob.response_time_bound</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.job_has_completed_by">ResponseTime.ResponseTimeBound.job_has_completed_by</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.job_task">ResponseTime.ResponseTimeBound.job_task</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.job_cost">ResponseTime.ResponseTimeBound.job_cost</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.R">ResponseTime.ResponseTimeBound.R</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.sched">ResponseTime.ResponseTimeBound.sched</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound.tsk">ResponseTime.ResponseTimeBound.tsk</a> [in <a href="response_time.html">response_time</a>]<br/> -<br/><br/><a name="variable_S"></a><h2>S </h2> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.H_valid_job">Schedulability.BasicLemmas.AllJobs.H_valid_job</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.H_job_of_task">Schedulability.BasicLemmas.AllJobs.H_job_of_task</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j">Schedulability.BasicLemmas.AllJobs.j</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.no_deadline_misses">Schedulability.BasicLemmas.AllJobs.no_deadline_misses</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs.tsk">Schedulability.BasicLemmas.AllJobs.tsk</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.H_completed_jobs_dont_execute">Schedulability.BasicLemmas.H_completed_jobs_dont_execute</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.job_task">Schedulability.BasicLemmas.job_task</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.job_deadline">Schedulability.BasicLemmas.job_deadline</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.job_cost">Schedulability.BasicLemmas.job_cost</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.sched">Schedulability.BasicLemmas.sched</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j">Schedulability.BasicLemmas.SpecificJob.j</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.no_deadline_miss">Schedulability.BasicLemmas.SpecificJob.no_deadline_miss</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.task_deadline">Schedulability.BasicLemmas.task_deadline</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.task_period">Schedulability.BasicLemmas.task_period</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.task_cost">Schedulability.BasicLemmas.task_cost</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.job_deadline">Schedulability.SchedulableDefs.job_deadline</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.job_cost">Schedulability.SchedulableDefs.job_cost</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.j">Schedulability.SchedulableDefs.ScheduleOfJobs.j</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.sched">Schedulability.SchedulableDefs.ScheduleOfJobs.sched</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.job_task">Schedulability.SchedulableDefs.ScheduleOfTasks.job_task</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.sched">Schedulability.SchedulableDefs.ScheduleOfTasks.sched</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.tsk">Schedulability.SchedulableDefs.ScheduleOfTasks.tsk</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.H_job_of_task">ScheduleOfSporadicTask.BasicLemmas.H_job_of_task</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.j">ScheduleOfSporadicTask.BasicLemmas.j</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.jobs_dont_execute_after_completion">ScheduleOfSporadicTask.BasicLemmas.jobs_dont_execute_after_completion</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_task">ScheduleOfSporadicTask.BasicLemmas.job_task</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_deadline">ScheduleOfSporadicTask.BasicLemmas.job_deadline</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_cost">ScheduleOfSporadicTask.BasicLemmas.job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sched">ScheduleOfSporadicTask.BasicLemmas.sched</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_deadline">ScheduleOfSporadicTask.BasicLemmas.task_deadline</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_cost">ScheduleOfSporadicTask.BasicLemmas.task_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.tsk">ScheduleOfSporadicTask.BasicLemmas.tsk</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.valid_job">ScheduleOfSporadicTask.BasicLemmas.valid_job</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.job_task">ScheduleOfSporadicTask.ValidSchedule.job_task</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.job_cost">ScheduleOfSporadicTask.ValidSchedule.job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.sched">ScheduleOfSporadicTask.ValidSchedule.sched</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_jitter">ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_jitter</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_task">ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_task</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_cost">ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched">ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduleDef.arr_seq">Schedule.ScheduleDef.arr_seq</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduleDef.num_cpus">Schedule.ScheduleDef.num_cpus</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs.j">Schedule.ScheduledJobs.j</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs.job_cost">Schedule.ScheduledJobs.job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs.sched">Schedule.ScheduledJobs.sched</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Arrival.H_jobs_must_arrive">Schedule.ServiceLemmas.Arrival.H_jobs_must_arrive</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Completion.H_completed_jobs">Schedule.ServiceLemmas.Completion.H_completed_jobs</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.j">Schedule.ServiceLemmas.j</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.job_cost">Schedule.ServiceLemmas.job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.NoParallelism.no_parallelism">Schedule.ServiceLemmas.NoParallelism.no_parallelism</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.sched">Schedule.ServiceLemmas.sched</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ValidSchedules.job_cost">Schedule.ValidSchedules.job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ValidSchedules.sched">Schedule.ValidSchedules.sched</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels.arr_seq">SporadicTaskArrival.ArrivalModels.arr_seq</a> [in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels.job_task">SporadicTaskArrival.ArrivalModels.job_task</a> [in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels.task_period">SporadicTaskArrival.ArrivalModels.task_period</a> [in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.is_valid_task">SporadicTaskset.TasksetDefs.TasksetProperties.is_valid_task</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline">SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_period">SporadicTaskset.TasksetDefs.TasksetProperties.task_period</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_cost">SporadicTaskset.TasksetDefs.TasksetProperties.task_cost</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.ts">SporadicTaskset.TasksetDefs.TasksetProperties.ts</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.task_deadline">SporadicTask.BasicTask.task_deadline</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.task_period">SporadicTask.BasicTask.task_period</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.task_cost">SporadicTask.BasicTask.task_cost</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.ValidParameters.tsk">SporadicTask.BasicTask.ValidParameters.tsk</a> [in <a href="task.html">task</a>]<br/> -<br/><br/><a name="variable_T"></a><h2>T </h2> -<a href="util_lemmas.html#Triple.p">Triple.p</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="variable_W"></a><h2>W </h2> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.period_positive">WorkloadBoundGuan.BasicLemmasCarry.period_positive</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.R">WorkloadBoundGuan.BasicLemmasCarry.R</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.task_period">WorkloadBoundGuan.BasicLemmasCarry.task_period</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.task_cost">WorkloadBoundGuan.BasicLemmasCarry.task_cost</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.tsk">WorkloadBoundGuan.BasicLemmasCarry.tsk</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.workload_bound_CI">WorkloadBoundGuan.BasicLemmasCarry.workload_bound_CI</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry.workload_bound_NC">WorkloadBoundGuan.BasicLemmasCarry.workload_bound_NC</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.arr_seq">WorkloadBoundGuan.ProofWorkloadBound.arr_seq</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.delta">WorkloadBoundGuan.ProofWorkloadBound.delta</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_response_time_bound">WorkloadBoundGuan.ProofWorkloadBound.H_response_time_bound</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_response_time_ge_cost">WorkloadBoundGuan.ProofWorkloadBound.H_response_time_ge_cost</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_no_deadline_misses_during_interval">WorkloadBoundGuan.ProofWorkloadBound.H_no_deadline_misses_during_interval</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_restricted_deadline">WorkloadBoundGuan.ProofWorkloadBound.H_restricted_deadline</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_valid_task_parameters">WorkloadBoundGuan.ProofWorkloadBound.H_valid_task_parameters</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_sporadic_tasks">WorkloadBoundGuan.ProofWorkloadBound.H_sporadic_tasks</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_no_parallelism">WorkloadBoundGuan.ProofWorkloadBound.H_no_parallelism</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_completed_jobs_dont_execute">WorkloadBoundGuan.ProofWorkloadBound.H_completed_jobs_dont_execute</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_jobs_must_arrive_to_execute">WorkloadBoundGuan.ProofWorkloadBound.H_jobs_must_arrive_to_execute</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.H_jobs_have_valid_parameters">WorkloadBoundGuan.ProofWorkloadBound.H_jobs_have_valid_parameters</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_has_completed_by">WorkloadBoundGuan.ProofWorkloadBound.job_has_completed_by</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_deadline">WorkloadBoundGuan.ProofWorkloadBound.job_deadline</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_task">WorkloadBoundGuan.ProofWorkloadBound.job_task</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.job_cost">WorkloadBoundGuan.ProofWorkloadBound.job_cost</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.no_deadline_misses_by">WorkloadBoundGuan.ProofWorkloadBound.no_deadline_misses_by</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.num_cpus">WorkloadBoundGuan.ProofWorkloadBound.num_cpus</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.R_tsk">WorkloadBoundGuan.ProofWorkloadBound.R_tsk</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.sched">WorkloadBoundGuan.ProofWorkloadBound.sched</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.schedule_of_platform">WorkloadBoundGuan.ProofWorkloadBound.schedule_of_platform</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.sched_of_platform">WorkloadBoundGuan.ProofWorkloadBound.sched_of_platform</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.task_deadline">WorkloadBoundGuan.ProofWorkloadBound.task_deadline</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.task_period">WorkloadBoundGuan.ProofWorkloadBound.task_period</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.task_cost">WorkloadBoundGuan.ProofWorkloadBound.task_cost</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.tsk">WorkloadBoundGuan.ProofWorkloadBound.tsk</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.t1">WorkloadBoundGuan.ProofWorkloadBound.t1</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound.workload_of">WorkloadBoundGuan.ProofWorkloadBound.workload_of</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.delta">WorkloadBoundGuan.WorkloadBoundCarry.delta</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.e">WorkloadBoundGuan.WorkloadBoundCarry.e</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.p">WorkloadBoundGuan.WorkloadBoundCarry.p</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.R_tsk">WorkloadBoundGuan.WorkloadBoundCarry.R_tsk</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.task_period">WorkloadBoundGuan.WorkloadBoundCarry.task_period</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.task_cost">WorkloadBoundGuan.WorkloadBoundCarry.task_cost</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry.tsk">WorkloadBoundGuan.WorkloadBoundCarry.tsk</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.H_R1_le_R2">WorkloadBound.BasicLemmas.H_R1_le_R2</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.H_R_lower_bound">WorkloadBound.BasicLemmas.H_R_lower_bound</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.H_period_positive">WorkloadBound.BasicLemmas.H_period_positive</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.R1">WorkloadBound.BasicLemmas.R1</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.R2">WorkloadBound.BasicLemmas.R2</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.task_period">WorkloadBound.BasicLemmas.task_period</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.task_cost">WorkloadBound.BasicLemmas.task_cost</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.tsk">WorkloadBound.BasicLemmas.tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas.workload_bound">WorkloadBound.BasicLemmas.workload_bound</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq">WorkloadBound.ProofWorkloadBound.arr_seq</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.delta">WorkloadBound.ProofWorkloadBound.delta</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_response_time_bound">WorkloadBound.ProofWorkloadBound.H_response_time_bound</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_response_time_ge_cost">WorkloadBound.ProofWorkloadBound.H_response_time_ge_cost</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_no_deadline_misses_during_interval">WorkloadBound.ProofWorkloadBound.H_no_deadline_misses_during_interval</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_restricted_deadline">WorkloadBound.ProofWorkloadBound.H_restricted_deadline</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_valid_task_parameters">WorkloadBound.ProofWorkloadBound.H_valid_task_parameters</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_sporadic_tasks">WorkloadBound.ProofWorkloadBound.H_sporadic_tasks</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_no_parallelism">WorkloadBound.ProofWorkloadBound.H_no_parallelism</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_completed_jobs_dont_execute">WorkloadBound.ProofWorkloadBound.H_completed_jobs_dont_execute</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_jobs_must_arrive_to_execute">WorkloadBound.ProofWorkloadBound.H_jobs_must_arrive_to_execute</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.H_jobs_have_valid_parameters">WorkloadBound.ProofWorkloadBound.H_jobs_have_valid_parameters</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_has_completed_by">WorkloadBound.ProofWorkloadBound.job_has_completed_by</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_deadline">WorkloadBound.ProofWorkloadBound.job_deadline</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task">WorkloadBound.ProofWorkloadBound.job_task</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_cost">WorkloadBound.ProofWorkloadBound.job_cost</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs">WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.n_k">WorkloadBound.ProofWorkloadBound.MainProof.n_k</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.order">WorkloadBound.ProofWorkloadBound.MainProof.order</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs">WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2">WorkloadBound.ProofWorkloadBound.MainProof.t2</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.H_at_least_one_job">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.H_at_least_one_job</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.H_at_least_two_jobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.H_at_least_two_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound">WorkloadBound.ProofWorkloadBound.MainProof.workload_bound</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.no_deadline_misses_by">WorkloadBound.ProofWorkloadBound.no_deadline_misses_by</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk">WorkloadBound.ProofWorkloadBound.R_tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched">WorkloadBound.ProofWorkloadBound.sched</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_deadline">WorkloadBound.ProofWorkloadBound.task_deadline</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period">WorkloadBound.ProofWorkloadBound.task_period</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost">WorkloadBound.ProofWorkloadBound.task_cost</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk">WorkloadBound.ProofWorkloadBound.tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1">WorkloadBound.ProofWorkloadBound.t1</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.workload_of">WorkloadBound.ProofWorkloadBound.workload_of</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.delta">WorkloadBound.WorkloadBoundDef.delta</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.R_tsk">WorkloadBound.WorkloadBoundDef.R_tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_period">WorkloadBound.WorkloadBoundDef.task_period</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_cost">WorkloadBound.WorkloadBoundDef.task_cost</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef.tsk">WorkloadBound.WorkloadBoundDef.tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.period_positive">WorkloadWithJitter.BasicLemmas.period_positive</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.R">WorkloadWithJitter.BasicLemmas.R</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.R_lower_bound">WorkloadWithJitter.BasicLemmas.R_lower_bound</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.task_jitter">WorkloadWithJitter.BasicLemmas.task_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.task_period">WorkloadWithJitter.BasicLemmas.task_period</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.task_cost">WorkloadWithJitter.BasicLemmas.task_cost</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.tsk">WorkloadWithJitter.BasicLemmas.tsk</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas.workload_bound">WorkloadWithJitter.BasicLemmas.workload_bound</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.arr_seq">WorkloadWithJitter.ProofWorkloadBoundJitter.arr_seq</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions.tsk">WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions.tsk</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.delta">WorkloadWithJitter.ProofWorkloadBoundJitter.delta</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.H_completed_jobs_dont_execute">WorkloadWithJitter.ProofWorkloadBoundJitter.H_completed_jobs_dont_execute</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.H_jobs_must_arrive_after_jitter">WorkloadWithJitter.ProofWorkloadBoundJitter.H_jobs_must_arrive_after_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.jobs_have_valid_parameters">WorkloadWithJitter.ProofWorkloadBoundJitter.jobs_have_valid_parameters</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_jitter">WorkloadWithJitter.ProofWorkloadBoundJitter.job_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_deadline">WorkloadWithJitter.ProofWorkloadBoundJitter.job_deadline</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_task">WorkloadWithJitter.ProofWorkloadBoundJitter.job_task</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.job_cost">WorkloadWithJitter.ProofWorkloadBoundJitter.job_cost</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.no_deadline_misses_during_interval">WorkloadWithJitter.ProofWorkloadBoundJitter.no_deadline_misses_during_interval</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.no_parallelism">WorkloadWithJitter.ProofWorkloadBoundJitter.no_parallelism</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.num_cpus">WorkloadWithJitter.ProofWorkloadBoundJitter.num_cpus</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_ge_cost">WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_ge_cost</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_bound">WorkloadWithJitter.ProofWorkloadBoundJitter.response_time_bound</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.restricted_deadline">WorkloadWithJitter.ProofWorkloadBoundJitter.restricted_deadline</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.R_tsk">WorkloadWithJitter.ProofWorkloadBoundJitter.R_tsk</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.sched">WorkloadWithJitter.ProofWorkloadBoundJitter.sched</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.schedule_of_platform">WorkloadWithJitter.ProofWorkloadBoundJitter.schedule_of_platform</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.sched_of_platform">WorkloadWithJitter.ProofWorkloadBoundJitter.sched_of_platform</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.sporadic_tasks">WorkloadWithJitter.ProofWorkloadBoundJitter.sporadic_tasks</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_jitter">WorkloadWithJitter.ProofWorkloadBoundJitter.task_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_deadline">WorkloadWithJitter.ProofWorkloadBoundJitter.task_deadline</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_period">WorkloadWithJitter.ProofWorkloadBoundJitter.task_period</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.task_cost">WorkloadWithJitter.ProofWorkloadBoundJitter.task_cost</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.tsk">WorkloadWithJitter.ProofWorkloadBoundJitter.tsk</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.t1">WorkloadWithJitter.ProofWorkloadBoundJitter.t1</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.valid_task_parameters">WorkloadWithJitter.ProofWorkloadBoundJitter.valid_task_parameters</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.workload_bound">WorkloadWithJitter.ProofWorkloadBoundJitter.workload_bound</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.delta">WorkloadWithJitter.WorkloadBoundWithJitter.delta</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.job_task">WorkloadWithJitter.WorkloadBoundWithJitter.job_task</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.R_tsk">WorkloadWithJitter.WorkloadBoundWithJitter.R_tsk</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.sched">WorkloadWithJitter.WorkloadBoundWithJitter.sched</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.task_jitter">WorkloadWithJitter.WorkloadBoundWithJitter.task_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.task_period">WorkloadWithJitter.WorkloadBoundWithJitter.task_period</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.task_cost">WorkloadWithJitter.WorkloadBoundWithJitter.task_cost</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter.tsk">WorkloadWithJitter.WorkloadBoundWithJitter.tsk</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload.html#Workload.WorkloadDef.job_task">Workload.WorkloadDef.job_task</a> [in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.WorkloadDef.sched">Workload.WorkloadDef.sched</a> [in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.WorkloadDef.tsk">Workload.WorkloadDef.tsk</a> [in <a href="workload.html">workload</a>]<br/> -<br/><br/><hr/> -<h1>Library Index</h1> -<a name="library_A"></a><h2>A </h2> -<a href="arrival_sequence.html">arrival_sequence</a> <br/> -<br/><br/><a name="library_B"></a><h2>B </h2> -<a href="bertogna_edf_comp.html">bertogna_edf_comp</a> <br/> -<a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a> <br/> -<a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a> <br/> -<a href="bertogna_fp_comp.html">bertogna_fp_comp</a> <br/> -<a href="bertogna_fp_theory.html">bertogna_fp_theory</a> <br/> -<a href="bertogna_edf_theory.html">bertogna_edf_theory</a> <br/> -<br/><br/><a name="library_E"></a><h2>E </h2> -<a href="extralib.html">extralib</a> <br/> -<a href="ExtraRelations.html">ExtraRelations</a> <br/> -<br/><br/><a name="library_G"></a><h2>G </h2> -<a href="guan_fp_comp.html">guan_fp_comp</a> <br/> -<a href="guan_fp_theory.html">guan_fp_theory</a> <br/> -<br/><br/><a name="library_I"></a><h2>I </h2> -<a href="interference.html">interference</a> <br/> -<a href="interference_bound_edf.html">interference_bound_edf</a> <br/> -<br/><br/><a name="library_J"></a><h2>J </h2> -<a href="job.html">job</a> <br/> -<br/><br/><a name="library_P"></a><h2>P </h2> -<a href="platform.html">platform</a> <br/> -<a href="priority.html">priority</a> <br/> -<br/><br/><a name="library_R"></a><h2>R </h2> -<a href="response_time.html">response_time</a> <br/> -<br/><br/><a name="library_S"></a><h2>S </h2> -<a href="schedulability.html">schedulability</a> <br/> -<a href="schedule.html">schedule</a> <br/> -<a href="ssromega.html">ssromega</a> <br/> -<br/><br/><a name="library_T"></a><h2>T </h2> -<a href="task.html">task</a> <br/> -<a href="task_arrival.html">task_arrival</a> <br/> -<br/><br/><a name="library_U"></a><h2>U </h2> -<a href="util_lemmas.html">util_lemmas</a> <br/> -<a href="util_divround.html">util_divround</a> <br/> -<br/><br/><a name="library_V"></a><h2>V </h2> -<a href="Vbase.html">Vbase</a> <br/> -<br/><br/><a name="library_W"></a><h2>W </h2> -<a href="workload.html">workload</a> <br/> -<a href="workload_jitter.html">workload_jitter</a> <br/> -<a href="workload_guan.html">workload_guan</a> <br/> -<a href="workload_bound.html">workload_bound</a> <br/> -<br/><br/><hr/> -<h1>Lemma Index</h1> -<a name="lemma_A"></a><h2>A </h2> -<a href="ExtraRelations.html#acyclic_mon">acyclic_mon</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#addmovl">addmovl</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#addmovr">addmovr</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#addnb">addnb</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#andP">andP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#appP">appP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="lemma_B"></a><h2>B </h2> -<a href="util_lemmas.html#before_ij_implies_leq_ij">before_ij_implies_leq_ij</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#beq_sym">beq_sym</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#beq_refl">beq_refl</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#bigcat_ord_uniq">bigcat_ord_uniq</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#big_mkord_ord">big_mkord_ord</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_C"></a><h2>C </h2> -<a href="ExtraRelations.html#clos_trans_imm2">clos_trans_imm2</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_imm">clos_trans_imm</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_eq_union">clos_trans_restr_eq_union</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_trans_cycle">clos_trans_restr_trans_cycle</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_trans_mid">clos_trans_restr_trans_mid</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_disj_rel">clos_trans_disj_rel</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr">clos_trans_restr</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_monotonic">clos_trans_monotonic</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_inclusion_clos_refl_trans">clos_trans_inclusion_clos_refl_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_inclusion">clos_trans_inclusion</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restr_eqD">clos_trans_restr_eqD</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_restrD">clos_trans_restrD</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_of_clos_trans1">clos_trans_of_clos_trans1</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_eq">clos_trans_eq</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_of_transitive">clos_trans_of_transitive</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_in_rt">clos_trans_in_rt</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_refl_transE">clos_refl_transE</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_refl_trans_mon">clos_refl_trans_mon</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#clos_trans_mon">clos_trans_mon</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#comp_relation_trans">comp_relation_trans</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#contra">contra</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#cycle_disj">cycle_disj</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#cycle_decomp_u_1">cycle_decomp_u_1</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#cycle_decomp_u_total">cycle_decomp_u_total</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#cycle_decomp_u1">cycle_decomp_u1</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="lemma_D"></a><h2>D </h2> -<a href="Vbase.html#decPcases">decPcases</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#divSn_cases">divSn_cases</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_E"></a><h2>E </h2> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_bounds_interference">EDFSpecificBound.interference_bound_edf_bounds_interference</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_multiple_jobs">EDFSpecificBound.interference_bound_edf_holds_for_multiple_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_remainder_and_slack">EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_remainder_and_slack</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_concatenation_of_intervals">EDFSpecificBound.interference_bound_edf_simpl_by_concatenation_of_intervals</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_bounding_interference_with_interval_lengths">EDFSpecificBound.interference_bound_edf_bounding_interference_with_interval_lengths</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_of_j_fst_bounded_by_response_time">EDFSpecificBound.interference_bound_edf_interference_of_j_fst_bounded_by_response_time</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_moving_to_left_side">EDFSpecificBound.interference_bound_edf_simpl_by_moving_to_left_side</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_remainder_ge_slack">EDFSpecificBound.interference_bound_edf_remainder_ge_slack</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_n_k_equals_num_mid_jobs_plus_one">EDFSpecificBound.interference_bound_edf_n_k_equals_num_mid_jobs_plus_one</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_middle_and_last_jobs">EDFSpecificBound.interference_bound_edf_holds_for_middle_and_last_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_n_k_covers_middle_jobs_plus_one">EDFSpecificBound.interference_bound_edf_n_k_covers_middle_jobs_plus_one</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_many_periods_in_between">EDFSpecificBound.interference_bound_edf_many_periods_in_between</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_completed_on_time">EDFSpecificBound.interference_bound_edf_j_fst_completed_on_time</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_last_job_arrives_before_end_of_interval">EDFSpecificBound.interference_bound_edf_last_job_arrives_before_end_of_interval</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_before_j_lst">EDFSpecificBound.interference_bound_edf_j_fst_before_j_lst</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_lst_deadline">EDFSpecificBound.interference_bound_edf_j_lst_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_lst_is_job_of_tsk_k">EDFSpecificBound.interference_bound_edf_j_lst_is_job_of_tsk_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_a_single_job">EDFSpecificBound.interference_bound_edf_holds_for_a_single_job</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_slack">EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_slack</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_small_slack">EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_small_slack</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_big_slack">EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_big_slack</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_response_time_bound_of_j_fst_after_interval">EDFSpecificBound.interference_bound_edf_response_time_bound_of_j_fst_after_interval</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_single_job_that_completes_on_time">EDFSpecificBound.interference_bound_edf_holds_for_single_job_that_completes_on_time</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_when_there's_one_job">EDFSpecificBound.interference_bound_edf_simpl_when_there's_one_job</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval">EDFSpecificBound.interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_i_deadline">EDFSpecificBound.interference_bound_edf_j_i_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_deadline">EDFSpecificBound.interference_bound_edf_j_fst_deadline</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_j_fst_is_job_of_tsk_k">EDFSpecificBound.interference_bound_edf_j_fst_is_job_of_tsk_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_at_least_one_job">EDFSpecificBound.interference_bound_edf_at_least_one_job</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_holds_for_at_most_n_k_jobs">EDFSpecificBound.interference_bound_edf_holds_for_at_most_n_k_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_under_edf_implies_shorter_deadlines">EDFSpecificBound.interference_under_edf_implies_shorter_deadlines</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_interference_le_task_cost">EDFSpecificBound.interference_bound_edf_interference_le_task_cost</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_jobs_ordered_by_arrival">EDFSpecificBound.interference_bound_edf_jobs_ordered_by_arrival</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_all_jobs_from_tsk_k">EDFSpecificBound.interference_bound_edf_all_jobs_from_tsk_k</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_job_in_same_sequence">EDFSpecificBound.interference_bound_edf_job_in_same_sequence</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_sorting_interfering_jobs">EDFSpecificBound.interference_bound_edf_simpl_by_sorting_interfering_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_simpl_by_filtering_interfering_jobs">EDFSpecificBound.interference_bound_edf_simpl_by_filtering_interfering_jobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.interference_bound_edf_use_another_definition">EDFSpecificBound.interference_bound_edf_use_another_definition</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="Vbase.html#elimF">elimF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimFn">elimFn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimN">elimN</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimNf">elimNf</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimNTF">elimNTF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimT">elimT</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimTF">elimTF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimTFn">elimTFn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#elimTn">elimTn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eqE">eqE</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eqP">eqP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#equivPif">equivPif</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#equivPifn">equivPifn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#eq_ext_tuple_to_fun_index">eq_ext_tuple_to_fun_index</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#eq_bigr_ord">eq_bigr_ord</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#eq_fun_ord_to_nat">eq_fun_ord_to_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#exists_unzip2">exists_unzip2</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#exists_inPQ_nat">exists_inPQ_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#exists_inP_nat">exists_inP_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#extend_sum">extend_sum</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ex2E">ex2E</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_F"></a><h2>F </h2> -<a href="util_lemmas.html#forall_inP_nat">forall_inP_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_mon_iter_mon_generic">fun_mon_iter_mon_generic</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_mon_iter_mon_helper">fun_mon_iter_mon_helper</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#fun_mon_iter_mon">fun_mon_iter_mon</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#fun_if">fun_if</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="lemma_I"></a><h2>I </h2> -<a href="Vbase.html#idP">idP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#idPn">idPn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#iffP">iffP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ifP">ifP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_arg">if_arg</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_neg">if_neg</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#if_same">if_same</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="interference.html#Interference.complement_of_interf_equals_service">Interference.complement_of_interf_equals_service</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.interference_le_interference_joblist">Interference.interference_le_interference_joblist</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.interference_eq_interference_joblist">Interference.interference_eq_interference_joblist</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.job_interference_le_service">Interference.job_interference_le_service</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.job_interference_le_delta">Interference.job_interference_le_delta</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_interference_le_workload">Interference.task_interference_le_workload</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.total_interference_le_delta">Interference.total_interference_le_delta</a> [in <a href="interference.html">interference</a>]<br/> -<a href="Vbase.html#introF">introF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introFn">introFn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introN">introN</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introNf">introNf</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introNTF">introNTF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introP">introP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introT">introT</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introTF">introTF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introTFn">introTFn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#introTn">introTn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#In_undup">In_undup</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="extralib.html#In_flatten">In_flatten</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_filterD">In_filterD</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_filterI">In_filterI</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_filter">In_filter</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_map">In_map</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_mapD">In_mapD</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_mapI">In_mapI</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_revD">In_revD</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_revI">In_revI</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_rev">In_rev</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_app">In_app</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_appD">In_appD</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_appI2">In_appI2</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_appI1">In_appI1</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_dec">In_dec</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_split">In_split</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_nil">In_nil</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_cons">In_cons</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#In_eq">In_eq</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="ExtraRelations.html#irreflexive_inclusion">irreflexive_inclusion</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#is_total_restr">is_total_restr</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#iter_fix">iter_fix</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_L"></a><h2>L </h2> -<a href="util_lemmas.html#leq_big_max">leq_big_max</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#leq_ij_implies_before_ij">leq_ij_implies_before_ij</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#leq_as_delta">leq_as_delta</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ltn_div_trunc">ltn_div_trunc</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ltSnm">ltSnm</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_M"></a><h2>M </h2> -<a href="ExtraRelations.html#max_elt_clos_trans">max_elt_clos_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#mem_zip_exists">mem_zip_exists</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_zip">mem_zip</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_powerset">mem_powerset</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_bigcat_ord_exists">mem_bigcat_ord_exists</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_bigcat_ord">mem_bigcat_ord</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#mem_bigcat_nat">mem_bigcat_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#min_lt_same">min_lt_same</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_N"></a><h2>N </h2> -<a href="Vbase.html#nandP">nandP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbF">negbF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbFE">negbFE</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbLR">negbLR</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbNE">negbNE</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbRL">negbRL</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbT">negbT</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negbTE">negbTE</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negP">negP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negPf">negPf</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#negPn">negPn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#neqP">neqP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#NoDup_undup">NoDup_undup</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="extralib.html#NoDup_mapD">NoDup_mapD</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#NoDup_eq_one">NoDup_eq_one</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#NoDup_filter">NoDup_filter</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append_left">nodup_append_left</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append_right">nodup_append_right</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append">nodup_append</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_app">nodup_app</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_cons">nodup_cons</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_append_commut">nodup_append_commut</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_map">nodup_map</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#nodup_one">nodup_one</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="Vbase.html#norP">norP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="lemma_O"></a><h2>O </h2> -<a href="ExtraRelations.html#one_ext_total_elem">one_ext_total_elem</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext_irr">one_ext_irr</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext_trans">one_ext_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#one_ext_extends">one_ext_extends</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#order_sorted_rcons">order_sorted_rcons</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#orP">orP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="lemma_P"></a><h2>P </h2> -<a href="ExtraRelations.html#path_decomp_u_1">path_decomp_u_1</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#path_decomp_u_total">path_decomp_u_total</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#path_decomp_u1">path_decomp_u1</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="extralib.html#Permutation_NoDup">Permutation_NoDup</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="extralib.html#perm_from_subset">perm_from_subset</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="platform.html#Platform.cpus_busy_with_interfering_tasks">Platform.cpus_busy_with_interfering_tasks</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.interfering_job_has_higher_eq_prio">Platform.interfering_job_has_higher_eq_prio</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.scheduled_jobs_unique">Platform.scheduled_jobs_unique</a> [in <a href="platform.html">platform</a>]<br/> -<a href="util_lemmas.html#prev_le_next">prev_le_next</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="priority.html#Priority.dm_is_valid">Priority.dm_is_valid</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.edf_valid_policy">Priority.edf_valid_policy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.edf_jlfp">Priority.edf_jlfp</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_jlfp">Priority.fp_is_jlfp</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.rm_is_valid">Priority.rm_is_valid</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.valid_fp_is_valid_jldp">Priority.valid_fp_is_valid_jldp</a> [in <a href="priority.html">priority</a>]<br/> -<br/><br/><a name="lemma_R"></a><h2>R </h2> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_cirinei_response_time_bound_edf">ResponseTimeAnalysisEDF.bertogna_cirinei_response_time_bound_edf</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_exists_task_that_exceeds_bound">ResponseTimeAnalysisEDF.bertogna_edf_exists_task_that_exceeds_bound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_sum_exceeds_total_interference">ResponseTimeAnalysisEDF.bertogna_edf_sum_exceeds_total_interference</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_minimum_exceeds_interference">ResponseTimeAnalysisEDF.bertogna_edf_minimum_exceeds_interference</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_helper_lemma">ResponseTimeAnalysisEDF.bertogna_edf_helper_lemma</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_all_cpus_busy">ResponseTimeAnalysisEDF.bertogna_edf_all_cpus_busy</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_too_much_interference">ResponseTimeAnalysisEDF.bertogna_edf_too_much_interference</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_specific_bound_holds">ResponseTimeAnalysisEDF.bertogna_edf_specific_bound_holds</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_workload_bounds_interference">ResponseTimeAnalysisEDF.bertogna_edf_workload_bounds_interference</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_R_other_ge_cost">ResponseTimeAnalysisEDF.bertogna_edf_R_other_ge_cost</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.bertogna_edf_tsk_other_in_ts">ResponseTimeAnalysisEDF.bertogna_edf_tsk_other_in_ts</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_cirinei_response_time_bound_fp">ResponseTimeAnalysisFP.bertogna_cirinei_response_time_bound_fp</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_exists_task_that_exceeds_bound">ResponseTimeAnalysisFP.bertogna_fp_exists_task_that_exceeds_bound</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_sum_exceeds_total_interference">ResponseTimeAnalysisFP.bertogna_fp_sum_exceeds_total_interference</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_minimum_exceeds_interference">ResponseTimeAnalysisFP.bertogna_fp_minimum_exceeds_interference</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_helper_lemma">ResponseTimeAnalysisFP.bertogna_fp_helper_lemma</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_all_cpus_busy">ResponseTimeAnalysisFP.bertogna_fp_all_cpus_busy</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_too_much_interference">ResponseTimeAnalysisFP.bertogna_fp_too_much_interference</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_workload_bounds_interference">ResponseTimeAnalysisFP.bertogna_fp_workload_bounds_interference</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_tsk_other_interferes">ResponseTimeAnalysisFP.bertogna_fp_tsk_other_interferes</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.bertogna_fp_tsk_other_in_ts">ResponseTimeAnalysisFP.bertogna_fp_tsk_other_in_ts</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.guan_response_time_bound_fp">ResponseTimeAnalysisGuan.guan_response_time_bound_fp</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.bertogna_cirinei_response_time_bound_fp_with_jitter">ResponseTimeAnalysisJitter.bertogna_cirinei_response_time_bound_fp_with_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.all_le_transitive">ResponseTimeIterationEDF.all_le_transitive</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.all_le_reflexive">ResponseTimeIterationEDF.all_le_reflexive</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_rt_grows_too_much">ResponseTimeIterationEDF.bertogna_edf_comp_rt_grows_too_much</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_f_increases">ResponseTimeIterationEDF.bertogna_edf_comp_f_increases</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_early">ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_early</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_with_no_tasks">ResponseTimeIterationEDF.bertogna_edf_comp_f_converges_with_no_tasks</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_iteration_monotonic">ResponseTimeIterationEDF.bertogna_edf_comp_iteration_monotonic</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_order">ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_order</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_minimum">ResponseTimeIterationEDF.bertogna_edf_comp_iteration_preserves_minimum</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_analysis_yields_response_time_bounds">ResponseTimeIterationEDF.edf_analysis_yields_response_time_bounds</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_converges">ResponseTimeIterationEDF.edf_claimed_bounds_converges</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_converges_helper">ResponseTimeIterationEDF.edf_claimed_bounds_converges_helper</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_has_R_for_every_task">ResponseTimeIterationEDF.edf_claimed_bounds_has_R_for_every_task</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_le_deadline">ResponseTimeIterationEDF.edf_claimed_bounds_le_deadline</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_ge_cost">ResponseTimeIterationEDF.edf_claimed_bounds_ge_cost</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_size">ResponseTimeIterationEDF.edf_claimed_bounds_size</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_iteration">ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_iteration</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_update_bound">ResponseTimeIterationEDF.edf_claimed_bounds_unzip1_update_bound</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.interference_bound_edf_monotonic">ResponseTimeIterationEDF.interference_bound_edf_monotonic</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.jobs_schedulable_by_edf_rta">ResponseTimeIterationEDF.jobs_schedulable_by_edf_rta</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.taskset_schedulable_by_edf_rta">ResponseTimeIterationEDF.taskset_schedulable_by_edf_rta</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.guan_fp_schedulability_test_yields_response_time_bounds">ResponseTimeIterationFPGuan.guan_fp_schedulability_test_yields_response_time_bounds</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.jobs_with_jitter_schedulable_by_guan_fp_rta">ResponseTimeIterationFPGuan.jobs_with_jitter_schedulable_by_guan_fp_rta</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.per_task_rta_fold">ResponseTimeIterationFPGuan.per_task_rta_fold</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.per_task_rta_converges">ResponseTimeIterationFPGuan.per_task_rta_converges</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_has_response_time_bounds">ResponseTimeIterationFPGuan.R_list_has_response_time_bounds</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_unzip1">ResponseTimeIterationFPGuan.R_list_unzip1</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_non_empty">ResponseTimeIterationFPGuan.R_list_non_empty</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_ge_cost">ResponseTimeIterationFPGuan.R_list_ge_cost</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_le_deadline">ResponseTimeIterationFPGuan.R_list_le_deadline</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_rcons_response_time">ResponseTimeIterationFPGuan.R_list_rcons_response_time</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_rcons_task">ResponseTimeIterationFPGuan.R_list_rcons_task</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_rcons_prefix">ResponseTimeIterationFPGuan.R_list_rcons_prefix</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.taskset_schedulable_by_guan_fp_rta">ResponseTimeIterationFPGuan.taskset_schedulable_by_guan_fp_rta</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.fp_schedulability_test_with_jitter_yields_response_time_bounds">ResponseTimeIterationFPWithJitter.fp_schedulability_test_with_jitter_yields_response_time_bounds</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.jobs_with_jitter_schedulable_by_fp_rta">ResponseTimeIterationFPWithJitter.jobs_with_jitter_schedulable_by_fp_rta</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.per_task_rta_fold">ResponseTimeIterationFPWithJitter.per_task_rta_fold</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.per_task_rta_converges">ResponseTimeIterationFPWithJitter.per_task_rta_converges</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_has_response_time_bounds">ResponseTimeIterationFPWithJitter.R_list_has_response_time_bounds</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_unzip1">ResponseTimeIterationFPWithJitter.R_list_unzip1</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_non_empty">ResponseTimeIterationFPWithJitter.R_list_non_empty</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_ge_cost">ResponseTimeIterationFPWithJitter.R_list_ge_cost</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_le_deadline">ResponseTimeIterationFPWithJitter.R_list_le_deadline</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_rcons_response_time">ResponseTimeIterationFPWithJitter.R_list_rcons_response_time</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_rcons_task">ResponseTimeIterationFPWithJitter.R_list_rcons_task</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_rcons_prefix">ResponseTimeIterationFPWithJitter.R_list_rcons_prefix</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.taskset_with_jitter_schedulable_by_fp_rta">ResponseTimeIterationFPWithJitter.taskset_with_jitter_schedulable_by_fp_rta</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_rt_grows_too_much">ResponseTimeIterationFP.bertogna_fp_comp_rt_grows_too_much</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_f_increases">ResponseTimeIterationFP.bertogna_fp_comp_f_increases</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_f_converges_early">ResponseTimeIterationFP.bertogna_fp_comp_f_converges_early</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.bertogna_fp_comp_f_monotonic">ResponseTimeIterationFP.bertogna_fp_comp_f_monotonic</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_analysis_yields_response_time_bounds">ResponseTimeIterationFP.fp_analysis_yields_response_time_bounds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_unzip1">ResponseTimeIterationFP.fp_claimed_bounds_unzip1</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_non_empty">ResponseTimeIterationFP.fp_claimed_bounds_non_empty</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_ge_cost">ResponseTimeIterationFP.fp_claimed_bounds_ge_cost</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_le_deadline">ResponseTimeIterationFP.fp_claimed_bounds_le_deadline</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_rcons_response_time">ResponseTimeIterationFP.fp_claimed_bounds_rcons_response_time</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_rcons_task">ResponseTimeIterationFP.fp_claimed_bounds_rcons_task</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds_rcons_prefix">ResponseTimeIterationFP.fp_claimed_bounds_rcons_prefix</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.jobs_schedulable_by_fp_rta">ResponseTimeIterationFP.jobs_schedulable_by_fp_rta</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta_converges">ResponseTimeIterationFP.per_task_rta_converges</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta_fold">ResponseTimeIterationFP.per_task_rta_fold</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.taskset_schedulable_by_fp_rta">ResponseTimeIterationFP.taskset_schedulable_by_fp_rta</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="response_time.html#ResponseTime.cumulative_service_after_task_rt_zero">ResponseTime.cumulative_service_after_task_rt_zero</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.cumulative_service_after_job_rt_zero">ResponseTime.cumulative_service_after_job_rt_zero</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.service_after_task_rt_zero">ResponseTime.service_after_task_rt_zero</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.service_after_job_rt_zero">ResponseTime.service_after_job_rt_zero</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="ExtraRelations.html#restr_eq_union">restr_eq_union</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_rel_trans">restr_rel_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#revert_comp_relation">revert_comp_relation</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#rt_t_trans">rt_t_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="lemma_S"></a><h2>S </h2> -<a href="Vbase.html#sameP">sameP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#same_relation_restr">same_relation_restr</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#same_relation_trans">same_relation_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#same_relation_sym">same_relation_sym</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#same_relation_refl">same_relation_refl</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="schedulability.html#Schedulability.cumulative_service_after_task_deadline_zero">Schedulability.cumulative_service_after_task_deadline_zero</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.cumulative_service_after_job_deadline_zero">Schedulability.cumulative_service_after_job_deadline_zero</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.service_after_task_deadline_zero">Schedulability.service_after_task_deadline_zero</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.service_after_job_deadline_zero">Schedulability.service_after_job_deadline_zero</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.cumulative_service_le_task_cost">ScheduleOfSporadicTask.cumulative_service_le_task_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.arrival_before_jitter">ScheduleOfTaskWithJitter.arrival_before_jitter</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.completion_monotonic">Schedule.completion_monotonic</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.cumulative_service_before_job_arrival_zero">Schedule.cumulative_service_before_job_arrival_zero</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.cumulative_service_le_job_cost">Schedule.cumulative_service_le_job_cost</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.cumulative_service_le_delta">Schedule.cumulative_service_le_delta</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.job_scheduled_during_interval">Schedule.job_scheduled_during_interval</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.not_scheduled_no_service">Schedule.not_scheduled_no_service</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_before_arrival_eq_service_during">Schedule.service_before_arrival_eq_service_during</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_before_job_arrival_zero">Schedule.service_before_job_arrival_zero</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_at_most_one">Schedule.service_at_most_one</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="util_lemmas.html#size_bigcat_ord">size_bigcat_ord</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sorted_rcons_prefix">sorted_rcons_prefix</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#strong_ind_lt">strong_ind_lt</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#strong_ind">strong_ind</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh1">subh1</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh2">subh2</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh3">subh3</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subh4">subh4</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#subndiv_eq_mod">subndiv_eq_mod</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sum_nat_eq0_nat">sum_nat_eq0_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sum_diff">sum_diff</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#sum_diff_monotonic">sum_diff_monotonic</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="lemma_T"></a><h2>T </h2> -<a href="util_lemmas.html#telescoping_sum">telescoping_sum</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#total_immediate_unique">total_immediate_unique</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_inv">tot_ext_inv</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_irr">tot_ext_irr</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_trans">tot_ext_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#tot_ext_extends">tot_ext_extends</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#trans_irr_acyclic">trans_irr_acyclic</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#t_rt_step">t_rt_step</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#t_step_rt">t_step_rt</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#t_rt_trans">t_rt_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="lemma_U"></a><h2>U </h2> -<a href="ExtraRelations.html#union_restr">union_restr</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#upward_clos_trans">upward_clos_trans</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="lemma_V"></a><h2>V </h2> -<a href="Vbase.html#vlib__beq_rewrite">vlib__beq_rewrite</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__eqb_split">vlib__eqb_split</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__norb_split">vlib__norb_split</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__orb_split">vlib__orb_split</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__nandb_split">vlib__nandb_split</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__andb_split">vlib__andb_split</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__negb_rewrite">vlib__negb_rewrite</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__internal_eqP">vlib__internal_eqP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__not_false_is_true">vlib__not_false_is_true</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#vlib__true_is_true">vlib__true_is_true</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="lemma_W"></a><h2>W </h2> -<a href="workload_guan.html#WorkloadBoundGuan.W_CI_monotonic">WorkloadBoundGuan.W_CI_monotonic</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_NC_monotonic">WorkloadBoundGuan.W_NC_monotonic</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bounded_by_W">WorkloadBound.workload_bounded_by_W</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_n_k_equals_num_mid_jobs_plus_1">WorkloadBound.workload_bound_n_k_equals_num_mid_jobs_plus_1</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_n_k_equals_num_mid_jobs">WorkloadBound.workload_bound_n_k_equals_num_mid_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_n_k_covers_middle_jobs">WorkloadBound.workload_bound_n_k_covers_middle_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_helper_lemma">WorkloadBound.workload_bound_helper_lemma</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_many_periods_in_between">WorkloadBound.workload_bound_many_periods_in_between</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_service_of_middle_jobs">WorkloadBound.workload_bound_service_of_middle_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_simpl_expression_with_first_and_last">WorkloadBound.workload_bound_simpl_expression_with_first_and_last</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_service_of_first_and_last_jobs">WorkloadBound.workload_bound_service_of_first_and_last_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_last_job_arrives_before_end_of_interval">WorkloadBound.workload_bound_last_job_arrives_before_end_of_interval</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_response_time_of_first_job_inside_interval">WorkloadBound.workload_bound_response_time_of_first_job_inside_interval</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_j_lst_is_job_of_tsk">WorkloadBound.workload_bound_j_lst_is_job_of_tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_holds_for_a_single_job">WorkloadBound.workload_bound_holds_for_a_single_job</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_j_fst_is_job_of_tsk">WorkloadBound.workload_bound_j_fst_is_job_of_tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_holds_for_at_most_n_k_jobs">WorkloadBound.workload_bound_holds_for_at_most_n_k_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_jobs_ordered_by_arrival">WorkloadBound.workload_bound_jobs_ordered_by_arrival</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_all_jobs_from_tsk">WorkloadBound.workload_bound_all_jobs_from_tsk</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_job_in_same_sequence">WorkloadBound.workload_bound_job_in_same_sequence</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_simpl_by_sorting_interfering_jobs">WorkloadBound.workload_bound_simpl_by_sorting_interfering_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.workload_bound_simpl_by_filtering_interfering_jobs">WorkloadBound.workload_bound_simpl_by_filtering_interfering_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.W_monotonic">WorkloadBound.W_monotonic</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.workload_bounded_by_W_jitter">WorkloadWithJitter.workload_bounded_by_W_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.W_jitter_monotonic">WorkloadWithJitter.W_jitter_monotonic</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload.html#Workload.workload_eq_workload_joblist">Workload.workload_eq_workload_joblist</a> [in <a href="workload.html">workload</a>]<br/> -<br/><br/><a name="lemma_X"></a><h2>X </h2> -<a href="Vbase.html#xorPif">xorPif</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#xorPifn">xorPifn</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="lemma_Z"></a><h2>Z </h2> -<a href="util_lemmas.html#zipP">zipP</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><hr/> -<h1>Constructor Index</h1> -<a name="constructor_E"></a><h2>E </h2> -<a href="Vbase.html#Equality.Mixin">Equality.Mixin</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Pack">Equality.Pack</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="constructor_I"></a><h2>I </h2> -<a href="Vbase.html#IfSpecFalse">IfSpecFalse</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#IfSpecTrue">IfSpecTrue</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="constructor_P"></a><h2>P </h2> -<a href="Vbase.html#Phantom">Phantom</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="constructor_R"></a><h2>R </h2> -<a href="Vbase.html#ReflectF">ReflectF</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectT">ReflectT</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><hr/> -<h1>Axiom Index</h1> -<a name="axiom_A"></a><h2>A </h2> -<a href="arrival_sequence.html#ArrivalSequence.eqn_jobin">ArrivalSequence.eqn_jobin</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<br/><br/><hr/> -<h1>Projection Index</h1> -<a name="projection_A"></a><h2>A </h2> -<a href="arrival_sequence.html#ArrivalSequence._arrival_time">ArrivalSequence._arrival_time</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence._job_in">ArrivalSequence._job_in</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<br/><br/><a name="projection_E"></a><h2>E </h2> -<a href="Vbase.html#Equality.op">Equality.op</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.sort">Equality.sort</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><hr/> -<h1>Inductive Index</h1> -<a name="inductive_I"></a><h2>I </h2> -<a href="Vbase.html#if_spec">if_spec</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="inductive_P"></a><h2>P </h2> -<a href="Vbase.html#phantom">phantom</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="inductive_R"></a><h2>R </h2> -<a href="Vbase.html#reflect">reflect</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><hr/> -<h1>Section Index</h1> -<a name="section_A"></a><h2>A </h2> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceDef">ArrivalSequence.ArrivalSequenceDef</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivalSequenceProperties">ArrivalSequence.ArrivalSequenceProperties</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.ArrivingJobs">ArrivalSequence.ArrivingJobs</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.JobInArrivalSequence">ArrivalSequence.JobInArrivalSequence</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<br/><br/><a name="section_B"></a><h2>B </h2> -<a href="Vbase.html#BoolIf">BoolIf</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="section_E"></a><h2>E </h2> -<a href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef">EDFSpecificBound.EDFBoundDef</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound">EDFSpecificBound.ProofInterferenceBound</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof">EDFSpecificBound.ProofInterferenceBound.MainProof</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.FactsAboutEDF">EDFSpecificBound.ProofInterferenceBound.MainProof.FactsAboutEDF</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.FactsAboutFirstJob">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.FactsAboutFirstJob</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.FactsAboutFirstAndLastJobs">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.FactsAboutFirstAndLastJobs</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.InterferenceOfFirstJob">EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.InterferenceOfFirstJob</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.SimplifyJobSequence">EDFSpecificBound.ProofInterferenceBound.MainProof.SimplifyJobSequence</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="Vbase.html#Equality.ClassDef">Equality.ClassDef</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="section_I"></a><h2>I </h2> -<a href="interference.html#Interference.InterferenceDefs">Interference.InterferenceDefs</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.BasicLemmas">Interference.InterferenceDefs.BasicLemmas</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.BoundUsingPerJobInterference">Interference.InterferenceDefs.BoundUsingPerJobInterference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService">Interference.InterferenceDefs.CorrespondenceWithService</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.EquivalenceWithPerJobInterference">Interference.InterferenceDefs.EquivalenceWithPerJobInterference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.JobInterference">Interference.InterferenceDefs.JobInterference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterference">Interference.InterferenceDefs.TaskInterference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TaskInterferenceJobList">Interference.InterferenceDefs.TaskInterferenceJobList</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferenceDefs.TotalInterference">Interference.InterferenceDefs.TotalInterference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks">Interference.InterferingTasks</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.FP">Interference.InterferingTasks.FP</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.InterferingTasks.JLFP">Interference.InterferingTasks.JLFP</a> [in <a href="interference.html">interference</a>]<br/> -<br/><br/><a name="section_J"></a><h2>J </h2> -<a href="job.html#Job.ValidJob">Job.ValidJob</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidRealtimeJob">Job.ValidRealtimeJob</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJob">Job.ValidSporadicTaskJob</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.ValidSporadicTaskJobWithJitter">Job.ValidSporadicTaskJobWithJitter</a> [in <a href="job.html">job</a>]<br/> -<br/><br/><a name="section_N"></a><h2>N </h2> -<a href="Vbase.html#NegationLemmas">NegationLemmas</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="section_O"></a><h2>O </h2> -<a href="ExtraRelations.html#one_extension">one_extension</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="section_P"></a><h2>P </h2> -<a href="util_lemmas.html#Pair">Pair</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants">Platform.SchedulingInvariants</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.FP">Platform.SchedulingInvariants.FP</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP">Platform.SchedulingInvariants.JLDP</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas">Platform.SchedulingInvariants.JLDP.BasicLemmas</a> [in <a href="platform.html">platform</a>]<br/> -<a href="priority.html#Priority.EDFDefs">Priority.EDFDefs</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.GeneralizeFP">Priority.GeneralizeFP</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.JLFPDefs">Priority.JLFPDefs</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs">Priority.PriorityDefs</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidFPPolicy">Priority.PriorityDefs.ValidFPPolicy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy">Priority.PriorityDefs.ValidJLFPPolicy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RateDeadlineMonotonic">Priority.RateDeadlineMonotonic</a> [in <a href="priority.html">priority</a>]<br/> -<br/><br/><a name="section_R"></a><h2>R </h2> -<a href="Vbase.html#Reflect">Reflect</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectConnectives">ReflectConnectives</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectCore">ReflectCore</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#ReflectNegCore">ReflectNegCore</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound">ResponseTimeAnalysisEDF.ResponseTimeBound</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.DerivingContradiction</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks">ResponseTimeAnalysisEDF.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof">ResponseTimeAnalysisEDF.ResponseTimeBound.MainProof</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.AllTasks</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask">ResponseTimeAnalysisEDF.TotalInterferenceBoundEDF.PerTask</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP">ResponseTimeAnalysisFP.InterferenceBoundFP</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks">ResponseTimeAnalysisFP.InterferenceBoundFP.AllTasks</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask">ResponseTimeAnalysisFP.InterferenceBoundFP.PerTask</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound">ResponseTimeAnalysisFP.ResponseTimeBound</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.DerivingContradiction</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks">ResponseTimeAnalysisFP.ResponseTimeBound.Lemmas.LemmasAboutInterferingTasks</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan">ResponseTimeAnalysisGuan.InterferenceBoundGuan</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry">ResponseTimeAnalysisGuan.InterferenceBoundGuan.InterferenceBoundCarry</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition">ResponseTimeAnalysisGuan.InterferenceBoundGuan.TasksetPartition</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.ResponseTimeBoundGuan">ResponseTimeAnalysisGuan.ResponseTimeBoundGuan</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter">ResponseTimeAnalysisJitter.InterferenceBoundJitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP">ResponseTimeAnalysisJitter.InterferenceBoundJitter.FP</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP">ResponseTimeAnalysisJitter.InterferenceBoundJitter.JLFP</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask">ResponseTimeAnalysisJitter.InterferenceBoundJitter.PerTask</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.ResponseTimeBound">ResponseTimeAnalysisJitter.ResponseTimeBound</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis">ResponseTimeIterationEDF.Analysis</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence">ResponseTimeIterationEDF.Analysis.Convergence</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction">ResponseTimeIterationEDF.Analysis.Convergence.DerivingContradiction</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.Convergence.RelationProperties">ResponseTimeIterationEDF.Analysis.Convergence.RelationProperties</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MainProof">ResponseTimeIterationEDF.Analysis.MainProof</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound">ResponseTimeIterationEDF.Analysis.MonotonicityOfInterferenceBound</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.Analysis.SimpleLemmas">ResponseTimeIterationEDF.Analysis.SimpleLemmas</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis">ResponseTimeIterationFPGuan.Analysis</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.AuxiliaryLemmas">ResponseTimeIterationFPGuan.Analysis.AuxiliaryLemmas</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof">ResponseTimeIterationFPGuan.Analysis.Proof</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.Analysis.Proof.HelperLemma">ResponseTimeIterationFPGuan.Analysis.Proof.HelperLemma</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis">ResponseTimeIterationFPWithJitter.Analysis</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.AuxiliaryLemmas">ResponseTimeIterationFPWithJitter.Analysis.AuxiliaryLemmas</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof">ResponseTimeIterationFPWithJitter.Analysis.Proof</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.Analysis.Proof.HelperLemma">ResponseTimeIterationFPWithJitter.Analysis.Proof.HelperLemma</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis">ResponseTimeIterationFP.Analysis</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence">ResponseTimeIterationFP.Analysis.Convergence</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction">ResponseTimeIterationFP.Analysis.Convergence.DerivingContradiction</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.HighPriorityTasks">ResponseTimeIterationFP.Analysis.HighPriorityTasks</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.MainProof">ResponseTimeIterationFP.Analysis.MainProof</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.Analysis.SimpleLemmas">ResponseTimeIterationFP.Analysis.SimpleLemmas</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas">ResponseTime.BasicLemmas</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.AllJobs">ResponseTime.BasicLemmas.AllJobs</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.BasicLemmas.SpecificJob">ResponseTime.BasicLemmas.SpecificJob</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="response_time.html#ResponseTime.ResponseTimeBound">ResponseTime.ResponseTimeBound</a> [in <a href="response_time.html">response_time</a>]<br/> -<br/><br/><a name="section_S"></a><h2>S </h2> -<a href="schedulability.html#Schedulability.BasicLemmas">Schedulability.BasicLemmas</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.AllJobs">Schedulability.BasicLemmas.AllJobs</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.BasicLemmas.SpecificJob">Schedulability.BasicLemmas.SpecificJob</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs">Schedulability.SchedulableDefs</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs">Schedulability.SchedulableDefs.ScheduleOfJobs</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks">Schedulability.SchedulableDefs.ScheduleOfTasks</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.BasicLemmas">ScheduleOfSporadicTask.BasicLemmas</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.ValidSchedule">ScheduleOfSporadicTask.ValidSchedule</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter">ScheduleOfTaskWithJitter.ArrivalAfterJitter</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.BasicLemmas">ScheduleOfTaskWithJitter.ArrivalAfterJitter.BasicLemmas</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduleDef">Schedule.ScheduleDef</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ScheduledJobs">Schedule.ScheduledJobs</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas">Schedule.ServiceLemmas</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Arrival">Schedule.ServiceLemmas.Arrival</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Basic">Schedule.ServiceLemmas.Basic</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.Completion">Schedule.ServiceLemmas.Completion</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ServiceLemmas.NoParallelism">Schedule.ServiceLemmas.NoParallelism</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.ValidSchedules">Schedule.ValidSchedules</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.ArrivalModels">SporadicTaskArrival.ArrivalModels</a> [in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs">SporadicTaskset.TasksetDefs</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties">SporadicTaskset.TasksetDefs.TasksetProperties</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask">SporadicTask.BasicTask</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.BasicTask.ValidParameters">SporadicTask.BasicTask.ValidParameters</a> [in <a href="task.html">task</a>]<br/> -<br/><br/><a name="section_T"></a><h2>T </h2> -<a href="util_lemmas.html#Triple">Triple</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="section_W"></a><h2>W </h2> -<a href="workload_guan.html#WorkloadBoundGuan.BasicLemmasCarry">WorkloadBoundGuan.BasicLemmasCarry</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.ProofWorkloadBound">WorkloadBoundGuan.ProofWorkloadBound</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.WorkloadBoundCarry">WorkloadBoundGuan.WorkloadBoundCarry</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_bound.html#WorkloadBound.BasicLemmas">WorkloadBound.BasicLemmas</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound">WorkloadBound.ProofWorkloadBound</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof">WorkloadBound.ProofWorkloadBound.MainProof</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.SimplifyJobSequence">WorkloadBound.ProofWorkloadBound.MainProof.SimplifyJobSequence</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadNotManyJobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadNotManyJobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs">WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.WorkloadBoundDef">WorkloadBound.WorkloadBoundDef</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.BasicLemmas">WorkloadWithJitter.BasicLemmas</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter">WorkloadWithJitter.ProofWorkloadBoundJitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions">WorkloadWithJitter.ProofWorkloadBoundJitter.CleanerDefinitions</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.WorkloadBoundWithJitter">WorkloadWithJitter.WorkloadBoundWithJitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload.html#Workload.WorkloadDef">Workload.WorkloadDef</a> [in <a href="workload.html">workload</a>]<br/> -<br/><br/><hr/> -<h1>Abbreviation Index</h1> -<a name="abbreviation_E"></a><h2>E </h2> -<a href="Vbase.html#Equality.class_of">Equality.class_of</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.EqMixin">Equality.Exports.EqMixin</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.EqType">Equality.Exports.EqType</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.Exports.eqType">Equality.Exports.eqType</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eqxx">eqxx</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><hr/> -<h1>Definition Index</h1> -<a name="definition_A"></a><h2>A </h2> -<a href="ExtraRelations.html#acyclic">acyclic</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#antisymmetric_over_seq">antisymmetric_over_seq</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="extralib.html#appA">appA</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrival_sequence_is_a_set">ArrivalSequence.arrival_sequence_is_a_set</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrival_sequence">ArrivalSequence.arrival_sequence</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrived_between">ArrivalSequence.arrived_between</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrived_before">ArrivalSequence.arrived_before</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.arrives_at">ArrivalSequence.arrives_at</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.has_arrived">ArrivalSequence.has_arrived</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.jobin_eqType">ArrivalSequence.jobin_eqType</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.jobin_eqMixin">ArrivalSequence.jobin_eqMixin</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.jobin_eqdef">ArrivalSequence.jobin_eqdef</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.JobIn_is_Job">ArrivalSequence.JobIn_is_Job</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.job_arrival">ArrivalSequence.job_arrival</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.no_multiple_arrivals">ArrivalSequence.no_multiple_arrivals</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="arrival_sequence.html#ArrivalSequence.time">ArrivalSequence.time</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<a href="ExtraRelations.html#asymmetric">asymmetric</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="definition_C"></a><h2>C </h2> -<a href="util_lemmas.html#comp_relation">comp_relation</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="definition_D"></a><h2>D </h2> -<a href="Vbase.html#decP">decP</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="extralib.html#disjoint">disjoint</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="util_divround.html#div_ceil">div_ceil</a> [in <a href="util_divround.html">util_divround</a>]<br/> -<a href="util_divround.html#div_floor">div_floor</a> [in <a href="util_divround.html">util_divround</a>]<br/> -<br/><br/><a name="definition_E"></a><h2>E </h2> -<a href="interference_bound_edf.html#EDFSpecificBound.edf_specific_interference_bound">EDFSpecificBound.edf_specific_interference_bound</a> [in <a href="interference_bound_edf.html">interference_bound_edf</a>]<br/> -<a href="Vbase.html#Equality.axiom">Equality.axiom</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.class">Equality.class</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.clone">Equality.clone</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.pack">Equality.pack</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#eq_op">eq_op</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="util_lemmas.html#extend_ord">extend_ord</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#ext_tuple_to_fun_index">ext_tuple_to_fun_index</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="definition_F"></a><h2>F </h2> -<a href="extralib.html#flatten">flatten</a> [in <a href="extralib.html">extralib</a>]<br/> -<a href="util_lemmas.html#fun_ord_to_nat">fun_ord_to_nat</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="definition_I"></a><h2>I </h2> -<a href="Vbase.html#idfun">idfun</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="ExtraRelations.html#immediate">immediate</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="interference.html#Interference.is_interfering_task_jlfp">Interference.is_interfering_task_jlfp</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.is_interfering_task_fp">Interference.is_interfering_task_fp</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.job_interference">Interference.job_interference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.schedules_job_of_tsk">Interference.schedules_job_of_tsk</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_interference_joblist">Interference.task_interference_joblist</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_interference">Interference.task_interference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.task_is_scheduled">Interference.task_is_scheduled</a> [in <a href="interference.html">interference</a>]<br/> -<a href="interference.html#Interference.total_interference">Interference.total_interference</a> [in <a href="interference.html">interference</a>]<br/> -<a href="ExtraRelations.html#irreflexive">irreflexive</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#is_total">is_total</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="Vbase.html#is_true">is_true</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="definition_J"></a><h2>J </h2> -<a href="job.html#Job.job_jitter_leq_task_jitter">Job.job_jitter_leq_task_jitter</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_deadline_eq_task_deadline">Job.job_deadline_eq_task_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_cost_le_task_cost">Job.job_cost_le_task_cost</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_cost_le_deadline">Job.job_cost_le_deadline</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_deadline_positive">Job.job_deadline_positive</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.job_cost_positive">Job.job_cost_positive</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.valid_sporadic_job_with_jitter">Job.valid_sporadic_job_with_jitter</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.valid_sporadic_job">Job.valid_sporadic_job</a> [in <a href="job.html">job</a>]<br/> -<a href="job.html#Job.valid_realtime_job">Job.valid_realtime_job</a> [in <a href="job.html">job</a>]<br/> -<br/><br/><a name="definition_M"></a><h2>M </h2> -<a href="util_lemmas.html#make_sequence">make_sequence</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#max_elt">max_elt</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="definition_N"></a><h2>N </h2> -<a href="util_lemmas.html#no_intersection">no_intersection</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#NW">NW</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><a name="definition_O"></a><h2>O </h2> -<a href="ExtraRelations.html#one_ext">one_ext</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="definition_P"></a><h2>P </h2> -<a href="util_lemmas.html#pair_2nd">pair_2nd</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#pair_1st">pair_1st</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="Vbase.html#phant_id">phant_id</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="platform.html#Platform.FP_scheduling_invariant_holds">Platform.FP_scheduling_invariant_holds</a> [in <a href="platform.html">platform</a>]<br/> -<a href="platform.html#Platform.JLFP_JLDP_scheduling_invariant_holds">Platform.JLFP_JLDP_scheduling_invariant_holds</a> [in <a href="platform.html">platform</a>]<br/> -<a href="util_lemmas.html#powerset">powerset</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="priority.html#Priority.DM">Priority.DM</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.EDF">Priority.EDF</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_to_jldp">Priority.fp_to_jldp</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_total">Priority.fp_is_total</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_transitive">Priority.fp_is_transitive</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_is_reflexive">Priority.fp_is_reflexive</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.fp_policy">Priority.fp_policy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.is_jlfp_policy">Priority.is_jlfp_policy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jldp_policy">Priority.jldp_policy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jlfp_is_total">Priority.jlfp_is_total</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jlfp_is_transitive">Priority.jlfp_is_transitive</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.jlfp_is_reflexive">Priority.jlfp_is_reflexive</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.RM">Priority.RM</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.valid_fp_policy">Priority.valid_fp_policy</a> [in <a href="priority.html">priority</a>]<br/> -<a href="priority.html#Priority.valid_jldp_policy">Priority.valid_jldp_policy</a> [in <a href="priority.html">priority</a>]<br/> -<br/><br/><a name="definition_R"></a><h2>R </h2> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.interference_bound_edf">ResponseTimeAnalysisEDF.interference_bound_edf</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_edf_theory.html#ResponseTimeAnalysisEDF.total_interference_bound_edf">ResponseTimeAnalysisEDF.total_interference_bound_edf</a> [in <a href="bertogna_edf_theory.html">bertogna_edf_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.interference_bound_fp">ResponseTimeAnalysisFP.interference_bound_fp</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="bertogna_fp_theory.html#ResponseTimeAnalysisFP.total_interference_bound_fp">ResponseTimeAnalysisFP.total_interference_bound_fp</a> [in <a href="bertogna_fp_theory.html">bertogna_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.guan_interference_bound">ResponseTimeAnalysisGuan.guan_interference_bound</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.interference_bound_CI">ResponseTimeAnalysisGuan.interference_bound_CI</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.interference_bound_NC">ResponseTimeAnalysisGuan.interference_bound_NC</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="guan_fp_theory.html#ResponseTimeAnalysisGuan.valid_NC_CI_partitions">ResponseTimeAnalysisGuan.valid_NC_CI_partitions</a> [in <a href="guan_fp_theory.html">guan_fp_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.interference_bound_jitter">ResponseTimeAnalysisJitter.interference_bound_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.is_interfering_task_fp">ResponseTimeAnalysisJitter.is_interfering_task_fp</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.total_interference_bound_jlfp_jitter">ResponseTimeAnalysisJitter.total_interference_bound_jlfp_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_fp_jitter_theory.html#ResponseTimeAnalysisJitter.total_interference_bound_fp_jitter">ResponseTimeAnalysisJitter.total_interference_bound_fp_jitter</a> [in <a href="bertogna_fp_jitter_theory.html">bertogna_fp_jitter_theory</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_schedulable">ResponseTimeIterationEDF.edf_schedulable</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_claimed_bounds">ResponseTimeIterationEDF.edf_claimed_bounds</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_rta_iteration">ResponseTimeIterationEDF.edf_rta_iteration</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.edf_response_time_bound">ResponseTimeIterationEDF.edf_response_time_bound</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.no_deadline_missed_by_job">ResponseTimeIterationEDF.no_deadline_missed_by_job</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.no_deadline_missed_by_task">ResponseTimeIterationEDF.no_deadline_missed_by_task</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.R_le_deadline">ResponseTimeIterationEDF.R_le_deadline</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="bertogna_edf_comp.html#ResponseTimeIterationEDF.update_bound">ResponseTimeIterationEDF.update_bound</a> [in <a href="bertogna_edf_comp.html">bertogna_edf_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.guan_fp_schedulable">ResponseTimeIterationFPGuan.guan_fp_schedulable</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.no_deadline_missed_by_job">ResponseTimeIterationFPGuan.no_deadline_missed_by_job</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.no_deadline_missed_by_task">ResponseTimeIterationFPGuan.no_deadline_missed_by_task</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.per_task_rta">ResponseTimeIterationFPGuan.per_task_rta</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list">ResponseTimeIterationFPGuan.R_list</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="guan_fp_comp.html#ResponseTimeIterationFPGuan.R_list_helper">ResponseTimeIterationFPGuan.R_list_helper</a> [in <a href="guan_fp_comp.html">guan_fp_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.fp_schedulable">ResponseTimeIterationFPWithJitter.fp_schedulable</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.no_deadline_missed_by_job">ResponseTimeIterationFPWithJitter.no_deadline_missed_by_job</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.no_deadline_missed_by_task">ResponseTimeIterationFPWithJitter.no_deadline_missed_by_task</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.per_task_rta">ResponseTimeIterationFPWithJitter.per_task_rta</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list">ResponseTimeIterationFPWithJitter.R_list</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_jitter_comp.html#ResponseTimeIterationFPWithJitter.R_list_helper">ResponseTimeIterationFPWithJitter.R_list_helper</a> [in <a href="bertogna_fp_jitter_comp.html">bertogna_fp_jitter_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_schedulable">ResponseTimeIterationFP.fp_schedulable</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_claimed_bounds">ResponseTimeIterationFP.fp_claimed_bounds</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.fp_bound_of_task">ResponseTimeIterationFP.fp_bound_of_task</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.max_steps">ResponseTimeIterationFP.max_steps</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="bertogna_fp_comp.html#ResponseTimeIterationFP.per_task_rta">ResponseTimeIterationFP.per_task_rta</a> [in <a href="bertogna_fp_comp.html">bertogna_fp_comp</a>]<br/> -<a href="response_time.html#ResponseTime.is_response_time_bound_of_task">ResponseTime.is_response_time_bound_of_task</a> [in <a href="response_time.html">response_time</a>]<br/> -<a href="ExtraRelations.html#restr_eq_rel">restr_eq_rel</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_rel">restr_rel</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#restr_subset">restr_subset</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#reverse_sorted">reverse_sorted</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="definition_S"></a><h2>S </h2> -<a href="schedulability.html#Schedulability.job_misses_no_deadline">Schedulability.job_misses_no_deadline</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.task_misses_no_deadline_before">Schedulability.task_misses_no_deadline_before</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedulability.html#Schedulability.task_misses_no_deadline">Schedulability.task_misses_no_deadline</a> [in <a href="schedulability.html">schedulability</a>]<br/> -<a href="schedule.html#ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel">ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#ScheduleOfTaskWithJitter.jobs_execute_after_jitter">ScheduleOfTaskWithJitter.jobs_execute_after_jitter</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.backlogged">Schedule.backlogged</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.carried_out">Schedule.carried_out</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.carried_in">Schedule.carried_in</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.completed">Schedule.completed</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.completed_jobs_dont_execute">Schedule.completed_jobs_dont_execute</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.is_idle">Schedule.is_idle</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_must_arrive_to_execute">Schedule.jobs_must_arrive_to_execute</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_dont_execute_in_parallel">Schedule.jobs_dont_execute_in_parallel</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_scheduled_between">Schedule.jobs_scheduled_between</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.jobs_scheduled_at">Schedule.jobs_scheduled_at</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.pending">Schedule.pending</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.processor">Schedule.processor</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.schedule">Schedule.schedule</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.scheduled">Schedule.scheduled</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service">Schedule.service</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_during">Schedule.service_during</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="schedule.html#Schedule.service_at">Schedule.service_at</a> [in <a href="schedule.html">schedule</a>]<br/> -<a href="task_arrival.html#SporadicTaskArrival.sporadic_task_model">SporadicTaskArrival.sporadic_task_model</a> [in <a href="task_arrival.html">task_arrival</a>]<br/> -<a href="task.html#SporadicTaskset.arbitrary_deadline_model">SporadicTaskset.arbitrary_deadline_model</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.implicit_deadline_model">SporadicTaskset.implicit_deadline_model</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.restricted_deadline_model">SporadicTaskset.restricted_deadline_model</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.taskset_of">SporadicTaskset.taskset_of</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTaskset.valid_sporadic_taskset">SporadicTaskset.valid_sporadic_taskset</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.is_valid_sporadic_task">SporadicTask.is_valid_sporadic_task</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_cost_le_period">SporadicTask.task_cost_le_period</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_cost_le_deadline">SporadicTask.task_cost_le_deadline</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_deadline_positive">SporadicTask.task_deadline_positive</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_period_positive">SporadicTask.task_period_positive</a> [in <a href="task.html">task</a>]<br/> -<a href="task.html#SporadicTask.task_cost_positive">SporadicTask.task_cost_positive</a> [in <a href="task.html">task</a>]<br/> -<br/><br/><a name="definition_T"></a><h2>T </h2> -<a href="util_lemmas.html#total_over_seq">total_over_seq</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="ExtraRelations.html#tot_ext">tot_ext</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="util_lemmas.html#triple_3rd">triple_3rd</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#triple_2nd">triple_2nd</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<a href="util_lemmas.html#triple_1st">triple_1st</a> [in <a href="util_lemmas.html">util_lemmas</a>]<br/> -<br/><br/><a name="definition_U"></a><h2>U </h2> -<a href="ExtraRelations.html#undup">undup</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<a href="ExtraRelations.html#upward_closed">upward_closed</a> [in <a href="ExtraRelations.html">ExtraRelations</a>]<br/> -<br/><br/><a name="definition_W"></a><h2>W </h2> -<a href="workload_guan.html#WorkloadBoundGuan.max_jobs_CI">WorkloadBoundGuan.max_jobs_CI</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.max_jobs_NC">WorkloadBoundGuan.max_jobs_NC</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_CI">WorkloadBoundGuan.W_CI</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_guan.html#WorkloadBoundGuan.W_NC">WorkloadBoundGuan.W_NC</a> [in <a href="workload_guan.html">workload_guan</a>]<br/> -<a href="workload_bound.html#WorkloadBound.max_jobs">WorkloadBound.max_jobs</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_bound.html#WorkloadBound.W">WorkloadBound.W</a> [in <a href="workload_bound.html">workload_bound</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.max_jobs_jitter">WorkloadWithJitter.max_jobs_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.no_deadline_misses_by">WorkloadWithJitter.no_deadline_misses_by</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.response_time_bound_of">WorkloadWithJitter.response_time_bound_of</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.workload_of">WorkloadWithJitter.workload_of</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload_jitter.html#WorkloadWithJitter.W_jitter">WorkloadWithJitter.W_jitter</a> [in <a href="workload_jitter.html">workload_jitter</a>]<br/> -<a href="workload.html#Workload.service_of_task">Workload.service_of_task</a> [in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.workload">Workload.workload</a> [in <a href="workload.html">workload</a>]<br/> -<a href="workload.html#Workload.workload_joblist">Workload.workload_joblist</a> [in <a href="workload.html">workload</a>]<br/> -<br/><br/><hr/> -<h1>Record Index</h1> -<a name="record_A"></a><h2>A </h2> -<a href="arrival_sequence.html#ArrivalSequence.JobIn">ArrivalSequence.JobIn</a> [in <a href="arrival_sequence.html">arrival_sequence</a>]<br/> -<br/><br/><a name="record_E"></a><h2>E </h2> -<a href="Vbase.html#Equality.mixin_of">Equality.mixin_of</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<a href="Vbase.html#Equality.type">Equality.type</a> [in <a href="Vbase.html">Vbase</a>]<br/> -<br/><br/><hr/><table> -<tr> -<td>Global Index</td> -<td><a href="index.html#global_A">A</a></td> -<td><a href="index.html#global_B">B</a></td> -<td><a href="index.html#global_C">C</a></td> -<td><a href="index.html#global_D">D</a></td> -<td><a href="index.html#global_E">E</a></td> -<td><a href="index.html#global_F">F</a></td> -<td><a href="index.html#global_G">G</a></td> -<td>H</td> -<td><a href="index.html#global_I">I</a></td> -<td><a href="index.html#global_J">J</a></td> -<td>K</td> -<td><a href="index.html#global_L">L</a></td> -<td><a href="index.html#global_M">M</a></td> -<td><a href="index.html#global_N">N</a></td> -<td><a href="index.html#global_O">O</a></td> -<td><a href="index.html#global_P">P</a></td> -<td>Q</td> -<td><a href="index.html#global_R">R</a></td> -<td><a href="index.html#global_S">S</a></td> -<td><a href="index.html#global_T">T</a></td> -<td><a href="index.html#global_U">U</a></td> -<td><a href="index.html#global_V">V</a></td> -<td><a href="index.html#global_W">W</a></td> -<td><a href="index.html#global_X">X</a></td> -<td>Y</td> -<td><a href="index.html#global_Z">Z</a></td> -<td>_</td> -<td><a href="index.html#global_*">other</a></td> -<td>(1571 entries)</td> -</tr> -<tr> -<td>Notation Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#notation_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td><a href="index.html#notation_*">other</a></td> -<td>(19 entries)</td> -</tr> -<tr> -<td>Module Index</td> -<td><a href="index.html#module_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#module_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#module_I">I</a></td> -<td><a href="index.html#module_J">J</a></td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#module_P">P</a></td> -<td>Q</td> -<td><a href="index.html#module_R">R</a></td> -<td><a href="index.html#module_S">S</a></td> -<td>T</td> -<td>U</td> -<td>V</td> -<td><a href="index.html#module_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(28 entries)</td> -</tr> -<tr> -<td>Variable Index</td> -<td><a href="index.html#variable_A">A</a></td> -<td><a href="index.html#variable_B">B</a></td> -<td>C</td> -<td>D</td> -<td><a href="index.html#variable_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#variable_I">I</a></td> -<td><a href="index.html#variable_J">J</a></td> -<td>K</td> -<td><a href="index.html#variable_L">L</a></td> -<td>M</td> -<td><a href="index.html#variable_N">N</a></td> -<td><a href="index.html#variable_O">O</a></td> -<td><a href="index.html#variable_P">P</a></td> -<td>Q</td> -<td><a href="index.html#variable_R">R</a></td> -<td><a href="index.html#variable_S">S</a></td> -<td><a href="index.html#variable_T">T</a></td> -<td>U</td> -<td>V</td> -<td><a href="index.html#variable_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(767 entries)</td> -</tr> -<tr> -<td>Library Index</td> -<td><a href="index.html#library_A">A</a></td> -<td><a href="index.html#library_B">B</a></td> -<td>C</td> -<td>D</td> -<td><a href="index.html#library_E">E</a></td> -<td>F</td> -<td><a href="index.html#library_G">G</a></td> -<td>H</td> -<td><a href="index.html#library_I">I</a></td> -<td><a href="index.html#library_J">J</a></td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#library_P">P</a></td> -<td>Q</td> -<td><a href="index.html#library_R">R</a></td> -<td><a href="index.html#library_S">S</a></td> -<td><a href="index.html#library_T">T</a></td> -<td><a href="index.html#library_U">U</a></td> -<td><a href="index.html#library_V">V</a></td> -<td><a href="index.html#library_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(29 entries)</td> -</tr> -<tr> -<td>Lemma Index</td> -<td><a href="index.html#lemma_A">A</a></td> -<td><a href="index.html#lemma_B">B</a></td> -<td><a href="index.html#lemma_C">C</a></td> -<td><a href="index.html#lemma_D">D</a></td> -<td><a href="index.html#lemma_E">E</a></td> -<td><a href="index.html#lemma_F">F</a></td> -<td>G</td> -<td>H</td> -<td><a href="index.html#lemma_I">I</a></td> -<td>J</td> -<td>K</td> -<td><a href="index.html#lemma_L">L</a></td> -<td><a href="index.html#lemma_M">M</a></td> -<td><a href="index.html#lemma_N">N</a></td> -<td><a href="index.html#lemma_O">O</a></td> -<td><a href="index.html#lemma_P">P</a></td> -<td>Q</td> -<td><a href="index.html#lemma_R">R</a></td> -<td><a href="index.html#lemma_S">S</a></td> -<td><a href="index.html#lemma_T">T</a></td> -<td><a href="index.html#lemma_U">U</a></td> -<td><a href="index.html#lemma_V">V</a></td> -<td><a href="index.html#lemma_W">W</a></td> -<td><a href="index.html#lemma_X">X</a></td> -<td>Y</td> -<td><a href="index.html#lemma_Z">Z</a></td> -<td>_</td> -<td>other</td> -<td>(385 entries)</td> -</tr> -<tr> -<td>Constructor Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#constructor_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#constructor_I">I</a></td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#constructor_P">P</a></td> -<td>Q</td> -<td><a href="index.html#constructor_R">R</a></td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(7 entries)</td> -</tr> -<tr> -<td>Axiom Index</td> -<td><a href="index.html#axiom_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td>E</td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(1 entry)</td> -</tr> -<tr> -<td>Projection Index</td> -<td><a href="index.html#projection_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#projection_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(4 entries)</td> -</tr> -<tr> -<td>Inductive Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td>E</td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#inductive_I">I</a></td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td><a href="index.html#inductive_P">P</a></td> -<td>Q</td> -<td><a href="index.html#inductive_R">R</a></td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(3 entries)</td> -</tr> -<tr> -<td>Section Index</td> -<td><a href="index.html#section_A">A</a></td> -<td><a href="index.html#section_B">B</a></td> -<td>C</td> -<td>D</td> -<td><a href="index.html#section_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td><a href="index.html#section_I">I</a></td> -<td><a href="index.html#section_J">J</a></td> -<td>K</td> -<td>L</td> -<td>M</td> -<td><a href="index.html#section_N">N</a></td> -<td><a href="index.html#section_O">O</a></td> -<td><a href="index.html#section_P">P</a></td> -<td>Q</td> -<td><a href="index.html#section_R">R</a></td> -<td><a href="index.html#section_S">S</a></td> -<td><a href="index.html#section_T">T</a></td> -<td>U</td> -<td>V</td> -<td><a href="index.html#section_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(143 entries)</td> -</tr> -<tr> -<td>Abbreviation Index</td> -<td>A</td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#abbreviation_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(5 entries)</td> -</tr> -<tr> -<td>Definition Index</td> -<td><a href="index.html#definition_A">A</a></td> -<td>B</td> -<td><a href="index.html#definition_C">C</a></td> -<td><a href="index.html#definition_D">D</a></td> -<td><a href="index.html#definition_E">E</a></td> -<td><a href="index.html#definition_F">F</a></td> -<td>G</td> -<td>H</td> -<td><a href="index.html#definition_I">I</a></td> -<td><a href="index.html#definition_J">J</a></td> -<td>K</td> -<td>L</td> -<td><a href="index.html#definition_M">M</a></td> -<td><a href="index.html#definition_N">N</a></td> -<td><a href="index.html#definition_O">O</a></td> -<td><a href="index.html#definition_P">P</a></td> -<td>Q</td> -<td><a href="index.html#definition_R">R</a></td> -<td><a href="index.html#definition_S">S</a></td> -<td><a href="index.html#definition_T">T</a></td> -<td><a href="index.html#definition_U">U</a></td> -<td>V</td> -<td><a href="index.html#definition_W">W</a></td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(177 entries)</td> -</tr> -<tr> -<td>Record Index</td> -<td><a href="index.html#record_A">A</a></td> -<td>B</td> -<td>C</td> -<td>D</td> -<td><a href="index.html#record_E">E</a></td> -<td>F</td> -<td>G</td> -<td>H</td> -<td>I</td> -<td>J</td> -<td>K</td> -<td>L</td> -<td>M</td> -<td>N</td> -<td>O</td> -<td>P</td> -<td>Q</td> -<td>R</td> -<td>S</td> -<td>T</td> -<td>U</td> -<td>V</td> -<td>W</td> -<td>X</td> -<td>Y</td> -<td>Z</td> -<td>_</td> -<td>other</td> -<td>(3 entries)</td> -</tr> -</table> -<hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/interference.html b/interference.html deleted file mode 100644 index 8029e3692..000000000 --- a/interference.html +++ /dev/null @@ -1,276 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>interference</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library interference</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="priority.html#"><span class="id" type="library">priority</span></a> <a class="idref" href="workload.html#"><span class="id" type="library">workload</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a><br/> - <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a> <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="Interference"><span class="id" type="module">Interference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">ScheduleOfSporadicTask</span> <span class="id" type="var">Priority</span> <span class="id" type="var">Workload</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferingTasks"><span class="id" type="section">InterferingTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferingTasks.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="interference.html#Interference.InterferingTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferingTasks.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="interference.html#Interference.InterferingTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferingTasks.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="interference.html#Interference.InterferingTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferingTasks.FP"><span class="id" type="section">FP</span></a>.<br/> - -<br/> - <span class="comment">(* Assume an FP policy. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferingTasks.FP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> <a class="idref" href="interference.html#Interference.InterferingTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Then, tsk_other is said to interfere with tsk if it's a different<br/> - task with higher or equal priority. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.is_interfering_task_fp"><span class="id" type="definition">is_interfering_task_fp</span></a> (<span class="id" type="var">tsk</span> <span class="id" type="var">tsk_other</span>: <a class="idref" href="interference.html#Interference.InterferingTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="interference.html#Interference.InterferingTasks.FP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> <a class="idref" href="interference.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><a class="idref" href="interference.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferingTasks.FP"><span class="id" type="section">FP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferingTasks.JLFP"><span class="id" type="section">JLFP</span></a>.<br/> - -<br/> - <span class="comment">(* Under JLFP policies, any two different tasks can interfere with<br/> - each other. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.is_interfering_task_jlfp"><span class="id" type="definition">is_interfering_task_jlfp</span></a> (<span class="id" type="var">tsk</span> <span class="id" type="var">tsk_other</span>: <a class="idref" href="interference.html#Interference.InterferingTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="interference.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferingTasks.JLFP"><span class="id" type="section">JLFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferingTasks"><span class="id" type="section">InterferingTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs"><span class="id" type="section">InterferenceDefs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="interference.html#Interference.InterferenceDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="interference.html#Interference.InterferenceDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="interference.html#Interference.InterferenceDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume any job arrival sequence...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ... and any schedule. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any job j that incurs interference. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Recall the definition of backlogged (pending and not scheduled). *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="Interference.InterferenceDefs.job_is_backlogged"><span class="id" type="variable">job_is_backlogged</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="schedule.html#Schedule.backlogged"><span class="id" type="definition">backlogged</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="interference.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.TotalInterference"><span class="id" type="section">TotalInterference</span></a>.<br/> - -<br/> - <span class="comment">(* First, we define the total interference incurred by job j during <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>)</span> - <span class="inlinecode"><span class="id" type="keyword">as</span></span> <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">cumulative</span></span> <span class="inlinecode"><span class="id" type="var">time</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">which</span></span> <span class="inlinecode"><span class="id" type="var">j</span></span> <span class="inlinecode"><span class="id" type="var">is</span></span> <span class="inlinecode"><span class="id" type="var">backlogged</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">this</span></span> <span class="inlinecode"><span class="id" type="var">interval</span>.</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.total_interference"><span class="id" type="definition">total_interference</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_is_backlogged"><span class="id" type="variable">job_is_backlogged</span></a> <span class="id" type="var">t</span>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.TotalInterference"><span class="id" type="section">TotalInterference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.JobInterference"><span class="id" type="section">JobInterference</span></a>.<br/> - -<br/> - <span class="comment">(* Let job_other be a job that interferes with j. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.JobInterference.job_other"><span class="id" type="variable">job_other</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* The interference caused by job_other is defined as follows. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.job_interference"><span class="id" type="definition">job_interference</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span><br/> - <span class="id" type="notation">(</span><a class="idref" href="interference.html#Interference.InterferenceDefs.job_is_backlogged"><span class="id" type="variable">job_is_backlogged</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.JobInterference.job_other"><span class="id" type="variable">job_other</span></a> <span class="id" type="var">t</span><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.JobInterference"><span class="id" type="section">JobInterference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.TaskInterference"><span class="id" type="section">TaskInterference</span></a>.<br/> - -<br/> - <span class="comment">(* In order to define task interference, consider any interfering task tsk_other. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.TaskInterference.tsk_other"><span class="id" type="variable">tsk_other</span></a>: <a class="idref" href="interference.html#Interference.InterferenceDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.schedules_job_of_tsk"><span class="id" type="definition">schedules_job_of_tsk</span></a> (<span class="id" type="var">cpu</span>: <a class="idref" href="schedule.html#Schedule.processor"><span class="id" type="definition">processor</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.num_cpus"><span class="id" type="variable">num_cpus</span></a>) (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="keyword">match</span> (<a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#cpu"><span class="id" type="variable">cpu</span></a> <a class="idref" href="interference.html#t"><span class="id" type="variable">t</span></a>) <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">j'</span> => <a class="idref" href="interference.html#Interference.InterferenceDefs.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">j'</span> <span class="id" type="notation">==</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.TaskInterference.tsk_other"><span class="id" type="variable">tsk_other</span></a><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a> => <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a><br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> - <span class="comment">(* We know that tsk is scheduled at time t if there exists a processor<br/> - scheduling a job of tsk. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.task_is_scheduled"><span class="id" type="definition">task_is_scheduled</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">[</span><span class="id" type="notation">exists</span> <span class="id" type="var">cpu</span> <span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.processor"><span class="id" type="definition">processor</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.num_cpus"><span class="id" type="variable">num_cpus</span></a><span class="id" type="notation">,</span> <a class="idref" href="interference.html#Interference.schedules_job_of_tsk"><span class="id" type="definition">schedules_job_of_tsk</span></a> <span class="id" type="var">cpu</span> <a class="idref" href="interference.html#t"><span class="id" type="variable">t</span></a><span class="id" type="notation">]</span>.<br/> - -<br/> - <span class="comment">(* We define the total interference incurred by tsk during <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>)</span> - <span class="inlinecode"><span class="id" type="keyword">as</span></span> <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">cumulative</span></span> <span class="inlinecode"><span class="id" type="var">time</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">which</span></span> <span class="inlinecode"><span class="id" type="var">tsk</span></span> <span class="inlinecode"><span class="id" type="var">is</span></span> <span class="inlinecode"><span class="id" type="var">scheduled</span>.</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.task_interference"><span class="id" type="definition">task_interference</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span><br/> - <span class="id" type="notation">(</span><a class="idref" href="interference.html#Interference.InterferenceDefs.job_is_backlogged"><span class="id" type="variable">job_is_backlogged</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="interference.html#Interference.task_is_scheduled"><span class="id" type="definition">task_is_scheduled</span></a> <span class="id" type="var">t</span><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.TaskInterference"><span class="id" type="section">TaskInterference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.TaskInterferenceJobList"><span class="id" type="section">TaskInterferenceJobList</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.TaskInterferenceJobList.tsk_other"><span class="id" type="variable">tsk_other</span></a>: <a class="idref" href="interference.html#Interference.InterferenceDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Interference.task_interference_joblist"><span class="id" type="definition">task_interference_joblist</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">|</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">j</span> <span class="id" type="notation">==</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.TaskInterferenceJobList.tsk_other"><span class="id" type="variable">tsk_other</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.TaskInterferenceJobList"><span class="id" type="section">TaskInterferenceJobList</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Interference cannot be larger than the considered time window. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.total_interference_le_delta"><span class="id" type="lemma">total_interference_le_delta</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="interference.html#Interference.total_interference"><span class="id" type="definition">total_interference</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.job_interference_le_delta"><span class="id" type="lemma">job_interference_le_delta</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j_other</span> <span class="id" type="var">t1</span> <span class="id" type="keyword">delta</span>,<br/> - <a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <a class="idref" href="interference.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> (<a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>) <span class="id" type="notation"><=</span> <span class="id" type="keyword">delta</span>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.job_interference_le_service"><span class="id" type="lemma">job_interference_le_service</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j_other</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <a class="idref" href="interference.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.task_interference_le_workload"><span class="id" type="lemma">task_interference_le_workload</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="interference.html#Interference.task_interference"><span class="id" type="definition">task_interference</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="workload.html#Workload.workload"><span class="id" type="definition">workload</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* If we assume no intra-task parallelism, the two definitions<br/> - of interference are the same. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.EquivalenceWithPerJobInterference"><span class="id" type="section">EquivalenceWithPerJobInterference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Interference.InterferenceDefs.EquivalenceWithPerJobInterference.H_no_intratask_parallelism"><span class="id" type="variable">H_no_intratask_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel"><span class="id" type="definition">jobs_of_same_task_dont_execute_in_parallel</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.interference_eq_interference_joblist"><span class="id" type="lemma">interference_eq_interference_joblist</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="interference.html#Interference.task_interference"><span class="id" type="definition">task_interference</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference.html#Interference.task_interference_joblist"><span class="id" type="definition">task_interference_joblist</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.EquivalenceWithPerJobInterference"><span class="id" type="section">EquivalenceWithPerJobInterference</span></a>.<br/> - -<br/> - <span class="comment">(* If we don't assume intra-task parallelism, the per-job interference<br/> - bounds the actual interference. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.BoundUsingPerJobInterference"><span class="id" type="section">BoundUsingPerJobInterference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.interference_le_interference_joblist"><span class="id" type="lemma">interference_le_interference_joblist</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="interference.html#Interference.task_interference"><span class="id" type="definition">task_interference</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference.html#Interference.task_interference_joblist"><span class="id" type="definition">task_interference_joblist</span></a> <a class="idref" href="interference.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.BoundUsingPerJobInterference"><span class="id" type="section">BoundUsingPerJobInterference</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService"><span class="id" type="section">CorrespondenceWithService</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService.t1"><span class="id" type="variable">t1</span></a> <a name="Interference.InterferenceDefs.CorrespondenceWithService.t2"><span class="id" type="variable">t2</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that jobs do not execute in parallel, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService.no_parallelism"><span class="id" type="variable">no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* ..., and that jobs only execute after they arrived<br/> - and no longer than their execution costs. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService.jobs_must_arrive_to_execute"><span class="id" type="variable">jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService.completed_jobs_dont_execute"><span class="id" type="variable">completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* If job j had already arrived at time t1 and did not yet<br/> - complete by time t2, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService.job_has_arrived"><span class="id" type="variable">job_has_arrived</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.has_arrived"><span class="id" type="definition">has_arrived</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t1"><span class="id" type="variable">t1</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Interference.InterferenceDefs.CorrespondenceWithService.job_is_not_complete"><span class="id" type="variable">job_is_not_complete</span></a> :<br/> - <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* then the service received by j during <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>)</span> <span class="inlinecode"><span class="id" type="var">equals</span></span> - <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">cumulative</span></span> <span class="inlinecode"><span class="id" type="var">time</span></span> <span class="inlinecode"><span class="id" type="keyword">in</span></span> <span class="inlinecode"><span class="id" type="var">which</span></span> <span class="inlinecode"><span class="id" type="var">it</span></span> <span class="inlinecode"><span class="id" type="var">did</span></span> <span class="inlinecode"><span class="id" type="var">not</span></span> <span class="inlinecode"><span class="id" type="var">incur</span></span> <span class="inlinecode"><span class="id" type="var">interference</span>.</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Interference.complement_of_interf_equals_service"><span class="id" type="lemma">complement_of_interf_equals_service</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.j"><span class="id" type="variable">j</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference.html#Interference.total_interference"><span class="id" type="definition">total_interference</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService.t2"><span class="id" type="variable">t2</span></a>.<br/> - <span class="comment">(* Reorder terms... *)</span><br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs.CorrespondenceWithService"><span class="id" type="section">CorrespondenceWithService</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference.html#Interference.InterferenceDefs"><span class="id" type="section">InterferenceDefs</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="interference.html#"><span class="id" type="module">Interference</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/interference_bound_edf.html b/interference_bound_edf.html deleted file mode 100644 index e35fdcb61..000000000 --- a/interference_bound_edf.html +++ /dev/null @@ -1,608 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>interference_bound_edf</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library interference_bound_edf</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="platform.html#"><span class="id" type="library">platform</span></a> <a class="idref" href="interference.html#"><span class="id" type="library">interference</span></a><br/> - <a class="idref" href="workload.html#"><span class="id" type="library">workload</span></a> <a class="idref" href="workload_bound.html#"><span class="id" type="library">workload_bound</span></a> <a class="idref" href="schedulability.html#"><span class="id" type="library">schedulability</span></a> <a class="idref" href="priority.html#"><span class="id" type="library">priority</span></a> <a class="idref" href="response_time.html#"><span class="id" type="library">response_time</span></a><br/> - <a class="idref" href="bertogna_fp_theory.html#"><span class="id" type="library">bertogna_fp_theory</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">div</span> <span class="id" type="library">path</span>.<br/> - -<br/> - <span class="comment">(* In the following section, we define Bertogna and Cirinei's<br/> - EDF-specific per-task interference bound. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="EDFSpecificBound"><span class="id" type="module">EDFSpecificBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Job</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">ScheduleOfSporadicTask</span> <span class="id" type="var">Schedulability</span> <span class="id" type="var">ResponseTime</span><br/> - <span class="id" type="var">Priority</span> <span class="id" type="var">SporadicTaskArrival</span> <span class="id" type="var">Interference</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.EDFBoundDef"><span class="id" type="section">EDFBoundDef</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.EDFBoundDef.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.EDFBoundDef.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.EDFBoundDef.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Let tsk be the task to be analyzed. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.EDFBoundDef.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Consider the interference incurred by tsk in a window of length delta... *)</span><br/> - <span class="id" type="keyword">Variable</span> <span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="comment">(* due to a different task tsk_other, with response-time bound R_other. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.EDFBoundDef.tsk_other"><span class="id" type="variable">tsk_other</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.EDFBoundDef.R_other"><span class="id" type="variable">R_other</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="comment">(* Bertogna and Cirinei define the following bound for task interference<br/> - under EDF scheduling. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="EDFSpecificBound.edf_specific_interference_bound"><span class="id" type="definition">edf_specific_interference_bound</span></a> :=<br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">d_tsk</span> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">e_other</span> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">p_other</span> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">d_other</span> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.tsk_other"><span class="id" type="variable">tsk_other</span></a> <span class="id" type="keyword">in</span><br/> - <span class="id" type="notation">(</span><a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> <a class="idref" href="interference_bound_edf.html#d_tsk"><span class="id" type="variable">d_tsk</span></a> <a class="idref" href="interference_bound_edf.html#p_other"><span class="id" type="variable">p_other</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">*</span> <a class="idref" href="interference_bound_edf.html#e_other"><span class="id" type="variable">e_other</span></a> <span class="id" type="notation">+</span><br/> - <span class="id" type="definition">minn</span> <a class="idref" href="interference_bound_edf.html#e_other"><span class="id" type="variable">e_other</span></a> (<span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#d_tsk"><span class="id" type="variable">d_tsk</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="interference_bound_edf.html#p_other"><span class="id" type="variable">p_other</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#d_other"><span class="id" type="variable">d_other</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef.R_other"><span class="id" type="variable">R_other</span></a><span class="id" type="notation">)</span>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.EDFBoundDef"><span class="id" type="section">EDFBoundDef</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound"><span class="id" type="section">ProofInterferenceBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Schedule</span> <span class="id" type="var">Interference</span> <span class="id" type="var">Platform</span> <span class="id" type="var">SporadicTaskset</span>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume any job arrival sequence... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ... in which jobs arrive sporadically and have valid parameters. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_sporadic_tasks"><span class="id" type="variable">H_sporadic_tasks</span></a>:<br/> - <a class="idref" href="task_arrival.html#SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_valid_job_parameters"><span class="id" type="variable">H_valid_job_parameters</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any schedule such that...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ...jobs do not execute before their arrival times nor longer<br/> - than their execution costs. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_jobs_must_arrive_to_execute"><span class="id" type="variable">H_jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Also assume that jobs do not execute in parallel and that<br/> - there exists at least one processor. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_at_least_one_cpu"><span class="id" type="variable">H_at_least_one_cpu</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* Assume that we have a task set where all tasks have valid<br/> - parameters and restricted deadlines. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.all_jobs_from_taskset"><span class="id" type="variable">all_jobs_from_taskset</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_restricted_deadlines"><span class="id" type="variable">H_restricted_deadlines</span></a>:<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>, <a class="idref" href="interference_bound_edf.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="interference_bound_edf.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.no_deadline_is_missed_by_tsk"><span class="id" type="variable">no_deadline_is_missed_by_tsk</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.response_time_bounded_by"><span class="id" type="variable">response_time_bounded_by</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) :=<br/> - <a class="idref" href="response_time.html#ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the schedule satisfies the global scheduling invariant<br/> - for EDF, i.e., if any job of tsk is backlogged, every processor<br/> - must be busy with jobs with no larger absolute deadline. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> := @<a class="idref" href="priority.html#Priority.EDF"><span class="id" type="definition">EDF</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.Job"><span class="id" type="variable">Job</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a>. <span class="comment">(* TODO: implicit params broken *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_global_scheduling_invariant"><span class="id" type="variable">H_global_scheduling_invariant</span></a>:<br/> - <a class="idref" href="platform.html#Platform.JLFP_JLDP_scheduling_invariant_holds"><span class="id" type="definition">JLFP_JLDP_scheduling_invariant_holds</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>.<br/> - -<br/> - <span class="comment">(* Let tsk_i be the task to be analyzed, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_tsk_i_in_task_set"><span class="id" type="variable">H_tsk_i_in_task_set</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* and j_i one of its jobs. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_job_of_tsk_i"><span class="id" type="variable">H_job_of_tsk_i</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a>.<br/> - -<br/> - <span class="comment">(* Let tsk_k denote any interfering task, ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_tsk_k_in_task_set"><span class="id" type="variable">H_tsk_k_in_task_set</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* ...and R_k its response-time bound. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_R_k_le_deadline"><span class="id" type="variable">H_R_k_le_deadline</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - -<br/> - <span class="comment">(* Consider a time window of length delta <= D_i, starting with j_i's arrival time. *)</span><br/> - <span class="id" type="keyword">Variable</span> <span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_delta_le_deadline"><span class="id" type="variable">H_delta_le_deadline</span></a>: <span class="id" type="keyword">delta</span> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the jobs of tsk_k satisfy the response-time bound before the end of the interval *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.H_all_previous_jobs_completed_on_time"><span class="id" type="variable">H_all_previous_jobs_completed_on_time</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j_k</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#j_k"><span class="id" type="variable">j_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> -><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#j_k"><span class="id" type="variable">j_k</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span> -><br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#j_k"><span class="id" type="variable">j_k</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#j_k"><span class="id" type="variable">j_k</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>).<br/> - -<br/> - <span class="comment">(* In this section, we prove that Bertogna and Cirinei's EDF interference bound<br/> - indeed bounds the interference caused by task tsk_k in the interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t1</span></span> <span class="inlinecode">+</span> <span class="inlinecode"><span class="id" type="keyword">delta</span>).</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="comment">(* Let's call x the task interference incurred by job j due to tsk_k. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.x"><span class="id" type="variable">x</span></a> :=<br/> - <a class="idref" href="interference.html#Interference.task_interference"><span class="id" type="definition">task_interference</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a>) (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>).<br/> - -<br/> - <span class="comment">(* Also, recall the EDF-specific interference bound for EDF. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound"><span class="id" type="variable">interference_bound</span></a> :=<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.edf_specific_interference_bound"><span class="id" type="definition">edf_specific_interference_bound</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>.<br/> - -<br/> - <span class="comment">(* Let's simplify the names a bit. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> := <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> := <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> := <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> := <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a>.<br/> - -<br/> - <span class="comment">(* Identify the subset of jobs that actually cause interference *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a> :=<br/> - <span class="id" type="definition">filter</span> (<span class="id" type="keyword">fun</span> (<span class="id" type="var">x</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>) =><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">==</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <a class="idref" href="interference_bound_edf.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a>)<br/> - (<a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>).<br/> - -<br/> - <span class="comment">(* Let's give a simpler name to job interference. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> := <a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a>.<br/> - -<br/> - <span class="comment">(* Now, consider the list of interfering jobs sorted by arrival time. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.order"><span class="id" type="variable">order</span></a> := <span class="id" type="keyword">fun</span> (<span class="id" type="var">x</span> <span class="id" type="var">y</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>) => <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#y"><span class="id" type="variable">y</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> := (<span class="id" type="definition">sort</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.order"><span class="id" type="variable">order</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a>).<br/> - -<br/> - <span class="comment">(* Now we proceed with the proof.<br/> - The first step consists in simplifying the sum corresponding to the workload. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.SimplifyJobSequence"><span class="id" type="section">SimplifyJobSequence</span></a>.<br/> - -<br/> - <span class="comment">(* Use the alternative definition of task interference, based on<br/> - individual job interference. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_use_another_definition"><span class="id" type="lemma">interference_bound_edf_use_another_definition</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><=</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">|</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">j</span> <span class="id" type="notation">==</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Remove the elements that we don't care about from the sum *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_simpl_by_filtering_interfering_jobs"><span class="id" type="lemma">interference_bound_edf_simpl_by_filtering_interfering_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">|</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">j</span> <span class="id" type="notation">==</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Then, we consider the sum over the sorted sequence of jobs. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_simpl_by_sorting_interfering_jobs"><span class="id" type="lemma">interference_bound_edf_simpl_by_sorting_interfering_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Note that both sequences have the same set of elements. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_job_in_same_sequence"><span class="id" type="lemma">interference_bound_edf_job_in_same_sequence</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="comment">(* Also recall that all jobs in the sorted sequence is an interfering job of tsk_k, ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_all_jobs_from_tsk_k"><span class="id" type="lemma">interference_bound_edf_all_jobs_from_tsk_k</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span>,<br/> - <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> -><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* ...and consecutive jobs are ordered by arrival. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_jobs_ordered_by_arrival"><span class="id" type="lemma">interference_bound_edf_jobs_ordered_by_arrival</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">i</span> <span class="id" type="var">elem</span>,<br/> - <a class="idref" href="interference_bound_edf.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><span class="id" type="notation">).-1</span> -><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.order"><span class="id" type="variable">order</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="interference_bound_edf.html#elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="interference_bound_edf.html#i"><span class="id" type="variable">i</span></a>) (<span class="id" type="definition">nth</span> <a class="idref" href="interference_bound_edf.html#elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="interference_bound_edf.html#i"><span class="id" type="variable">i</span></a><span class="id" type="notation">.+1</span>).<br/> - -<br/> - <span class="comment">(* Also, for any job of task tsk_k, the interference is bounded by the task cost. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_interference_le_task_cost"><span class="id" type="lemma">interference_bound_edf_interference_le_task_cost</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> (<span class="id" type="var">INi</span>: <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a>),<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.SimplifyJobSequence"><span class="id" type="section">SimplifyJobSequence</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we prove some facts relating job deadlines and interference under EDF.*)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.FactsAboutEDF"><span class="id" type="section">FactsAboutEDF</span></a>.<br/> - -<br/> - <span class="comment">(* Under EDF scheduling, a job only causes interference if its deadline<br/> - is not larger than the deadline of the analyzed job. <br/> - TODO: Should this be in the interference.v file? *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_under_edf_implies_shorter_deadlines"><span class="id" type="lemma">interference_under_edf_implies_shorter_deadlines</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span> <span class="id" type="var">j'</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>) <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#j'"><span class="id" type="variable">j'</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="interference_bound_edf.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 -><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#j'"><span class="id" type="variable">j'</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#j'"><span class="id" type="variable">j'</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.FactsAboutEDF"><span class="id" type="section">FactsAboutEDF</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we show that if the number of jobs is no larger than n_k,<br/> - the workload bound trivially holds. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs"><span class="id" type="section">InterferenceFewJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs.H_few_jobs"><span class="id" type="variable">H_few_jobs</span></a>: <span class="id" type="definition">size</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_at_most_n_k_jobs"><span class="id" type="lemma">interference_bound_edf_holds_for_at_most_n_k_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <span class="id" type="var">j</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound"><span class="id" type="variable">interference_bound</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceFewJobs"><span class="id" type="section">InterferenceFewJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Otherwise, assume that the number of jobs is larger than n_k >= 0. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs"><span class="id" type="section">InterferenceManyJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.H_many_jobs"><span class="id" type="variable">H_many_jobs</span></a>: <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> <span class="id" type="notation"><</span> <span class="id" type="definition">size</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a>.<br/> - -<br/> - <span class="comment">(* This trivially implies that there's at least one job. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_at_least_one_job"><span class="id" type="lemma">interference_bound_edf_at_least_one_job</span></a>: <span class="id" type="definition">size</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* Let j_fst be the first job, and a_fst its arrival time. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem"><span class="id" type="variable">elem</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> := <span class="id" type="definition">nth</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> 0.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> := <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove some basic lemmas about j_fst. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.FactsAboutFirstJob"><span class="id" type="section">FactsAboutFirstJob</span></a>.<br/> - -<br/> - <span class="comment">(* The first job is an interfering job of task tsk_k. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_fst_is_job_of_tsk_k"><span class="id" type="lemma">interference_bound_edf_j_fst_is_job_of_tsk_k</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* The deadline of j_fst is the deadline of tsk_k. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_fst_deadline"><span class="id" type="lemma">interference_bound_edf_j_fst_deadline</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - -<br/> - <span class="comment">(* The deadline of j_i is the deadline of tsk_i. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_i_deadline"><span class="id" type="lemma">interference_bound_edf_j_i_deadline</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_i"><span class="id" type="variable">tsk_i</span></a>.<br/> - -<br/> - <span class="comment">(* If j_fst completes by its response-time bound, then t1 <= a_fst + R_k,<br/> - where t1 is the beginning of the time window (arrival of j_i). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval"><span class="id" type="lemma">interference_bound_edf_j_fst_completion_implies_rt_bound_inside_interval</span></a> :<br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> (<a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>) -><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.FactsAboutFirstJob"><span class="id" type="section">FactsAboutFirstJob</span></a>.<br/> - -<br/> - <span class="comment">(* Now, let's prove the interference bound for the particular case of a single job.<br/> - This case must be solved separately because the single job can symultaneously<br/> - be carry-in and carry-out job, so its response time is not necessarily<br/> - bounded by R_k (from the hypothesis H_all_previous_jobs_completed_on_time). *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob"><span class="id" type="section">InterferenceSingleJob</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that there's at least one job in the sorted list. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.H_only_one_job"><span class="id" type="variable">H_only_one_job</span></a>: <span class="id" type="definition">size</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 1.<br/> - -<br/> - <span class="comment">(* Since there's only one job, we simplify the terms in the interference bound. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_simpl_when_there's_one_job"><span class="id" type="lemma">interference_bound_edf_simpl_when_there's_one_job</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="comment">(* Next, we show that if j_fst completes by its response-time bound R_k,<br/> - then then interference bound holds. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded"><span class="id" type="section">ResponseTimeOfSingleJobBounded</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded.H_j_fst_completed_by_rt_bound"><span class="id" type="variable">H_j_fst_completed_by_rt_bound</span></a> :<br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> (<a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>).<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_single_job_that_completes_on_time"><span class="id" type="lemma">interference_bound_edf_holds_for_single_job_that_completes_on_time</span></a> :<br/> - <a class="idref" href="interference.html#Interference.job_interference"><span class="id" type="definition">job_interference</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobBounded"><span class="id" type="section">ResponseTimeOfSingleJobBounded</span></a>.<br/> - -<br/> - <span class="comment">(* Else, if j_fst did not complete by its response-time bound, then<br/> - we need a separate proof. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded"><span class="id" type="section">ResponseTimeOfSingleJobNotBounded</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded.H_j_fst_not_complete_by_rt_bound"><span class="id" type="variable">H_j_fst_not_complete_by_rt_bound</span></a> :<br/> - <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> (<a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>).<br/> - -<br/> - <span class="comment">(* This trivially implies that a_fst + R_k lies after the end of the interval,<br/> - otherwise j_fst would have completed by its response-time bound. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_response_time_bound_of_j_fst_after_interval"><span class="id" type="lemma">interference_bound_edf_response_time_bound_of_j_fst_after_interval</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.j_i"><span class="id" type="variable">j_i</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>.<br/> - -<br/> - <span class="comment">(* If the slack is too big (D_i < D_k - R_k), j_fst causes no interference. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_big_slack"><span class="id" type="lemma">interference_bound_edf_holds_for_single_job_with_big_slack</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> -><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* Else, if the slack is small, j_fst causes interference for no longer than<br/> - D_i - (D_k - R_k). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_single_job_with_small_slack"><span class="id" type="lemma">interference_bound_edf_holds_for_single_job_with_small_slack</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> -><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob.ResponseTimeOfSingleJobNotBounded"><span class="id" type="section">ResponseTimeOfSingleJobNotBounded</span></a>.<br/> - -<br/> - <span class="comment">(* By combining the results above, we prove that the interference caused by the single job<br/> - is bounded by D_i - (D_k - R_k), ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_slack"><span class="id" type="lemma">interference_bound_edf_interference_of_j_fst_limited_by_slack</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="comment">(* ... and thus the interference bound holds. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_a_single_job"><span class="id" type="lemma">interference_bound_edf_holds_for_a_single_job</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound"><span class="id" type="variable">interference_bound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceSingleJob"><span class="id" type="section">InterferenceSingleJob</span></a>.<br/> - -<br/> - <span class="comment">(* Next, consider the other case where there are at least two jobs:<br/> - the first job j_fst, and the last job j_lst. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs"><span class="id" type="section">InterferenceTwoOrMoreJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Assume there are at least two jobs. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.H_at_least_two_jobs"><span class="id" type="variable">H_at_least_two_jobs</span></a> : <span class="id" type="definition">size</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+2</span>.<br/> - -<br/> - <span class="comment">(* Let j_lst be the last job of the sequence and a_lst its arrival time. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> := <span class="id" type="definition">nth</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span>.<br/> - <span class="id" type="keyword">Let</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst"><span class="id" type="variable">a_lst</span></a> := <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove some basic lemmas about the first and last jobs. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.FactsAboutFirstAndLastJobs"><span class="id" type="section">FactsAboutFirstAndLastJobs</span></a>.<br/> - -<br/> - <span class="comment">(* The last job is an interfering job of task tsk_k. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_lst_is_job_of_tsk_k"><span class="id" type="lemma">interference_bound_edf_j_lst_is_job_of_tsk_k</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* The deadline of j_lst is the deadline of tsk_k. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_lst_deadline"><span class="id" type="lemma">interference_bound_edf_j_lst_deadline</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - -<br/> - <span class="comment">(* The first job arrives before the last job. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_fst_before_j_lst"><span class="id" type="lemma">interference_bound_edf_j_fst_before_j_lst</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a>.<br/> - -<br/> - <span class="comment">(* The last job arrives before the end of the interval. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_last_job_arrives_before_end_of_interval"><span class="id" type="lemma">interference_bound_edf_last_job_arrives_before_end_of_interval</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Since there are multiple jobs, j_fst is far enough from the end of<br/> - the interval that its response-time bound is valid<br/> - (by the assumption H_all_previous_jobs_completed_on_time). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_j_fst_completed_on_time"><span class="id" type="lemma">interference_bound_edf_j_fst_completed_on_time</span></a> :<br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> (<a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a>).<br/> - Since jobs are sporadic, we know that the first job arrives<br/> - at least p_k units before the second. *)</span><br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.FactsAboutFirstAndLastJobs"><span class="id" type="section">FactsAboutFirstAndLastJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we prove that the distance between the first and last jobs is at least<br/> - num_mid_jobs + 1 periods. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_many_periods_in_between"><span class="id" type="lemma">interference_bound_edf_many_periods_in_between</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst"><span class="id" type="variable">a_lst</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span> <span class="id" type="notation">*</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a>.<br/> - <span class="comment">(* To simplify, call the jobs 'cur' and 'next' *)</span><br/> - <span class="comment">(* Show that cur arrives earlier than next *)</span><br/> - <span class="comment">(* Show that both cur and next are in the arrival sequence *)</span><br/> - <span class="comment">(* Use the sporadic task model to conclude that cur and next are separated<br/> - by at least (task_period tsk) units. Of course this only holds if cur != next.<br/> - Since we don't know much about the list (except that it's sorted), we must<br/> - also prove that it doesn't contain duplicates. *)</span><br/> - -<br/> - <span class="comment">(* Using the lemma above, we prove that the ratio n_k is at least the number of<br/> - middle jobs + 1, ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_n_k_covers_middle_jobs_plus_one"><span class="id" type="lemma">interference_bound_edf_n_k_covers_middle_jobs_plus_one</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span>.<br/> - -<br/> - <span class="comment">(* ... which allows bounding the interference of the middle and last jobs<br/> - using n_k multiplied by the cost. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_middle_and_last_jobs"><span class="id" type="lemma">interference_bound_edf_holds_for_middle_and_last_jobs</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="var">i</span><span class="id" type="notation">.+1</span>) <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a><br/> - <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> <span class="id" type="notation">*</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.tsk_k"><span class="id" type="variable">tsk_k</span></a>.<br/> - <span class="comment">(* Now, since n_k < sorted_jobs = num_mid_jobs + 2, it follows that<br/> - n_k = num_mid_jobs + 1. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_n_k_equals_num_mid_jobs_plus_one"><span class="id" type="lemma">interference_bound_edf_n_k_equals_num_mid_jobs_plus_one</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span>.<br/> - -<br/> - <span class="comment">(* After proving the bounds of the middle and last jobs, we do the same for<br/> - the first job. This requires a different proof in order to exploit the slack. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.InterferenceOfFirstJob"><span class="id" type="section">InterferenceOfFirstJob</span></a>.<br/> - -<br/> - <span class="comment">(* As required by the next lemma, in order to move (D_i % p_k) to the left of<br/> - the inequality (<=), we must show that it is no smaller than the slack. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_remainder_ge_slack"><span class="id" type="lemma">interference_bound_edf_remainder_ge_slack</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a>.<br/> - -<br/> - <span class="comment">(* To conclude that the interference bound holds, it suffices to show that<br/> - this reordered inequality holds. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_simpl_by_moving_to_left_side"><span class="id" type="lemma">interference_bound_edf_simpl_by_moving_to_left_side</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation">*</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> -><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="comment">(* Next, we prove that interference caused by j_fst is bounded by the length<br/> - of the interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">a_fst</span></span> <span class="inlinecode">+</span> <span class="inlinecode"><span class="id" type="var">R_k</span>),</span> <span class="inlinecode">...</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_interference_of_j_fst_bounded_by_response_time"><span class="id" type="lemma">interference_bound_edf_interference_of_j_fst_bounded_by_response_time</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span> 1.<br/> - <span class="comment">(* ..., which leads to the following bounds based on interval lengths. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_bounding_interference_with_interval_lengths"><span class="id" type="lemma">interference_bound_edf_bounding_interference_with_interval_lengths</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation">*</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation"><=</span><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span> 1<br/> - <span class="id" type="notation">+</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a><span class="id" type="notation">)</span> 1<br/> - <span class="id" type="notation">+</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst"><span class="id" type="variable">a_lst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a><span class="id" type="notation">)</span> 1.<br/> - -<br/> - <span class="comment">(* To conclude, we show that the concatenation of these interval lengths equals<br/> - (a_lst + D_k) - 1, ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_simpl_by_concatenation_of_intervals"><span class="id" type="lemma">interference_bound_edf_simpl_by_concatenation_of_intervals</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span> 1<br/> - <span class="id" type="notation">+</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a><span class="id" type="notation">)</span> 1<br/> - <span class="id" type="notation">+</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.a_fst"><span class="id" type="variable">a_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst"><span class="id" type="variable">a_lst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a><span class="id" type="notation">)</span> 1 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.a_lst"><span class="id" type="variable">a_lst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a>.<br/> - -<br/> - <span class="comment">(* ... which results in proving that (a_lst + D_k) - t1 <= D_i.<br/> - This holds because high-priority jobs have earlier deadlines. Therefore,<br/> - the interference caused by the first job is bounded by D_i % p_k - (D_k - R_k). *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_interference_of_j_fst_limited_by_remainder_and_slack"><span class="id" type="lemma">interference_bound_edf_interference_of_j_fst_limited_by_remainder_and_slack</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_i"><span class="id" type="variable">D_i</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.p_k"><span class="id" type="variable">p_k</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.D_k"><span class="id" type="variable">D_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.R_k"><span class="id" type="variable">R_k</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.InterferenceOfFirstJob"><span class="id" type="section">InterferenceOfFirstJob</span></a>.<br/> - -<br/> - <span class="comment">(* Using the lemmas above we show that the interference bound works in the<br/> - case of two or more jobs. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="EDFSpecificBound.interference_bound_edf_holds_for_multiple_jobs"><span class="id" type="lemma">interference_bound_edf_holds_for_multiple_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+2</span><span class="id" type="notation">)</span><br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_caused_by"><span class="id" type="variable">interference_caused_by</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="var">i</span>) <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound"><span class="id" type="variable">interference_bound</span></a>.<br/> - <span class="comment">(* Knowing that we have at least two elements, we take first and last out of the sum *)</span><br/> - <span class="comment">(* We use the lemmas we proved to show that the interference bound holds. *)</span><br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs.InterferenceTwoOrMoreJobs"><span class="id" type="section">InterferenceTwoOrMoreJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.InterferenceManyJobs"><span class="id" type="section">InterferenceManyJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Theorem</span> <a name="EDFSpecificBound.interference_bound_edf_bounds_interference"><span class="id" type="lemma">interference_bound_edf_bounds_interference</span></a> :<br/> - <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof.interference_bound"><span class="id" type="variable">interference_bound</span></a>.<br/> - <span class="comment">(* Use the definition of workload based on list of jobs. *)</span><br/> - <span class="comment">(* We only care about the jobs that cause interference. *)</span><br/> - <span class="comment">(* Now we order the list by job arrival time. *)</span><br/> - <span class="comment">(* Next, we show that the workload bound holds if n_k<br/> - is no larger than the number of interferings jobs. *)</span><br/> - <span class="comment">(* Find some dummy element to use in the nth function *)</span><br/> - <span class="comment">(* Now we index the sum to access the first and last elements. *)</span><br/> - <span class="comment">(* First, we show that the bound holds for an empty list of jobs. *)</span><br/> - <span class="comment">(* Then, we show the same for a single job, or for multiple jobs. *)</span><br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#EDFSpecificBound.ProofInterferenceBound"><span class="id" type="section">ProofInterferenceBound</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="interference_bound_edf.html#"><span class="id" type="module">EDFSpecificBound</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/job.html b/job.html deleted file mode 100644 index 5d55aaa22..000000000 --- a/job.html +++ /dev/null @@ -1,157 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>job</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library job</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a> <span class="id" type="library">ssrnat</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span>.<br/> - -<br/> -<span class="comment">(* Properties of different types of job: *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="Job"><span class="id" type="module">Job</span></a>.<br/> - -<br/> - <span class="comment">(* 1) Basic Job *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Job.ValidJob"><span class="id" type="section">ValidJob</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidJob.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="job.html#Job.ValidJob.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidJob.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="job.html#Job.ValidJob.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* The job cost must be positive. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Job.job_cost_positive"><span class="id" type="definition">job_cost_positive</span></a> (<span class="id" type="var">j</span>: <a class="idref" href="job.html#Job.ValidJob.Job"><span class="id" type="variable">Job</span></a>) := <a class="idref" href="job.html#Job.ValidJob.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="job.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="job.html#Job.ValidJob"><span class="id" type="section">ValidJob</span></a>.<br/> - -<br/> - <span class="comment">(* 2) real-time job (with a deadline) *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Job.ValidRealtimeJob"><span class="id" type="section">ValidRealtimeJob</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidRealtimeJob.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="job.html#Job.ValidRealtimeJob.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidRealtimeJob.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="job.html#Job.ValidRealtimeJob.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidRealtimeJob.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="job.html#Job.ValidRealtimeJob.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* The job deadline must be positive and no less than its cost. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Job.job_deadline_positive"><span class="id" type="definition">job_deadline_positive</span></a> := <a class="idref" href="job.html#Job.ValidRealtimeJob.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="job.html#Job.ValidRealtimeJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">></span> 0.<br/> - <span class="id" type="keyword">Definition</span> <a name="Job.job_cost_le_deadline"><span class="id" type="definition">job_cost_le_deadline</span></a> := <a class="idref" href="job.html#Job.ValidRealtimeJob.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="job.html#Job.ValidRealtimeJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="job.html#Job.ValidRealtimeJob.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="job.html#Job.ValidRealtimeJob.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Job.valid_realtime_job"><span class="id" type="definition">valid_realtime_job</span></a> :=<br/> - <a class="idref" href="job.html#Job.job_cost_positive"><span class="id" type="definition">job_cost_positive</span></a> <a class="idref" href="job.html#Job.ValidRealtimeJob.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="job.html#Job.ValidRealtimeJob.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="job.html#Job.job_cost_le_deadline"><span class="id" type="definition">job_cost_le_deadline</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="job.html#Job.job_deadline_positive"><span class="id" type="definition">job_deadline_positive</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="job.html#Job.ValidRealtimeJob"><span class="id" type="section">ValidRealtimeJob</span></a>.<br/> - -<br/> - <span class="comment">(* 3) Job of sporadic task *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Job.ValidSporadicTaskJob"><span class="id" type="section">ValidSporadicTaskJob</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJob.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJob.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJob.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJob.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJob.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJob.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJob.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJob.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJob.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJob.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJob.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJob.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* The job cost cannot be larger than the task cost. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Job.job_cost_le_task_cost"><span class="id" type="definition">job_cost_le_task_cost</span></a> :=<br/> - <a class="idref" href="job.html#Job.ValidSporadicTaskJob.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.task_cost"><span class="id" type="variable">task_cost</span></a> (<a class="idref" href="job.html#Job.ValidSporadicTaskJob.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.j"><span class="id" type="variable">j</span></a>).<br/> - -<br/> - <span class="comment">(* The job deadline must be equal to the task deadline. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Job.job_deadline_eq_task_deadline"><span class="id" type="definition">job_deadline_eq_task_deadline</span></a> :=<br/> - <a class="idref" href="job.html#Job.ValidSporadicTaskJob.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.task_deadline"><span class="id" type="variable">task_deadline</span></a> (<a class="idref" href="job.html#Job.ValidSporadicTaskJob.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.j"><span class="id" type="variable">j</span></a>).<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> :=<br/> - <a class="idref" href="job.html#Job.valid_realtime_job"><span class="id" type="definition">valid_realtime_job</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJob.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="job.html#Job.job_cost_le_task_cost"><span class="id" type="definition">job_cost_le_task_cost</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="job.html#Job.job_deadline_eq_task_deadline"><span class="id" type="definition">job_deadline_eq_task_deadline</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="job.html#Job.ValidSporadicTaskJob"><span class="id" type="section">ValidSporadicTaskJob</span></a>.<br/> - -<br/> - <span class="comment">(* 4) Job of sporadic task with jitter *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Job.ValidSporadicTaskJobWithJitter"><span class="id" type="section">ValidSporadicTaskJobWithJitter</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.task_jitter"><span class="id" type="variable">task_jitter</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.job_jitter"><span class="id" type="variable">job_jitter</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Job.ValidSporadicTaskJobWithJitter.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* The job jitter cannot be larger than the task (maximum) jitter.*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Job.job_jitter_leq_task_jitter"><span class="id" type="definition">job_jitter_leq_task_jitter</span></a> :=<br/> - <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.job_jitter"><span class="id" type="variable">job_jitter</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.task_jitter"><span class="id" type="variable">task_jitter</span></a> (<a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.j"><span class="id" type="variable">j</span></a>).<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="Job.ValidSporadicTaskJobWithJitter.j_is_valid_job"><span class="id" type="variable">j_is_valid_job</span></a> :=<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Job.valid_sporadic_job_with_jitter"><span class="id" type="definition">valid_sporadic_job_with_jitter</span></a> :=<br/> - <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter.j_is_valid_job"><span class="id" type="variable">j_is_valid_job</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="job.html#Job.job_jitter_leq_task_jitter"><span class="id" type="definition">job_jitter_leq_task_jitter</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="job.html#Job.ValidSporadicTaskJobWithJitter"><span class="id" type="section">ValidSporadicTaskJobWithJitter</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="job.html#"><span class="id" type="module">Job</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/platform.html b/platform.html deleted file mode 100644 index 08fc00139..000000000 --- a/platform.html +++ /dev/null @@ -1,170 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>platform</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library platform</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="priority.html#"><span class="id" type="library">priority</span></a> <a class="idref" href="interference.html#"><span class="id" type="library">interference</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">ssrfun</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="Platform"><span class="id" type="module">Platform</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">ScheduleOfSporadicTask</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">Interference</span> <span class="id" type="var">Priority</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Platform.SchedulingInvariants"><span class="id" type="section">SchedulingInvariants</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assume any job arrival sequence... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* Consider any schedule. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that we have a task set where all tasks have valid<br/> - parameters and restricted deadlines. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Platform.SchedulingInvariants.FP"><span class="id" type="section">FP</span></a>.<br/> - -<br/> - <span class="comment">(* Given an FP policy, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.FP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* the global scheduling invariant states that if a job is<br/> - backlogged, then all the processors are busy with jobs<br/> - of higher-priority tasks. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Platform.FP_scheduling_invariant_holds"><span class="id" type="definition">FP_scheduling_invariant_holds</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">tsk</span>: <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.arr_seq"><span class="id" type="variable">arr_seq</span></a>) (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>),<br/> - <a class="idref" href="platform.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants.ts"><span class="id" type="variable">ts</span></a> -><br/> - <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="platform.html#tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.backlogged"><span class="id" type="definition">backlogged</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> -><br/> - <span class="id" type="definition">count</span><br/> - (<span class="id" type="keyword">fun</span> <span class="id" type="var">tsk_other</span> : <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> =><br/> - <a class="idref" href="interference.html#Interference.is_interfering_task_fp"><span class="id" type="definition">is_interfering_task_fp</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.FP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> <a class="idref" href="platform.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="platform.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a><br/> - <a class="idref" href="interference.html#Interference.task_is_scheduled"><span class="id" type="definition">task_is_scheduled</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#tsk_other"><span class="id" type="variable">tsk_other</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a>) <a class="idref" href="platform.html#Platform.SchedulingInvariants.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants.FP"><span class="id" type="section">FP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Platform.SchedulingInvariants.JLDP"><span class="id" type="section">JLDP</span></a>.<br/> - -<br/> - <span class="comment">(* Given a JLFP/JLDP policy, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Platform.SchedulingInvariants.JLDP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a>: <a class="idref" href="priority.html#Priority.jldp_policy"><span class="id" type="definition">jldp_policy</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ... the global scheduling invariant states that at any time t,<br/> - if a job J is backlogged, then all processors are busy with<br/> - jobs of higher-priority. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Platform.JLFP_JLDP_scheduling_invariant_holds"><span class="id" type="definition">JLFP_JLDP_scheduling_invariant_holds</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.arr_seq"><span class="id" type="variable">arr_seq</span></a>) (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>),<br/> - <a class="idref" href="schedule.html#Schedule.backlogged"><span class="id" type="definition">backlogged</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> -><br/> - <span class="id" type="definition">count</span><br/> - (<span class="id" type="keyword">fun</span> <span class="id" type="var">j_other</span> => <a class="idref" href="platform.html#Platform.SchedulingInvariants.JLDP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="platform.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a>)<br/> - (<a class="idref" href="schedule.html#Schedule.jobs_scheduled_at"><span class="id" type="definition">jobs_scheduled_at</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a>)<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Platform.SchedulingInvariants.JLDP.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Platform.SchedulingInvariants.JLDP.BasicLemmas.H_invariant_holds"><span class="id" type="variable">H_invariant_holds</span></a> :<br/> - <a class="idref" href="platform.html#Platform.JLFP_JLDP_scheduling_invariant_holds"><span class="id" type="definition">JLFP_JLDP_scheduling_invariant_holds</span></a>.<br/> - -<br/> - <span class="comment">(* The job which is interfering has higher or equal priority to the interfered one. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Platform.interfering_job_has_higher_eq_prio"><span class="id" type="lemma">interfering_job_has_higher_eq_prio</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> <span class="id" type="var">j_other</span> <span class="id" type="var">t</span>,<br/> - <a class="idref" href="schedule.html#Schedule.backlogged"><span class="id" type="definition">backlogged</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> -><br/> - <a class="idref" href="platform.html#Platform.SchedulingInvariants.JLDP.higher_eq_priority"><span class="id" type="variable">higher_eq_priority</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="platform.html#j_other"><span class="id" type="variable">j_other</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the task set has no duplicates. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Platform.SchedulingInvariants.JLDP.BasicLemmas.H_ts_is_a_set"><span class="id" type="variable">H_ts_is_a_set</span></a>: <span class="id" type="definition">uniq</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants.ts"><span class="id" type="variable">ts</span></a>.<br/> - -<br/> - <span class="comment">(* Assume all jobs are from the taskset, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Platform.SchedulingInvariants.JLDP.BasicLemmas.H_all_jobs_from_taskset"><span class="id" type="variable">H_all_jobs_from_taskset</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.arr_seq"><span class="id" type="variable">arr_seq</span></a>), <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants.ts"><span class="id" type="variable">ts</span></a>.<br/> - <span class="comment">(* ..., a single job does not execute in parallel, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="comment">(* ... and jobs from the same task do not execute in parallel. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Platform.SchedulingInvariants.JLDP.BasicLemmas.H_no_intra_task_parallelism"><span class="id" type="variable">H_no_intra_task_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel"><span class="id" type="definition">jobs_of_same_task_dont_execute_in_parallel</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Platform.scheduled_jobs_unique"><span class="id" type="lemma">scheduled_jobs_unique</span></a> :<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> -><br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>,<br/> - <span class="id" type="definition">uniq</span> (<a class="idref" href="schedule.html#Schedule.jobs_scheduled_at"><span class="id" type="definition">jobs_scheduled_at</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a>).<br/> - <span class="comment">(* If a job isn't scheduled, the processor are busy with interfering tasks. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Platform.cpus_busy_with_interfering_tasks"><span class="id" type="lemma">cpus_busy_with_interfering_tasks</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.arr_seq"><span class="id" type="variable">arr_seq</span></a>) <span class="id" type="var">tsk</span> <span class="id" type="var">t</span>,<br/> - <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="platform.html#tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.backlogged"><span class="id" type="definition">backlogged</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a> -><br/> - <span class="id" type="definition">count</span><br/> - (<span class="id" type="keyword">fun</span> <span class="id" type="var">j</span> : <a class="idref" href="platform.html#Platform.SchedulingInvariants.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> =><br/> - <a class="idref" href="interference.html#Interference.is_interfering_task_jlfp"><span class="id" type="definition">is_interfering_task_jlfp</span></a> <a class="idref" href="platform.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a><br/> - <a class="idref" href="interference.html#Interference.task_is_scheduled"><span class="id" type="definition">task_is_scheduled</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="platform.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="platform.html#t"><span class="id" type="variable">t</span></a>)<br/> - <a class="idref" href="platform.html#Platform.SchedulingInvariants.ts"><span class="id" type="variable">ts</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="platform.html#Platform.SchedulingInvariants.num_cpus"><span class="id" type="variable">num_cpus</span></a>.<br/> - <span class="comment">(* This requires further assumptions. *)</span><br/> -<span class="comment">(* This requires further assumptions. *)</span><br/> - <span class="id" type="keyword">End</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants.JLDP.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants.JLDP"><span class="id" type="section">JLDP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="platform.html#Platform.SchedulingInvariants"><span class="id" type="section">SchedulingInvariants</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="platform.html#"><span class="id" type="module">Platform</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/priority.html b/priority.html deleted file mode 100644 index 9310caf83..000000000 --- a/priority.html +++ /dev/null @@ -1,227 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>priority</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library priority</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span>.<br/> -<span class="id" type="keyword">Set Implicit Arguments</span>.<br/> - -<br/> -<span class="comment">(* Definitions of FP and JLFP/JLDP priority relations. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="Priority"><span class="id" type="module">Priority</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">SporadicTask</span> <span class="id" type="var">Schedule</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.PriorityDefs"><span class="id" type="section">PriorityDefs</span></a>.<br/> - -<br/> - <span class="comment">(* Assume a given job arrival sequence. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.PriorityDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="priority.html#Priority.PriorityDefs.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* In the following, we define all priority relations as non-strict, i.e., they specify that<br/> - "job_high has higher priority than (or the same priority as) job_low". *)</span><br/> - -<br/> - <span class="comment">(* A JLDP policy is a generic relation between two jobs of an arrival sequence<br/> - that can vary with time. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.jldp_policy"><span class="id" type="definition">jldp_policy</span></a> := <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a> -> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="priority.html#Priority.PriorityDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a> -> <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="priority.html#Priority.PriorityDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>.<br/> - -<br/> - <span class="comment">(* FP policy is simply a relation between tasks.<br/> - Because our model of processor platform is based on a generic JLDP policy,<br/> - we generate a JLDP policy from an FP policy whenever required. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.PriorityDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>: <span class="id" type="abbreviation">eqType</span>.<br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> := <a class="idref" href="priority.html#Priority.PriorityDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="priority.html#Priority.PriorityDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.PriorityDefs.ValidJLFPPolicy"><span class="id" type="section">ValidJLFPPolicy</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a>: <a class="idref" href="priority.html#Priority.jldp_policy"><span class="id" type="definition">jldp_policy</span></a>.<br/> - -<br/> - <span class="comment">(* A policy is reflexive, since a job has the same priority as itself. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.jlfp_is_reflexive"><span class="id" type="definition">jlfp_is_reflexive</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>, <span class="id" type="definition">reflexive</span> (<a class="idref" href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a> <a class="idref" href="priority.html#t"><span class="id" type="variable">t</span></a>).<br/> - -<br/> - <span class="comment">(* A policy is transitive. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.jlfp_is_transitive"><span class="id" type="definition">jlfp_is_transitive</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>, <span class="id" type="definition">transitive</span> (<a class="idref" href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a> <a class="idref" href="priority.html#t"><span class="id" type="variable">t</span></a>).<br/> - -<br/> - <span class="comment">(* A policy is total, since it must know the priority of any two jobs at any time. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.jlfp_is_total"><span class="id" type="definition">jlfp_is_total</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>, <span class="id" type="definition">total</span> (<a class="idref" href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a> <a class="idref" href="priority.html#t"><span class="id" type="variable">t</span></a>).<br/> - -<br/> - <span class="comment">(* A JLDP policy is valid iff it satisfies the three properties.<br/> - Note that, for generality, we don't enforce antisymmetry and allow multiple<br/> - jobs with same priority. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.valid_jldp_policy"><span class="id" type="definition">valid_jldp_policy</span></a> :=<br/> - <a class="idref" href="priority.html#Priority.jlfp_is_reflexive"><span class="id" type="definition">jlfp_is_reflexive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="priority.html#Priority.jlfp_is_transitive"><span class="id" type="definition">jlfp_is_transitive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="priority.html#Priority.jlfp_is_total"><span class="id" type="definition">jlfp_is_total</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.PriorityDefs.ValidJLFPPolicy"><span class="id" type="section">ValidJLFPPolicy</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.PriorityDefs.ValidFPPolicy"><span class="id" type="section">ValidFPPolicy</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.PriorityDefs.ValidFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.fp_is_reflexive"><span class="id" type="definition">fp_is_reflexive</span></a> := <span class="id" type="definition">reflexive</span> <a class="idref" href="priority.html#Priority.PriorityDefs.ValidFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.fp_is_transitive"><span class="id" type="definition">fp_is_transitive</span></a> := <span class="id" type="definition">transitive</span> <a class="idref" href="priority.html#Priority.PriorityDefs.ValidFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.fp_is_total"><span class="id" type="definition">fp_is_total</span></a> := <span class="id" type="definition">total</span> <a class="idref" href="priority.html#Priority.PriorityDefs.ValidFPPolicy.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a>.<br/> - -<br/> - <span class="comment">(* We enforce the same restrictions for FP policy: reflexive, transitive, total. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.valid_fp_policy"><span class="id" type="definition">valid_fp_policy</span></a> :=<br/> - <a class="idref" href="priority.html#Priority.fp_is_reflexive"><span class="id" type="definition">fp_is_reflexive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="priority.html#Priority.fp_is_transitive"><span class="id" type="definition">fp_is_transitive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="priority.html#Priority.fp_is_total"><span class="id" type="definition">fp_is_total</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.PriorityDefs.ValidFPPolicy"><span class="id" type="section">ValidFPPolicy</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.PriorityDefs"><span class="id" type="section">PriorityDefs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.RateDeadlineMonotonic"><span class="id" type="section">RateDeadlineMonotonic</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.RateDeadlineMonotonic.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.RateDeadlineMonotonic.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Rate-Monotonic and Deadline-Monotonic as priority order *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.RM"><span class="id" type="definition">RM</span></a> (<span class="id" type="var">tsk1</span> <span class="id" type="var">tsk2</span>: <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) := <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="priority.html#tsk1"><span class="id" type="variable">tsk1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="priority.html#tsk2"><span class="id" type="variable">tsk2</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.DM"><span class="id" type="definition">DM</span></a> (<span class="id" type="var">tsk1</span> <span class="id" type="var">tsk2</span>: <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) := <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="priority.html#tsk1"><span class="id" type="variable">tsk1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="priority.html#tsk2"><span class="id" type="variable">tsk2</span></a>.<br/> - -<br/> - <span class="comment">(* Rate-Montonic is a valid FP policy. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Priority.rm_is_valid"><span class="id" type="lemma">rm_is_valid</span></a> : <a class="idref" href="priority.html#Priority.valid_fp_policy"><span class="id" type="definition">valid_fp_policy</span></a> <a class="idref" href="priority.html#Priority.RM"><span class="id" type="definition">RM</span></a>.<br/> - -<br/> - <span class="comment">(* Deadline-Monotonic is a valid FP policy. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Priority.dm_is_valid"><span class="id" type="lemma">dm_is_valid</span></a> : <a class="idref" href="priority.html#Priority.valid_fp_policy"><span class="id" type="definition">valid_fp_policy</span></a> <a class="idref" href="priority.html#Priority.DM"><span class="id" type="definition">DM</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.RateDeadlineMonotonic"><span class="id" type="section">RateDeadlineMonotonic</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.GeneralizeFP"><span class="id" type="section">GeneralizeFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.GeneralizeFP.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="priority.html#Priority.GeneralizeFP.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="priority.html#Priority.GeneralizeFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.GeneralizeFP.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="priority.html#Priority.GeneralizeFP.Job"><span class="id" type="variable">Job</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.GeneralizeFP.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* We define a function to get from FP to JLDP policy. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.fp_to_jldp"><span class="id" type="definition">fp_to_jldp</span></a> (<span class="id" type="var">task_hp</span>: <a class="idref" href="priority.html#Priority.fp_policy"><span class="id" type="definition">fp_policy</span></a> <a class="idref" href="priority.html#Priority.GeneralizeFP.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) : <a class="idref" href="priority.html#Priority.jldp_policy"><span class="id" type="definition">jldp_policy</span></a> <a class="idref" href="priority.html#Priority.GeneralizeFP.arr_seq"><span class="id" type="variable">arr_seq</span></a> :=<br/> - <span class="id" type="keyword">fun</span> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) (<span class="id" type="var">jhigh</span> <span class="id" type="var">jlow</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="priority.html#Priority.GeneralizeFP.arr_seq"><span class="id" type="variable">arr_seq</span></a>) =><br/> - <a class="idref" href="priority.html#task_hp"><span class="id" type="variable">task_hp</span></a> (<a class="idref" href="priority.html#Priority.GeneralizeFP.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="priority.html#jhigh"><span class="id" type="variable">jhigh</span></a>) (<a class="idref" href="priority.html#Priority.GeneralizeFP.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="priority.html#jlow"><span class="id" type="variable">jlow</span></a>).<br/> - -<br/> - <span class="comment">(* With this function, from a valid FP policy comes a valid JLDP policy. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Priority.valid_fp_is_valid_jldp"><span class="id" type="lemma">valid_fp_is_valid_jldp</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">task_hp</span> (<span class="id" type="var">FP</span>: <a class="idref" href="priority.html#Priority.valid_fp_policy"><span class="id" type="definition">valid_fp_policy</span></a> <a class="idref" href="priority.html#task_hp"><span class="id" type="variable">task_hp</span></a>),<br/> - <a class="idref" href="priority.html#Priority.valid_jldp_policy"><span class="id" type="definition">valid_jldp_policy</span></a> (<a class="idref" href="priority.html#Priority.fp_to_jldp"><span class="id" type="definition">fp_to_jldp</span></a> <a class="idref" href="priority.html#task_hp"><span class="id" type="variable">task_hp</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.GeneralizeFP"><span class="id" type="section">GeneralizeFP</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.JLFPDefs"><span class="id" type="section">JLFPDefs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="priority.html#Priority.JLFPDefs.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.JLFPDefs.is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a>: <a class="idref" href="priority.html#Priority.jldp_policy"><span class="id" type="definition">jldp_policy</span></a> <a class="idref" href="priority.html#Priority.JLFPDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* JLFP policy is a JLDP policy where the priorities do not vary with time. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.is_jlfp_policy"><span class="id" type="definition">is_jlfp_policy</span></a> (<span class="id" type="var">is_higher_priority</span>: <a class="idref" href="priority.html#Priority.jldp_policy"><span class="id" type="definition">jldp_policy</span></a> <a class="idref" href="priority.html#Priority.JLFPDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>) :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j1</span> <span class="id" type="var">j2</span> <span class="id" type="var">t</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="priority.html#is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a> <a class="idref" href="priority.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="priority.html#j1"><span class="id" type="variable">j1</span></a> <a class="idref" href="priority.html#j2"><span class="id" type="variable">j2</span></a> -> <a class="idref" href="priority.html#is_higher_priority"><span class="id" type="variable">is_higher_priority</span></a> <a class="idref" href="priority.html#t'"><span class="id" type="variable">t'</span></a> <a class="idref" href="priority.html#j1"><span class="id" type="variable">j1</span></a> <a class="idref" href="priority.html#j2"><span class="id" type="variable">j2</span></a>.<br/> - -<br/> - <span class="comment">(* Lemma: every FP policy is a JLFP policy. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.JLFPDefs.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="priority.html#Priority.JLFPDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="priority.html#Priority.JLFPDefs.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Lemma</span> <a name="Priority.fp_is_jlfp"><span class="id" type="lemma">fp_is_jlfp</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">fp_higher_priority</span>,<br/> - <a class="idref" href="priority.html#Priority.is_jlfp_policy"><span class="id" type="definition">is_jlfp_policy</span></a> (<a class="idref" href="priority.html#Priority.fp_to_jldp"><span class="id" type="definition">fp_to_jldp</span></a> <a class="idref" href="priority.html#Priority.JLFPDefs.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="priority.html#fp_higher_priority"><span class="id" type="variable">fp_higher_priority</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.JLFPDefs"><span class="id" type="section">JLFPDefs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Priority.EDFDefs"><span class="id" type="section">EDFDefs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.EDFDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="priority.html#Priority.EDFDefs.Job"><span class="id" type="variable">Job</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Priority.EDFDefs.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="priority.html#Priority.EDFDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="Priority.EDF"><span class="id" type="definition">EDF</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) (<span class="id" type="var">j1</span> <span class="id" type="var">j2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="priority.html#Priority.EDFDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>) :=<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="priority.html#j1"><span class="id" type="variable">j1</span></a> <span class="id" type="notation">+</span> <a class="idref" href="priority.html#Priority.EDFDefs.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="priority.html#j1"><span class="id" type="variable">j1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="priority.html#j2"><span class="id" type="variable">j2</span></a> <span class="id" type="notation">+</span> <a class="idref" href="priority.html#Priority.EDFDefs.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="priority.html#j2"><span class="id" type="variable">j2</span></a>.<br/> - -<br/> - <span class="comment">(* Lemma: EDF is a JLFP policy. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Priority.edf_jlfp"><span class="id" type="lemma">edf_jlfp</span></a> : <a class="idref" href="priority.html#Priority.is_jlfp_policy"><span class="id" type="definition">is_jlfp_policy</span></a> <a class="idref" href="priority.html#Priority.EDF"><span class="id" type="definition">EDF</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="Priority.edf_valid_policy"><span class="id" type="lemma">edf_valid_policy</span></a> : <a class="idref" href="priority.html#Priority.valid_jldp_policy"><span class="id" type="definition">valid_jldp_policy</span></a> <a class="idref" href="priority.html#Priority.EDF"><span class="id" type="definition">EDF</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="priority.html#Priority.EDFDefs"><span class="id" type="section">EDFDefs</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="priority.html#"><span class="id" type="module">Priority</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/response_time.html b/response_time.html deleted file mode 100644 index c4d822ddf..000000000 --- a/response_time.html +++ /dev/null @@ -1,174 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>response_time</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library response_time</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="comment">(* Definition of response-time bound and some simple lemmas. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="ResponseTime"><span class="id" type="module">ResponseTime</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Schedule</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">SporadicTaskArrival</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTime.ResponseTimeBound"><span class="id" type="section">ResponseTimeBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Given a task ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* ... and a particular schedule, ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ... R is a response-time bound of tsk in this schedule ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTime.ResponseTimeBound.job_has_completed_by"><span class="id" type="variable">job_has_completed_by</span></a> := <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* ... iff any job j of tsk in this arrival sequence has<br/> - completed by (job_arrival j + R). *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="response_time.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.job_has_completed_by"><span class="id" type="variable">job_has_completed_by</span></a> <a class="idref" href="response_time.html#j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="response_time.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="response_time.html#ResponseTime.ResponseTimeBound"><span class="id" type="section">ResponseTimeBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTime.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* Consider any valid schedule... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="ResponseTime.BasicLemmas.job_has_completed_by"><span class="id" type="variable">job_has_completed_by</span></a> := <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* ... where jobs dont execute after completion. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTime.BasicLemmas.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTime.BasicLemmas.SpecificJob"><span class="id" type="section">SpecificJob</span></a>.<br/> - -<br/> - <span class="comment">(* Then, for any job j ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ...with response-time bound R in this schedule, ... *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.SpecificJob.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTime.BasicLemmas.SpecificJob.response_time_bound"><span class="id" type="variable">response_time_bound</span></a>:<br/> - <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.job_has_completed_by"><span class="id" type="variable">job_has_completed_by</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> - <span class="comment">(* the service received by j at any time t' after its response time is 0. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTime.service_after_job_rt_zero"><span class="id" type="lemma">service_after_job_rt_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.R"><span class="id" type="variable">R</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* The same applies for the cumulative service of job j. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTime.cumulative_service_after_job_rt_zero"><span class="id" type="lemma">cumulative_service_after_job_rt_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span> <span class="id" type="var">t''</span>,<br/> - <a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.R"><span class="id" type="variable">R</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="response_time.html#t''"><span class="id" type="variable">t''</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.SpecificJob"><span class="id" type="section">SpecificJob</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ResponseTime.BasicLemmas.AllJobs"><span class="id" type="section">AllJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any task tsk ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* ... for which a response-time bound R is known. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.AllJobs.R"><span class="id" type="variable">R</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTime.BasicLemmas.AllJobs.response_time_bound"><span class="id" type="variable">response_time_bound</span></a>:<br/> - <a class="idref" href="response_time.html#ResponseTime.is_response_time_bound_of_task"><span class="id" type="definition">is_response_time_bound_of_task</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.R"><span class="id" type="variable">R</span></a>.<br/> - -<br/> - <span class="comment">(* Then, for any job j of this task, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="ResponseTime.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ResponseTime.BasicLemmas.AllJobs.H_job_of_task"><span class="id" type="variable">H_job_of_task</span></a>: <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* the service received by job j at any time t' after the response time is 0. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTime.service_after_task_rt_zero"><span class="id" type="lemma">service_after_task_rt_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.R"><span class="id" type="variable">R</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* The same applies for the cumulative service of job j. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ResponseTime.cumulative_service_after_task_rt_zero"><span class="id" type="lemma">cumulative_service_after_task_rt_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span> <span class="id" type="var">t''</span>,<br/> - <a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.R"><span class="id" type="variable">R</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="response_time.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="response_time.html#t''"><span class="id" type="variable">t''</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas.AllJobs"><span class="id" type="section">AllJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="response_time.html#ResponseTime.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="response_time.html#"><span class="id" type="module">ResponseTime</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/schedulability.html b/schedulability.html deleted file mode 100644 index 8c19f2af9..000000000 --- a/schedulability.html +++ /dev/null @@ -1,206 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>schedulability</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library schedulability</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="comment">(* Definitions of deadline miss. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="Schedulability"><span class="id" type="module">Schedulability</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Schedule</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">Job</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedulability.SchedulableDefs"><span class="id" type="section">SchedulableDefs</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that the cost and deadline of a job is known. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.Job"><span class="id" type="variable">Job</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedulability.SchedulableDefs.ScheduleOfJobs"><span class="id" type="section">ScheduleOfJobs</span></a>.<br/> - -<br/> - <span class="comment">(* For any job j in schedule sched, ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.ScheduleOfJobs.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.ScheduleOfJobs.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* job j misses no deadline in sched if it completed by its absolute deadline. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedulability.job_misses_no_deadline"><span class="id" type="definition">job_misses_no_deadline</span></a> :=<br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs.j"><span class="id" type="variable">j</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfJobs"><span class="id" type="section">ScheduleOfJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedulability.SchedulableDefs.ScheduleOfTasks"><span class="id" type="section">ScheduleOfTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.ScheduleOfTasks.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.ScheduleOfTasks.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any task tsk. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.SchedulableDefs.ScheduleOfTasks.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Task tsk doesn't miss its deadline iff all of its jobs don't miss their deadline. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedulability.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="schedulability.html#Schedulability.job_misses_no_deadline"><span class="id" type="definition">job_misses_no_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Task tsk doesn't miss its deadline before time t' iff all of its jobs don't miss<br/> - their deadline by that time. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedulability.task_misses_no_deadline_before"><span class="id" type="definition">task_misses_no_deadline_before</span></a> (<span class="id" type="var">t'</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedulability.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedulability.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><</span> <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> -><br/> - <a class="idref" href="schedulability.html#Schedulability.job_misses_no_deadline"><span class="id" type="definition">job_misses_no_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs.ScheduleOfTasks"><span class="id" type="section">ScheduleOfTasks</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#Schedulability.SchedulableDefs"><span class="id" type="section">SchedulableDefs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedulability.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* Consider any valid schedule... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ... where jobs dont execute after completion. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedulability.BasicLemmas.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedulability.BasicLemmas.SpecificJob"><span class="id" type="section">SpecificJob</span></a>.<br/> - -<br/> - <span class="comment">(* Then, for any job j ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ...that doesn't miss a deadline in this schedule, ... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedulability.BasicLemmas.SpecificJob.no_deadline_miss"><span class="id" type="variable">no_deadline_miss</span></a>:<br/> - <a class="idref" href="schedulability.html#Schedulability.job_misses_no_deadline"><span class="id" type="definition">job_misses_no_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* the service received by j at any time t' after its deadline is 0. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedulability.service_after_job_deadline_zero"><span class="id" type="lemma">service_after_job_deadline_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* The same applies for the cumulative service of job j. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedulability.cumulative_service_after_job_deadline_zero"><span class="id" type="lemma">cumulative_service_after_job_deadline_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span> <span class="id" type="var">t''</span>,<br/> - <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="schedulability.html#t''"><span class="id" type="variable">t''</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob.j"><span class="id" type="variable">j</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.SpecificJob"><span class="id" type="section">SpecificJob</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedulability.BasicLemmas.AllJobs"><span class="id" type="section">AllJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any task tsk ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* ... that doesn't miss any deadline. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedulability.BasicLemmas.AllJobs.no_deadline_misses"><span class="id" type="variable">no_deadline_misses</span></a>:<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline"><span class="id" type="definition">task_misses_no_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Then, for any valid job j of this task, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedulability.BasicLemmas.AllJobs.H_job_of_task"><span class="id" type="variable">H_job_of_task</span></a>: <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedulability.BasicLemmas.AllJobs.H_valid_job"><span class="id" type="variable">H_valid_job</span></a>:<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* the service received by job j at any time t' after the deadline is 0. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedulability.service_after_task_deadline_zero"><span class="id" type="lemma">service_after_task_deadline_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* The same applies for the cumulative service of job j. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedulability.cumulative_service_after_task_deadline_zero"><span class="id" type="lemma">cumulative_service_after_task_deadline_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t'</span> <span class="id" type="var">t''</span>,<br/> - <a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="schedulability.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="schedulability.html#t''"><span class="id" type="variable">t''</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs.j"><span class="id" type="variable">j</span></a> <span class="id" type="var">t</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas.AllJobs"><span class="id" type="section">AllJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#Schedulability.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="schedulability.html#"><span class="id" type="module">Schedulability</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/schedule.html b/schedule.html deleted file mode 100644 index e15f823a2..000000000 --- a/schedule.html +++ /dev/null @@ -1,437 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>schedule</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library schedule</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a> <a class="idref" href="arrival_sequence.html#"><span class="id" type="library">arrival_sequence</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="comment">(* Definition, properties and lemmas about schedules. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="Schedule"><span class="id" type="module">Schedule</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Export</span> <span class="id" type="var">ArrivalSequence</span>.<br/> - -<br/> - <span class="comment">(* A processor is defined as a bounded natural number: <span class="inlinecode">0,</span> <span class="inlinecode"><span class="id" type="var">num_cpus</span>).</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.processor"><span class="id" type="definition">processor</span></a> (<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) := <span class="id" type="notation">'</span><span class="id" type="notation">I_num_cpus</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ScheduleDef"><span class="id" type="section">ScheduleDef</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - -<br/> - <span class="comment">(* Given the number of processors and an arrival sequence, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ScheduleDef.num_cpus"><span class="id" type="variable">num_cpus</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ScheduleDef.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#Schedule.ScheduleDef.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* ... we define a schedule as a mapping such that each processor<br/> - at each time contains either a job from the sequence or none. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.schedule"><span class="id" type="definition">schedule</span></a> :=<br/> - <a class="idref" href="schedule.html#Schedule.processor"><span class="id" type="definition">processor</span></a> <a class="idref" href="schedule.html#Schedule.ScheduleDef.num_cpus"><span class="id" type="variable">num_cpus</span></a> -> <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#option"><span class="id" type="inductive">option</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedule.html#Schedule.ScheduleDef.arr_seq"><span class="id" type="variable">arr_seq</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ScheduleDef"><span class="id" type="section">ScheduleDef</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we define properties of jobs in a schedule. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ScheduledJobs"><span class="id" type="section">ScheduledJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - -<br/> - <span class="comment">(* Given an arrival sequence, ... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ScheduledJobs.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedule.html#Schedule.ScheduledJobs.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>. <span class="comment">(* ... a job cost function, ... *)</span><br/> - -<br/> - <span class="comment">(* ... and the number of processors, ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - -<br/> - <span class="comment">(* ... we define the following properties for job j in schedule sched. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ScheduledJobs.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* A job j is scheduled at time t iff there exists a cpu where it is mapped.*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">[</span><span class="id" type="notation">exists</span> <span class="id" type="var">cpu</span> <span class="id" type="keyword">in</span> <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><a class="idref" href="schedule.html#Schedule.ScheduledJobs.num_cpus"><span class="id" type="variable">num_cpus</span></a><span class="id" type="notation">)</span><span class="id" type="notation">,</span> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">cpu</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation">==</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a><span class="id" type="notation">]</span>.<br/> - -<br/> - <span class="comment">(* A processor cpu is idle at time t if it doesn't contain any jobs. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.is_idle"><span class="id" type="definition">is_idle</span></a> (<span class="id" type="var">cpu</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><a class="idref" href="schedule.html#Schedule.ScheduledJobs.num_cpus"><span class="id" type="variable">num_cpus</span></a><span class="id" type="notation">)</span>) (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="schedule.html#Schedule.ScheduledJobs.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#cpu"><span class="id" type="variable">cpu</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a>.<br/> - -<br/> - <span class="comment">(* The instantaneous service of job j at time t is the number of cpus<br/> - where it is scheduled on. Note that we use a sum to account for<br/> - parallelism if required. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.service_at"><span class="id" type="definition">service_at</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">cpu</span> <span class="id" type="notation"><</span> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.num_cpus"><span class="id" type="variable">num_cpus</span></a> <span class="id" type="notation">|</span> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">cpu</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation">==</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a><span class="id" type="notation">)</span> 1.<br/> - -<br/> - <span class="comment">(* The cumulative service received by job j during <span class="inlinecode">0,</span> <span class="inlinecode"><span class="id" type="var">t'</span>).</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.service"><span class="id" type="definition">service</span></a> (<span class="id" type="var">t'</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="schedule.html#t'"><span class="id" type="variable">t'</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <span class="id" type="var">t</span>.<br/> - -<br/> - <span class="comment">(* The cumulative service received by job j during <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>).</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.service_during"><span class="id" type="definition">service_during</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <span class="id" type="var">t</span>.<br/> - -<br/> - <span class="comment">(* Job j has completed at time t if it received enough service. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.completed"><span class="id" type="definition">completed</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <a class="idref" href="schedule.html#Schedule.service"><span class="id" type="definition">service</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation">==</span> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Job j is pending at time t iff it has arrived but has not completed. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.pending"><span class="id" type="definition">pending</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <a class="idref" href="arrival_sequence.html#ArrivalSequence.has_arrived"><span class="id" type="definition">has_arrived</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="notation">~~</span><a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="comment">(* Job j is backlogged at time t iff it is pending and not scheduled. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.backlogged"><span class="id" type="definition">backlogged</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <a class="idref" href="schedule.html#Schedule.pending"><span class="id" type="definition">pending</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="notation">~~</span><a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="comment">(* Job j is carry-in in interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>)</span> <span class="inlinecode"><span class="id" type="var">iff</span></span> <span class="inlinecode"><span class="id" type="var">it</span></span> <span class="inlinecode"><span class="id" type="var">arrives</span></span> <span class="inlinecode"><span class="id" type="keyword">before</span></span> <span class="inlinecode"><span class="id" type="var">t1</span></span> <span class="inlinecode"><span class="id" type="var">and</span></span> <span class="inlinecode"><span class="id" type="var">is</span></span> - <span class="inlinecode"><span class="id" type="var">not</span></span> <span class="inlinecode"><span class="id" type="var">complete</span></span> <span class="inlinecode"><span class="id" type="tactic">at</span></span> <span class="inlinecode"><span class="id" type="var">time</span></span> <span class="inlinecode"><span class="id" type="var">t1</span></span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.carried_in"><span class="id" type="definition">carried_in</span></a> (<span class="id" type="var">t1</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrived_before"><span class="id" type="definition">arrived_before</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a>.<br/> - -<br/> - <span class="comment">(* Job j is carry-out in interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>)</span> <span class="inlinecode"><span class="id" type="var">iff</span></span> <span class="inlinecode"><span class="id" type="var">it</span></span> <span class="inlinecode"><span class="id" type="var">arrives</span></span> <span class="inlinecode"><span class="id" type="keyword">after</span></span> <span class="inlinecode"><span class="id" type="var">t1</span></span> <span class="inlinecode"><span class="id" type="var">and</span></span> <span class="inlinecode"><span class="id" type="var">is</span></span> - <span class="inlinecode"><span class="id" type="var">not</span></span> <span class="inlinecode"><span class="id" type="var">complete</span></span> <span class="inlinecode"><span class="id" type="tactic">at</span></span> <span class="inlinecode"><span class="id" type="var">time</span></span> <span class="inlinecode"><span class="id" type="var">t2</span></span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.carried_out"><span class="id" type="definition">carried_out</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) := <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrived_between"><span class="id" type="definition">arrived_between</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* The list of scheduled jobs at time t is the concatenation of the jobs<br/> - scheduled on each processor. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.jobs_scheduled_at"><span class="id" type="definition">jobs_scheduled_at</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><span class="id" type="var">cpu</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="schedule.html#Schedule.ScheduledJobs.num_cpus"><span class="id" type="variable">num_cpus</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#make_sequence"><span class="id" type="definition">make_sequence</span></a> (<a class="idref" href="schedule.html#Schedule.ScheduledJobs.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">cpu</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a>).<br/> - -<br/> - <span class="comment">(* The list of jobs scheduled during the interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t2</span>)</span> <span class="inlinecode"><span class="id" type="var">is</span></span> <span class="inlinecode"><span class="id" type="var">the</span></span> - <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">duplicate</span>-<span class="id" type="var">free</span></span> <span class="inlinecode"><span class="id" type="var">concatenation</span></span> <span class="inlinecode"><span class="id" type="var">of</span></span> <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">jobs</span></span> <span class="inlinecode"><span class="id" type="var">scheduled</span></span> <span class="inlinecode"><span class="id" type="tactic">at</span></span> <span class="inlinecode"><span class="id" type="var">instant</span>.</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="definition">undup</span> (<a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation"><=</span></a> <span class="id" type="var">t</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_at"><span class="id" type="definition">jobs_scheduled_at</span></a> <span class="id" type="var">t</span>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ScheduledJobs"><span class="id" type="section">ScheduledJobs</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we define properties of valid schedules. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ValidSchedules"><span class="id" type="section">ValidSchedules</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}. <span class="comment">(* Assume a job type with decidable equality, ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#Schedule.ValidSchedules.Job"><span class="id" type="variable">Job</span></a>}. <span class="comment">(* ..., an arrival sequence, ...*)</span><br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ValidSchedules.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedule.html#Schedule.ValidSchedules.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>. <span class="comment">(* ... a cost function, .... *)</span><br/> - -<br/> - <span class="comment">(* ... and a schedule. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ValidSchedules.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedule.html#Schedule.ValidSchedules.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedule.html#Schedule.ValidSchedules.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we define whether job parallelism is disallowed, ... *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> <span class="id" type="var">t</span> <span class="id" type="var">cpu1</span> <span class="id" type="var">cpu2</span>,<br/> - <a class="idref" href="schedule.html#Schedule.ValidSchedules.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#cpu1"><span class="id" type="variable">cpu1</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> -> <a class="idref" href="schedule.html#Schedule.ValidSchedules.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#cpu2"><span class="id" type="variable">cpu2</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> -> <a class="idref" href="schedule.html#cpu1"><span class="id" type="variable">cpu1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedule.html#cpu2"><span class="id" type="variable">cpu2</span></a>.<br/> - -<br/> - <span class="comment">(* ... whether a job can only be scheduled if it has arrived, ... *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> <span class="id" type="var">t</span>, <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="schedule.html#Schedule.ValidSchedules.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> -> <a class="idref" href="arrival_sequence.html#ArrivalSequence.has_arrived"><span class="id" type="definition">has_arrived</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="comment">(* ... whether a job can be scheduled after it completes. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> <span class="id" type="var">t</span>, <a class="idref" href="schedule.html#Schedule.service"><span class="id" type="definition">service</span></a> <a class="idref" href="schedule.html#Schedule.ValidSchedules.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#Schedule.ValidSchedules.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ValidSchedules"><span class="id" type="section">ValidSchedules</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove some basic lemmas about service. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ServiceLemmas"><span class="id" type="section">ServiceLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Consider an arrival sequence, ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="comment">(* ... a job cost function, ...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ServiceLemmas.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedule.html#Schedule.ServiceLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* ..., and a particular schedule. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we prove some lemmas about the service received by a job j. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ServiceLemmas.Basic"><span class="id" type="section">Basic</span></a>.<br/> - -<br/> - <span class="comment">(* At any time t, if job j is not scheduled, it doesn't get service. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.not_scheduled_no_service"><span class="id" type="lemma">not_scheduled_no_service</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>,<br/> - <span class="id" type="notation">~~</span> <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> -> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* If the cumulative service during a time interval is not zero, there<br/> - must be a time t in this interval where the service is not 0. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.job_scheduled_during_interval"><span class="id" type="lemma">job_scheduled_during_interval</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">t</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a><br/> - <a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><</span> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <br/> - <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation">!=</span> 0.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.Basic"><span class="id" type="section">Basic</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ServiceLemmas.NoParallelism"><span class="id" type="section">NoParallelism</span></a>.<br/> - -<br/> - <span class="comment">(* If jobs cannot execute in parallel, then... *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedule.ServiceLemmas.NoParallelism.no_parallelism"><span class="id" type="variable">no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* ..., the service received by job j at any time t is at most 1, ... *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.service_at_most_one"><span class="id" type="lemma">service_at_most_one</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span>, <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><=</span> 1.<br/> - <span class="comment">(* ..., which implies that the service receive during a interval<br/> - of length delta is at most delta. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.cumulative_service_le_delta"><span class="id" type="lemma">cumulative_service_le_delta</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span> <span class="id" type="keyword">delta</span>, <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> (<a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>) <span class="id" type="notation"><=</span> <span class="id" type="keyword">delta</span>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.NoParallelism"><span class="id" type="section">NoParallelism</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ServiceLemmas.Completion"><span class="id" type="section">Completion</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that completed jobs do not execute. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedule.ServiceLemmas.Completion.H_completed_jobs"><span class="id" type="variable">H_completed_jobs</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Then, after job j completes, it remains completed. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.completion_monotonic"><span class="id" type="lemma">completion_monotonic</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#t'"><span class="id" type="variable">t'</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t'"><span class="id" type="variable">t'</span></a>.<br/> - -<br/> - <span class="comment">(* Also, the service received by job j in any interval is no larger than its cost. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.cumulative_service_le_job_cost"><span class="id" type="lemma">cumulative_service_le_job_cost</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="schedule.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.Completion"><span class="id" type="section">Completion</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="Schedule.ServiceLemmas.Arrival"><span class="id" type="section">Arrival</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that jobs must arrive to execute. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="Schedule.ServiceLemmas.Arrival.H_jobs_must_arrive"><span class="id" type="variable">H_jobs_must_arrive</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Then, job j does not receive service at any time t prior to its arrival. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.service_before_job_arrival_zero"><span class="id" type="lemma">service_before_job_arrival_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span> (<span class="id" type="var">LT</span>: <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a>),<br/> - <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* The same applies for the cumulative service received by job j. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.cumulative_service_before_job_arrival_zero"><span class="id" type="lemma">cumulative_service_before_job_arrival_zero</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span> (<span class="id" type="var">LT</span>: <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a>),<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="schedule.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="schedule.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> 0.<br/> - -<br/> - <span class="comment">(* Hence, you can ignore the service received by a job before its arrival time. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Schedule.service_before_arrival_eq_service_during"><span class="id" type="lemma">service_before_arrival_eq_service_during</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t0</span> <span class="id" type="var">t</span> (<span class="id" type="var">LT</span>: <a class="idref" href="schedule.html#t0"><span class="id" type="variable">t0</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a>),<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="schedule.html#t0"><span class="id" type="variable">t0</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <span class="id" type="notation"><</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_at"><span class="id" type="definition">service_at</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ServiceLemmas.Arrival"><span class="id" type="section">Arrival</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#Schedule.ServiceLemmas"><span class="id" type="section">ServiceLemmas</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#"><span class="id" type="module">Schedule</span></a>.<br/> - -<br/> -<span class="comment">(* Specific properties of a schedule of sporadic jobs. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="ScheduleOfSporadicTask"><span class="id" type="module">ScheduleOfSporadicTask</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">SporadicTask</span> <span class="id" type="var">Job</span>.<br/> - <span class="id" type="keyword">Export</span> <span class="id" type="var">Schedule</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ScheduleOfSporadicTask.ValidSchedule"><span class="id" type="section">ValidSchedule</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the job cost and task are known. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.ValidSchedule.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.ValidSchedule.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Then, in a valid schedule of sporadic tasks, ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.Job"><span class="id" type="variable">Job</span></a>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.ValidSchedule.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ... jobs of the same task cannot execute in parallel. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ScheduleOfSporadicTask.jobs_of_same_task_dont_execute_in_parallel"><span class="id" type="definition">jobs_of_same_task_dont_execute_in_parallel</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span> <span class="id" type="var">j'</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.arr_seq"><span class="id" type="variable">arr_seq</span></a>) <span class="id" type="var">t</span>,<br/> - <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedule.html#j'"><span class="id" type="variable">j'</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> -> <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#j'"><span class="id" type="variable">j'</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> -> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedule.html#j'"><span class="id" type="variable">j'</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.ValidSchedule"><span class="id" type="section">ValidSchedule</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ScheduleOfSporadicTask.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the job cost and task are known. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Then, in a valid schedule of sporadic tasks ...*)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.Job"><span class="id" type="variable">Job</span></a>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ...such that jobs do not execute after completion, ...*)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ScheduleOfSporadicTask.BasicLemmas.jobs_dont_execute_after_completion"><span class="id" type="variable">jobs_dont_execute_after_completion</span></a> :<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfSporadicTask.BasicLemmas.j"><span class="id" type="variable">j</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ScheduleOfSporadicTask.BasicLemmas.H_job_of_task"><span class="id" type="variable">H_job_of_task</span></a>: <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="ScheduleOfSporadicTask.BasicLemmas.valid_job"><span class="id" type="variable">valid_job</span></a>:<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Remember that for any job of tsk, service <= task_cost tsk *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ScheduleOfSporadicTask.cumulative_service_le_task_cost"><span class="id" type="lemma">cumulative_service_le_task_cost</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t</span> <span class="id" type="var">t'</span>,<br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="schedule.html#t'"><span class="id" type="variable">t'</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#ScheduleOfSporadicTask.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#"><span class="id" type="module">ScheduleOfSporadicTask</span></a>.<br/> - -<br/> -<span class="comment">(* Specific properties for a schedule of sporadic tasks with jitter. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="ScheduleOfTaskWithJitter"><span class="id" type="module">ScheduleOfTaskWithJitter</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Export</span> <span class="id" type="var">ScheduleOfSporadicTask</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ScheduleOfTaskWithJitter.ArrivalAfterJitter"><span class="id" type="section">ArrivalAfterJitter</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the job cost, task and jitter are known. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_jitter"><span class="id" type="variable">job_jitter</span></a>: <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Then, in a valid schedule of sporadic jobs with jitter, ... *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.Job"><span class="id" type="variable">Job</span></a>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* ... a job can only be scheduled after the jitter. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="ScheduleOfTaskWithJitter.jobs_execute_after_jitter"><span class="id" type="definition">jobs_execute_after_jitter</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span> <span class="id" type="var">t</span>,<br/> - <a class="idref" href="schedule.html#Schedule.scheduled"><span class="id" type="definition">scheduled</span></a> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a> -><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.job_jitter"><span class="id" type="variable">job_jitter</span></a> <a class="idref" href="schedule.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="schedule.html#t"><span class="id" type="variable">t</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="ScheduleOfTaskWithJitter.ArrivalAfterJitter.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="comment">(* Note that if a job only executes after the jitter, it also only<br/> - executes after its arrival time. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="ScheduleOfTaskWithJitter.arrival_before_jitter"><span class="id" type="lemma">arrival_before_jitter</span></a> :<br/> - <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.jobs_execute_after_jitter"><span class="id" type="definition">jobs_execute_after_jitter</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#ScheduleOfTaskWithJitter.ArrivalAfterJitter"><span class="id" type="section">ArrivalAfterJitter</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="schedule.html#"><span class="id" type="module">ScheduleOfTaskWithJitter</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/task.html b/task.html deleted file mode 100644 index e4253dbfa..000000000 --- a/task.html +++ /dev/null @@ -1,132 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>task</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library task</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a> <span class="id" type="library">ssrnat</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">fintype</span> <span class="id" type="library">seq</span>.<br/> - -<br/> -<span class="comment">(* Attributes of a valid sporadic task. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="SporadicTask"><span class="id" type="module">SporadicTask</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="SporadicTask.BasicTask"><span class="id" type="section">BasicTask</span></a>.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTask.BasicTask.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="task.html#SporadicTask.BasicTask.Task"><span class="id" type="variable">Task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTask.BasicTask.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="task.html#SporadicTask.BasicTask.Task"><span class="id" type="variable">Task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTask.BasicTask.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="task.html#SporadicTask.BasicTask.Task"><span class="id" type="variable">Task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="SporadicTask.BasicTask.ValidParameters"><span class="id" type="section">ValidParameters</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="task.html#SporadicTask.BasicTask.Task"><span class="id" type="variable">Task</span></a>.<br/> - -<br/> - <span class="comment">(* The cost, period and deadline of the task must be positive. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTask.task_cost_positive"><span class="id" type="definition">task_cost_positive</span></a> := <a class="idref" href="task.html#SporadicTask.BasicTask.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">></span> 0.<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTask.task_period_positive"><span class="id" type="definition">task_period_positive</span></a> := <a class="idref" href="task.html#SporadicTask.BasicTask.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">></span> 0.<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTask.task_deadline_positive"><span class="id" type="definition">task_deadline_positive</span></a> := <a class="idref" href="task.html#SporadicTask.BasicTask.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* The task cost cannot be larger than the deadline or the period. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTask.task_cost_le_deadline"><span class="id" type="definition">task_cost_le_deadline</span></a> := <a class="idref" href="task.html#SporadicTask.BasicTask.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="task.html#SporadicTask.BasicTask.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTask.task_cost_le_period"><span class="id" type="definition">task_cost_le_period</span></a> := <a class="idref" href="task.html#SporadicTask.BasicTask.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="task.html#SporadicTask.BasicTask.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTask.is_valid_sporadic_task"><span class="id" type="definition">is_valid_sporadic_task</span></a> :=<br/> - <a class="idref" href="task.html#SporadicTask.task_cost_positive"><span class="id" type="definition">task_cost_positive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="task.html#SporadicTask.task_period_positive"><span class="id" type="definition">task_period_positive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="task.html#SporadicTask.task_deadline_positive"><span class="id" type="definition">task_deadline_positive</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="task.html#SporadicTask.task_cost_le_deadline"><span class="id" type="definition">task_cost_le_deadline</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="task.html#SporadicTask.task_cost_le_period"><span class="id" type="definition">task_cost_le_period</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="task.html#SporadicTask.BasicTask.ValidParameters"><span class="id" type="section">ValidParameters</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="task.html#SporadicTask.BasicTask"><span class="id" type="section">BasicTask</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="task.html#"><span class="id" type="module">SporadicTask</span></a>.<br/> - -<br/> -<span class="comment">(* Definition and properties of a task set. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="SporadicTaskset"><span class="id" type="module">SporadicTaskset</span></a>.<br/> - <span class="id" type="keyword">Export</span> <span class="id" type="var">SporadicTask</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="SporadicTaskset.TasksetDefs"><span class="id" type="section">TasksetDefs</span></a>.<br/> - -<br/> - <span class="comment">(* A task set is just a sequence of tasks. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> (<span class="id" type="var">Task</span>: <span class="id" type="abbreviation">eqType</span>) := <span class="id" type="abbreviation">seq</span> <a class="idref" href="task.html#Task"><span class="id" type="variable">Task</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we define some properties of a task set. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="SporadicTaskset.TasksetDefs.TasksetProperties"><span class="id" type="section">TasksetProperties</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskset.TasksetDefs.TasksetProperties.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.Task"><span class="id" type="variable">Task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskset.TasksetDefs.TasksetProperties.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.Task"><span class="id" type="variable">Task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.Task"><span class="id" type="variable">Task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="SporadicTaskset.TasksetDefs.TasksetProperties.is_valid_task"><span class="id" type="variable">is_valid_task</span></a> :=<br/> - <a class="idref" href="task.html#SporadicTask.is_valid_sporadic_task"><span class="id" type="definition">is_valid_sporadic_task</span></a> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline"><span class="id" type="variable">task_deadline</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskset.TasksetDefs.TasksetProperties.ts"><span class="id" type="variable">ts</span></a>: <a class="idref" href="task.html#SporadicTaskset.taskset_of"><span class="id" type="definition">taskset_of</span></a> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.Task"><span class="id" type="variable">Task</span></a>.<br/> - -<br/> - <span class="comment">(* A valid sporadic taskset only contains valid tasks. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTaskset.valid_sporadic_taskset"><span class="id" type="definition">valid_sporadic_taskset</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>,<br/> - <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.is_valid_task"><span class="id" type="variable">is_valid_task</span></a> <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* A task set can satisfy one of three deadline models:<br/> - implicit, restricted, or arbitrary. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTaskset.implicit_deadline_model"><span class="id" type="definition">implicit_deadline_model</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>,<br/> - <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTaskset.restricted_deadline_model"><span class="id" type="definition">restricted_deadline_model</span></a> :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">tsk</span>,<br/> - <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.ts"><span class="id" type="variable">ts</span></a> -> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="task.html#tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTaskset.arbitrary_deadline_model"><span class="id" type="definition">arbitrary_deadline_model</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#True"><span class="id" type="inductive">True</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs.TasksetProperties"><span class="id" type="section">TasksetProperties</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="task.html#SporadicTaskset.TasksetDefs"><span class="id" type="section">TasksetDefs</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="task.html#"><span class="id" type="module">SporadicTaskset</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/task_arrival.html b/task_arrival.html deleted file mode 100644 index 54e82efc2..000000000 --- a/task_arrival.html +++ /dev/null @@ -1,72 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>task_arrival</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library task_arrival</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span>.<br/> - -<br/> -<span class="comment">(* Properties of the job arrival. *)</span><br/> -<span class="id" type="keyword">Module</span> <a name="SporadicTaskArrival"><span class="id" type="module">SporadicTaskArrival</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Import</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">Schedule</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="SporadicTaskArrival.ArrivalModels"><span class="id" type="section">ArrivalModels</span></a>.<br/> - -<br/> - <span class="comment">(* Assume the task period is known. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskArrival.ArrivalModels.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskArrival.ArrivalModels.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.Job"><span class="id" type="variable">Job</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="SporadicTaskArrival.ArrivalModels.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Then, we define the sporadic task model as follows.*)</span><br/> - -<br/> - <span class="id" type="keyword">Definition</span> <a name="SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> :=<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span> <span class="id" type="var">j'</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="task_arrival.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<>'_x"><span class="id" type="notation"><></span></a> <a class="idref" href="task_arrival.html#j'"><span class="id" type="variable">j'</span></a> -> <span class="comment">(* Given two different jobs j and j' ... *)</span><br/> - <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="task_arrival.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="task_arrival.html#j'"><span class="id" type="variable">j'</span></a> -> <span class="comment">(* ... of the same task, ... *)</span><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="task_arrival.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="task_arrival.html#j'"><span class="id" type="variable">j'</span></a> -> <span class="comment">(* ... if the arrival of j precedes the arrival of j' ..., *)</span><br/> - <span class="comment">(* then the arrival of j and the arrival of j' are separated by at least one period. *)</span><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="task_arrival.html#j'"><span class="id" type="variable">j'</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="task_arrival.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.task_period"><span class="id" type="variable">task_period</span></a> (<a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="task_arrival.html#j"><span class="id" type="variable">j</span></a>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="task_arrival.html#SporadicTaskArrival.ArrivalModels"><span class="id" type="section">ArrivalModels</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="task_arrival.html#"><span class="id" type="module">SporadicTaskArrival</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/util_divround.html b/util_divround.html deleted file mode 100644 index 33a888e18..000000000 --- a/util_divround.html +++ /dev/null @@ -1,37 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>util_divround</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library util_divround</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <span class="id" type="library">ssrbool</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">div</span>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="div_floor"><span class="id" type="definition">div_floor</span></a> (<span class="id" type="var">x</span> <span class="id" type="var">y</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> := <a class="idref" href="util_divround.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_divround.html#y"><span class="id" type="variable">y</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="div_ceil"><span class="id" type="definition">div_ceil</span></a> (<span class="id" type="var">x</span> <span class="id" type="var">y</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) := <span class="id" type="keyword">if</span> <a class="idref" href="util_divround.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="notation">%|</span> <a class="idref" href="util_divround.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="keyword">then</span> <a class="idref" href="util_divround.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_divround.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="keyword">else</span> <span class="id" type="notation">(</span><a class="idref" href="util_divround.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_divround.html#y"><span class="id" type="variable">y</span></a><span class="id" type="notation">).+1</span>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/util_lemmas.html b/util_lemmas.html deleted file mode 100644 index 8dda34891..000000000 --- a/util_lemmas.html +++ /dev/null @@ -1,480 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>util_lemmas</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library util_lemmas</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">tuple</span> <span class="id" type="library">path</span> <span class="id" type="library">div</span> <a class="idref" href="ssromega.html#"><span class="id" type="library">ssromega</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Section</span> <a name="Pair"><span class="id" type="section">Pair</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Context</span> {<span class="id" type="var">A</span> <span class="id" type="var">B</span>: <span class="id" type="keyword">Type</span>}.<br/> -<span class="id" type="keyword">Variable</span> <a name="Pair.p"><span class="id" type="variable">p</span></a>: <a class="idref" href="util_lemmas.html#Pair.A"><span class="id" type="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="util_lemmas.html#Pair.B"><span class="id" type="variable">B</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="pair_1st"><span class="id" type="definition">pair_1st</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="util_lemmas.html#Pair.p"><span class="id" type="variable">p</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="pair_2nd"><span class="id" type="definition">pair_2nd</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="util_lemmas.html#Pair.p"><span class="id" type="variable">p</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="util_lemmas.html#Pair"><span class="id" type="section">Pair</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Section</span> <a name="Triple"><span class="id" type="section">Triple</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Context</span> {<span class="id" type="var">A</span> <span class="id" type="var">B</span> <span class="id" type="var">C</span>: <span class="id" type="keyword">Type</span>}.<br/> -<span class="id" type="keyword">Variable</span> <a name="Triple.p"><span class="id" type="variable">p</span></a>: <a class="idref" href="util_lemmas.html#Triple.A"><span class="id" type="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="util_lemmas.html#Triple.B"><span class="id" type="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="util_lemmas.html#Triple.C"><span class="id" type="variable">C</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="triple_1st"><span class="id" type="definition">triple_1st</span></a> (<span class="id" type="var">p</span>: <a class="idref" href="util_lemmas.html#Triple.A"><span class="id" type="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="util_lemmas.html#Triple.B"><span class="id" type="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="util_lemmas.html#Triple.C"><span class="id" type="variable">C</span></a>) := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a>).<br/> -<span class="id" type="keyword">Definition</span> <a name="triple_2nd"><span class="id" type="definition">triple_2nd</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="util_lemmas.html#Triple.p"><span class="id" type="variable">p</span></a>).<br/> -<span class="id" type="keyword">Definition</span> <a name="triple_3rd"><span class="id" type="definition">triple_3rd</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="util_lemmas.html#Triple.p"><span class="id" type="variable">p</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="util_lemmas.html#Triple"><span class="id" type="section">Triple</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\cat_ ( m <= i < n ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">i</span>, <span class="id" type="var">m</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \cat_ ( m <= i < n ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">"</span></a>\cat_ ( m <= i < n ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><span class="id" type="definition">cat</span><span class="id" type="notation">/</span><span class="id" type="notation">[::]</span><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">m</span> <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="var">n</span><span class="id" type="notation">)</span> <span class="id" type="var">F</span>%<span class="id" type="var">N</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\cat_ ( m <= i < n | P ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">P</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">i</span>, <span class="id" type="var">m</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \cat_ ( m <= i < n | P ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_'|'_x_')'_x"><span class="id" type="notation">"</span></a>\cat_ ( m <= i < n | P ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><span class="id" type="definition">cat</span><span class="id" type="notation">/</span><span class="id" type="notation">[::]</span><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">m</span> <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="var">n</span> <span class="id" type="notation">|</span> <span class="id" type="var">P</span><span class="id" type="notation">)</span> <span class="id" type="var">F</span>%<span class="id" type="var">N</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\sum_ ( ( m , n ) <- r ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">m</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \sum_ ( ( m , n ) <- r ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">"</span></a>\sum_ ( ( m , n ) <- r ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <span class="id" type="var">r</span><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">m</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <span class="id" type="var">i</span> <span class="id" type="keyword">in</span> <span class="id" type="var">F</span><span class="id" type="notation">)</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\sum_ ( ( m , n ) <- r | P ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 30, <span class="id" type="var">P</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">m</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \sum_ ( ( m , n ) <- r | P ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\sum_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">"</span></a>\sum_ ( ( m , n ) <- r | P ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <span class="id" type="var">r</span> <span class="id" type="notation">|</span> <span class="id" type="notation">(</span><span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">m</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <span class="id" type="var">i</span> <span class="id" type="keyword">in</span> <span class="id" type="var">P</span><span class="id" type="notation">))</span><br/> - <span class="id" type="notation">(</span><span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">m</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <span class="id" type="var">i</span> <span class="id" type="keyword">in</span> <span class="id" type="var">F</span><span class="id" type="notation">)</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\max_ ( ( m , n ) <- r ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">m</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \max_ ( ( m , n ) <- r ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\max_'_'('_'('_x_','_x_')'_'<-'_x_')'_x"><span class="id" type="notation">"</span></a>\max_ ( ( m , n ) <- r ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">max_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <span class="id" type="var">r</span><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">m</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <span class="id" type="var">i</span> <span class="id" type="keyword">in</span> <span class="id" type="var">F</span><span class="id" type="notation">)</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\max_ ( ( m , n ) <- r | P ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 30, <span class="id" type="var">P</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">m</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \max_ ( ( m , n ) <- r | P ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\max_'_'('_'('_x_','_x_')'_'<-'_x_'|'_x_')'_x"><span class="id" type="notation">"</span></a>\max_ ( ( m , n ) <- r | P ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">max_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <span class="id" type="var">r</span> <span class="id" type="notation">|</span> <span class="id" type="notation">(</span><span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">m</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <span class="id" type="var">i</span> <span class="id" type="keyword">in</span> <span class="id" type="var">P</span><span class="id" type="notation">))</span><br/> - <span class="id" type="notation">(</span><span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">m</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <span class="id" type="var">i</span> <span class="id" type="keyword">in</span> <span class="id" type="var">F</span><span class="id" type="notation">)</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":seq_scope:'['_'seq'_'('_x_','_x_')'_'<-'_x_'|'_x_']'"><span class="id" type="notation">"</span></a>[ 'seq' ( x , y ) <- s | C ]" :=<br/> - (<span class="id" type="definition">filter</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">i</span> => <span class="id" type="keyword">let</span> '<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a><span class="id" type="var">y</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> := <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="keyword">in</span> <span class="id" type="var">C</span>%<span class="id" type="var">B</span>) <span class="id" type="var">s</span>)<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 0, <span class="id" type="var">x</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 99,<br/> - <span class="id" type="var">format</span> "[ '[hv' 'seq' ( x , y ) <- s '/ ' | C ] ']'") : <span class="id" type="var">seq_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\cat_ ( i < n ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">i</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \cat_ ( i < n ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">"</span></a>\cat_ ( i < n ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><span class="id" type="definition">cat</span><span class="id" type="notation">/</span><span class="id" type="notation">[::]</span><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="var">n</span><span class="id" type="notation">)</span> <span class="id" type="var">F</span>%<span class="id" type="var">N</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "\cat_ ( i < n | P ) F"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">F</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 41, <span class="id" type="var">i</span>, <span class="id" type="var">n</span> <span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 50,<br/> - <span class="id" type="var">format</span> "'[' \cat_ ( i < n | P ) '/ ' F ']'").<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":nat_scope:'\cat_'_'('_x_'<'_x_'|'_x_')'_x"><span class="id" type="notation">"</span></a>\cat_ ( i < n | P ) F" :=<br/> - (<span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><span class="id" type="definition">cat</span><span class="id" type="notation">/</span><span class="id" type="notation">[::]</span><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="var">n</span> <span class="id" type="notation">|</span> <span class="id" type="var">P</span><span class="id" type="notation">)</span> <span class="id" type="var">F</span>%<span class="id" type="var">N</span>) : <span class="id" type="var">nat_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Reserved Notation</span> "x \In A"<br/> - (<span class="id" type="tactic">at</span> <span class="id" type="keyword">level</span> 70, <span class="id" type="var">format</span> "'[hv' x '/ ' \In A ']'", <span class="id" type="keyword">no</span> <span class="id" type="keyword">associativity</span>).<br/> - -<br/> -<span class="id" type="keyword">Notation</span> <a name=":bool_scope:x_'\In'_x"><span class="id" type="notation">"</span></a>x \In A" :=<br/> - (<span class="id" type="keyword">if</span> <span class="id" type="var">A</span> <span class="id" type="var">is</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">B</span> <span class="id" type="keyword">then</span> <span class="id" type="definition">in_mem</span> <span class="id" type="var">x</span> (<span class="id" type="definition">mem</span> <span class="id" type="var">B</span>) <span class="id" type="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#false"><span class="id" type="constructor">false</span></a>) : <span class="id" type="var">bool_scope</span>.<br/> - -<br/> -<span class="id" type="keyword">Ltac</span> <span class="id" type="var">des_eqrefl2</span> :=<br/> - <span class="id" type="keyword">match</span> <span class="id" type="keyword">goal</span> <span class="id" type="keyword">with</span><br/> - | <span class="id" type="var">H</span>: <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">X</span> <span class="id" type="keyword">as</span> <span class="id" type="var">id</span> <span class="id" type="keyword">return</span> (?<span class="id" type="var">X</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#id"><span class="id" type="variable">id</span></a> -> <span class="id" type="var">_</span>) <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a>] |- <span class="id" type="var">_</span> =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">EQ</span> := <span class="id" type="tactic">fresh</span> "EQ" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">id'</span> := <span class="id" type="tactic">fresh</span> "x" <span class="id" type="keyword">in</span><br/> - <span class="id" type="var">revert</span> <span class="id" type="var">H</span>;<br/> - <span class="id" type="tactic">generalize</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a> <span class="id" type="var">X</span>); <span class="id" type="tactic">generalize</span> <span class="id" type="var">X</span> <span class="id" type="tactic">at</span> 2 3;<br/> - <span class="id" type="tactic">intros</span> <span class="id" type="var">id'</span> <span class="id" type="var">EQ</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">id'</span>; <span class="id" type="tactic">intros</span> <span class="id" type="var">H</span><br/> - | |- <span class="id" type="keyword">context</span>[<span class="id" type="keyword">match</span> ?<span class="id" type="var">X</span> <span class="id" type="keyword">as</span> <span class="id" type="var">id</span> <span class="id" type="keyword">return</span> (?<span class="id" type="var">X</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#id"><span class="id" type="variable">id</span></a> -> <span class="id" type="var">_</span>) <span class="id" type="keyword">with</span> <span class="id" type="var">_</span> => <span class="id" type="var">_</span> <span class="id" type="keyword">end</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a>] =><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">EQ</span> := <span class="id" type="tactic">fresh</span> "EQ" <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">id'</span> := <span class="id" type="tactic">fresh</span> "x" <span class="id" type="keyword">in</span><br/> - <span class="id" type="tactic">generalize</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#eq_refl"><span class="id" type="constructor">Logic.eq_refl</span></a> <span class="id" type="var">X</span>); <span class="id" type="tactic">generalize</span> <span class="id" type="var">X</span> <span class="id" type="tactic">at</span> 2 3;<br/> - <span class="id" type="tactic">intros</span> <span class="id" type="var">id'</span> <span class="id" type="var">EQ</span>; <span class="id" type="tactic">destruct</span> <span class="id" type="var">id'</span><br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="mem_bigcat_nat"><span class="id" type="lemma">mem_bigcat_nat</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>) <span class="id" type="var">x</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">j</span> (<span class="id" type="var">f</span>: <span class="id" type="var">_</span> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">LE</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>) (<span class="id" type="var">IN</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a><span class="id" type="notation">)</span>),<br/> - <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation"><=</span></a> <span class="id" type="var">i</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <span class="id" type="var">i</span><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<='_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="fun_ord_to_nat"><span class="id" type="definition">fun_ord_to_nat</span></a> {<span class="id" type="var">n</span>} {<span class="id" type="var">T</span>} (<span class="id" type="var">x0</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">f</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>.<br/> -<span class="comment">(* if x < n, apply the function f in the (Ordinal x: 'I_n), else return default x0. *)</span><br/> -<span class="id" type="keyword">Defined</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="eq_fun_ord_to_nat"><span class="id" type="lemma">eq_fun_ord_to_nat</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span> {<span class="id" type="var">T</span>: <span class="id" type="keyword">Type</span>} <span class="id" type="var">x0</span> (<span class="id" type="var">f</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">x</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span>),<br/> - (<a class="idref" href="util_lemmas.html#fun_ord_to_nat"><span class="id" type="definition">fun_ord_to_nat</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a>) <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="eq_bigr_ord"><span class="id" type="lemma">eq_bigr_ord</span></a> <span class="id" type="var">T</span> <span class="id" type="var">n</span> <span class="id" type="var">op</span> <span class="id" type="var">idx</span> <span class="id" type="var">r</span> (<span class="id" type="var">P</span> : <span class="id" type="definition">pred</span> <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span>)<br/> - (<span class="id" type="var">F1</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">F2</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :<br/> - (<span class="id" type="keyword">forall</span> <span class="id" type="var">i</span>, <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> -> <a class="idref" href="util_lemmas.html#F1"><span class="id" type="variable">F1</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#F2"><span class="id" type="variable">F2</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><a class="idref" href="util_lemmas.html#op"><span class="id" type="variable">op</span></a><span class="id" type="notation">/</span><a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <span class="id" type="notation">|</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#F1"><span class="id" type="variable">F1</span></a> <span class="id" type="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><a class="idref" href="util_lemmas.html#op"><span class="id" type="variable">op</span></a><span class="id" type="notation">/</span><a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <span class="id" type="notation">|</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#F2"><span class="id" type="variable">F2</span></a> <span class="id" type="var">i</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="big_mkord_ord"><span class="id" type="lemma">big_mkord_ord</span></a> {<span class="id" type="var">T</span>} {<span class="id" type="var">n</span>} {<span class="id" type="var">op</span>} {<span class="id" type="var">idx</span>} <span class="id" type="var">x0</span> (<span class="id" type="var">P</span> : <span class="id" type="definition">pred</span> <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span>) (<span class="id" type="var">F</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><a class="idref" href="util_lemmas.html#op"><span class="id" type="variable">op</span></a><span class="id" type="notation">/</span><a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">|</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">big</span><span class="id" type="notation">[</span><a class="idref" href="util_lemmas.html#op"><span class="id" type="variable">op</span></a><span class="id" type="notation">/</span><a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a><span class="id" type="notation">]</span><span class="id" type="notation">_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">|</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> (<a class="idref" href="util_lemmas.html#fun_ord_to_nat"><span class="id" type="definition">fun_ord_to_nat</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a>) <span class="id" type="var">i</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="mem_bigcat_ord"><span class="id" type="lemma">mem_bigcat_ord</span></a>:<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>) <span class="id" type="var">x</span> <span class="id" type="var">n</span> (<span class="id" type="var">j</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span>) (<span class="id" type="var">f</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">LE</span>: <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>) (<span class="id" type="var">IN</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a><span class="id" type="notation">)</span>),<br/> - <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><span class="id" type="var">i</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <span class="id" type="var">i</span><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="mem_bigcat_ord_exists"><span class="id" type="lemma">mem_bigcat_ord_exists</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>) <span class="id" type="var">x</span> <span class="id" type="var">n</span> (<span class="id" type="var">f</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>),<br/> - <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><span class="id" type="var">i</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <span class="id" type="var">i</span><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">i</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a><span class="id" type="notation">)</span>.<br/> -<span class="id" type="keyword">Lemma</span> <a name="bigcat_ord_uniq"><span class="id" type="lemma">bigcat_ord_uniq</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>) <span class="id" type="var">n</span> (<span class="id" type="var">f</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>),<br/> - (<span class="id" type="keyword">forall</span> <span class="id" type="var">i</span>, <span class="id" type="definition">uniq</span> (<a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>)) -><br/> - (<span class="id" type="keyword">forall</span> <span class="id" type="var">x</span> <span class="id" type="var">i1</span> <span class="id" type="var">i2</span>,<br/> - <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#i1"><span class="id" type="variable">i1</span></a><span class="id" type="notation">)</span> -> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#i2"><span class="id" type="variable">i2</span></a><span class="id" type="notation">)</span> -> <a class="idref" href="util_lemmas.html#i1"><span class="id" type="variable">i1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#i2"><span class="id" type="variable">i2</span></a>) -><br/> - <span class="id" type="definition">uniq</span> (<a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><span class="id" type="var">i</span> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <span class="id" type="var">i</span><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a>).<br/> -<span class="id" type="keyword">Lemma</span> <a name="addnb"><span class="id" type="lemma">addnb</span></a> (<span class="id" type="var">b1</span> <span class="id" type="var">b2</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) : <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#b1"><span class="id" type="variable">b1</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#b2"><span class="id" type="variable">b2</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#b1"><span class="id" type="variable">b1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'||'_x"><span class="id" type="notation">||</span></a> <a class="idref" href="util_lemmas.html#b2"><span class="id" type="variable">b2</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="strong_ind"><span class="id" type="lemma">strong_ind</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">P</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <span class="id" type="keyword">Prop</span>),<br/> - <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> 0 -> (<span class="id" type="keyword">forall</span> <span class="id" type="var">n</span>, (<span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>, <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> -> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a>) -> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">.+1</span>) -><br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span>, <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="strong_ind_lt"><span class="id" type="lemma">strong_ind_lt</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">P</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <span class="id" type="keyword">Prop</span>),<br/> - (<span class="id" type="keyword">forall</span> <span class="id" type="var">n</span>, (<span class="id" type="keyword">forall</span> <span class="id" type="var">k</span>, <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> -> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a>) -> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>) -><br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span>, <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="exists_inP_nat"><span class="id" type="lemma">exists_inP_nat</span></a> <span class="id" type="var">t</span> (<span class="id" type="var">P</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>):<br/> - <span class="id" type="inductive">reflect</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>) <span class="id" type="notation">[</span><span class="id" type="notation">exists</span> <span class="id" type="notation">(</span><span class="id" type="var">x</span> <span class="id" type="notation">|</span> <span class="id" type="var">x</span> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">'</span><span class="id" type="notation">I_t</span><span class="id" type="notation">)</span><span class="id" type="notation">,</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">x</span><span class="id" type="notation">]</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="forall_inP_nat"><span class="id" type="lemma">forall_inP_nat</span></a> (<span class="id" type="var">t</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) (<span class="id" type="var">P</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>):<br/> - <span class="id" type="inductive">reflect</span> ((<span class="id" type="keyword">forall</span> (<span class="id" type="var">x</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) (<span class="id" type="var">LT</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#t"><span class="id" type="variable">t</span></a>), <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>)) <span class="id" type="notation">[</span><span class="id" type="keyword">forall</span> <span class="id" type="notation">(</span><span class="id" type="var">x</span> <span class="id" type="notation">|</span> <span class="id" type="var">x</span> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">'</span><span class="id" type="notation">I_t</span><span class="id" type="notation">)</span><span class="id" type="notation">,</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">x</span><span class="id" type="notation">]</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="exists_inPQ_nat"><span class="id" type="lemma">exists_inPQ_nat</span></a> <span class="id" type="var">t</span> (<span class="id" type="var">P</span> <span class="id" type="var">Q</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>):<br/> - <span class="id" type="inductive">reflect</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#t"><span class="id" type="variable">t</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="util_lemmas.html#Q"><span class="id" type="variable">Q</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>) <span class="id" type="notation">[</span><span class="id" type="notation">exists</span> <span class="id" type="notation">(</span><span class="id" type="var">x</span> <span class="id" type="notation">|</span> <span class="id" type="var">x</span> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">'</span><span class="id" type="notation">I_t</span><span class="id" type="notation">)</span><span class="id" type="notation">,</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="util_lemmas.html#Q"><span class="id" type="variable">Q</span></a> <span class="id" type="var">x</span><span class="id" type="notation">]</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="subh1"><span class="id" type="lemma">subh1</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">p</span> (<span class="id" type="var">GE</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>), <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="subh2"><span class="id" type="lemma">subh2</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">m1</span> <span class="id" type="var">m2</span> <span class="id" type="var">n1</span> <span class="id" type="var">n2</span> (<span class="id" type="var">GE1</span>: <a class="idref" href="util_lemmas.html#m1"><span class="id" type="variable">m1</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#m2"><span class="id" type="variable">m2</span></a>) (<span class="id" type="var">GE2</span>: <a class="idref" href="util_lemmas.html#n1"><span class="id" type="variable">n1</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#n2"><span class="id" type="variable">n2</span></a>),<br/> - <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#m1"><span class="id" type="variable">m1</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#n1"><span class="id" type="variable">n1</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#m2"><span class="id" type="variable">m2</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#n2"><span class="id" type="variable">n2</span></a><span class="id" type="notation">)</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#m1"><span class="id" type="variable">m1</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#m2"><span class="id" type="variable">m2</span></a> <span class="id" type="notation">+</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#n1"><span class="id" type="variable">n1</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#n2"><span class="id" type="variable">n2</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="subh3"><span class="id" type="lemma">subh3</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">p</span> (<span class="id" type="var">GE1</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>) (<span class="id" type="var">GE</span>: <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a>),<br/> - (<a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="subh4"><span class="id" type="lemma">subh4</span></a>: <span class="id" type="keyword">forall</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">p</span> (<span class="id" type="var">LE1</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>) (<span class="id" type="var">LE2</span>: <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>),<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">==</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="notation">==</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="ltn_div_trunc"><span class="id" type="lemma">ltn_div_trunc</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">d</span> (<span class="id" type="var">NONZERO</span>: <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <span class="id" type="notation">></span> 0) (<span class="id" type="var">DIV</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a>), <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="addmovr"><span class="id" type="lemma">addmovr</span></a>: <span class="id" type="keyword">forall</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">p</span> (<span class="id" type="var">GE</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>), <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation"><-></span></a> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="addmovl"><span class="id" type="lemma">addmovl</span></a>: <span class="id" type="keyword">forall</span> <span class="id" type="var">m</span> <span class="id" type="var">n</span> <span class="id" type="var">p</span> (<span class="id" type="var">GE</span>: <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>), <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation"><-></span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="subndiv_eq_mod"><span class="id" type="lemma">subndiv_eq_mod</span></a>: <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span> <span class="id" type="var">d</span>, <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <span class="id" type="notation">*</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="sum_diff_monotonic"><span class="id" type="lemma">sum_diff_monotonic</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span> <span class="id" type="var">G</span> <span class="id" type="var">F</span> (<span class="id" type="var">ALL</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">i</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>, <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> -> <a class="idref" href="util_lemmas.html#G"><span class="id" type="variable">G</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>),<br/> - <span class="id" type="notation">(</span><span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#G"><span class="id" type="variable">G</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span><span class="id" type="notation">)</span> <span class="id" type="notation"><=</span> <span class="id" type="notation">(</span><span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span><span class="id" type="notation">)</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="sum_diff"><span class="id" type="lemma">sum_diff</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span> <span class="id" type="var">F</span> <span class="id" type="var">G</span> (<span class="id" type="var">ALL</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">i</span> (<span class="id" type="var">LT</span>: <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>), <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#G"><span class="id" type="variable">G</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>),<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">i</span> <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#G"><span class="id" type="variable">G</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">(</span><span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span><span class="id" type="notation">)</span> <span class="id" type="notation">-</span><br/> - <span class="id" type="notation">(</span><span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#G"><span class="id" type="variable">G</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span><span class="id" type="notation">)</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="prev_le_next"><span class="id" type="lemma">prev_le_next</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <span class="id" type="keyword">Type</span>) (<span class="id" type="var">F</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>-><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) <span class="id" type="var">r</span> (<span class="id" type="var">x0</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">ALL</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">i</span>, <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a><span class="id" type="notation">).-1</span> -> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a><span class="id" type="notation">.+1</span>))<br/> - <span class="id" type="var">i</span> <span class="id" type="var">k</span> (<span class="id" type="var">LT</span>: <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation">+</span> <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a><span class="id" type="notation">).-1</span>),<br/> - <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> (<a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a><span class="id" type="notation">+</span><a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a>)).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="telescoping_sum"><span class="id" type="lemma">telescoping_sum</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span>: <span class="id" type="keyword">Type</span>) (<span class="id" type="var">F</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>-><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) <span class="id" type="var">r</span> (<span class="id" type="var">x0</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">ALL</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">i</span>, <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a><span class="id" type="notation">).-1</span> -> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a><span class="id" type="notation">.+1</span>)), <br/> - <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a><span class="id" type="notation">).-1</span>) <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> 0) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a><span class="id" type="notation">).-1</span><span class="id" type="notation">)</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> (<span class="id" type="var">i</span><span class="id" type="notation">.+1</span>)) <span class="id" type="notation">-</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <span class="id" type="var">i</span>)<span class="id" type="notation">)</span>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="make_sequence"><span class="id" type="definition">make_sequence</span></a> {<span class="id" type="var">T</span>: <span class="id" type="keyword">Type</span>} (<span class="id" type="var">opt</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#option"><span class="id" type="inductive">option</span></a> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :=<br/> - <span class="id" type="keyword">match</span> <a class="idref" href="util_lemmas.html#opt"><span class="id" type="variable">opt</span></a> <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">j</span> => <span class="id" type="notation">[::</span> <span class="id" type="var">j</span><span class="id" type="notation">]</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a> => <span class="id" type="notation">[::]</span><br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="ltSnm"><span class="id" type="lemma">ltSnm</span></a> : <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span> <span class="id" type="var">m</span>, <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">.+1</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> -> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="iter_fix"><span class="id" type="lemma">iter_fix</span></a> <span class="id" type="var">T</span> (<span class="id" type="var">F</span> : <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) <span class="id" type="var">x</span> <span class="id" type="var">k</span> <span class="id" type="var">n</span> :<br/> - <span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a><span class="id" type="notation">.+1</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> -> <a class="idref" href="util_lemmas.html#k"><span class="id" type="variable">k</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> -> <span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">.+1</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="leq_as_delta"><span class="id" type="lemma">leq_as_delta</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">x1</span> (<span class="id" type="var">P</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <span class="id" type="keyword">Prop</span>),<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">(</span></a><span class="id" type="keyword">forall</span> <span class="id" type="var">x2</span>, <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> -> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation"><-></span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">(</span></a><span class="id" type="keyword">forall</span> <span class="id" type="keyword">delta</span>, <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> (<a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>)<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">)</span></a>.<br/> -<span class="id" type="keyword">Lemma</span> <a name="fun_mon_iter_mon"><span class="id" type="lemma">fun_mon_iter_mon</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">f</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) <span class="id" type="var">x0</span> <span class="id" type="var">x1</span> <span class="id" type="var">x2</span> (<span class="id" type="var">LE</span>: <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a>)<br/> - (<span class="id" type="var">MIN</span>: <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>)<br/> - (<span class="id" type="var">MON</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">x1</span> <span class="id" type="var">x2</span>, <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> -> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a>),<br/> - <span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <span class="id" type="notation"><=</span> <span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>.<br/> -<span class="id" type="keyword">Lemma</span> <a name="fun_mon_iter_mon_helper"><span class="id" type="lemma">fun_mon_iter_mon_helper</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">T</span> (<span class="id" type="var">f</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">le</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">REFL</span>: <span class="id" type="definition">reflexive</span> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a>) (<span class="id" type="var">TRANS</span>: <span class="id" type="definition">transitive</span> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a>)<br/> - <span class="id" type="var">x0</span> <span class="id" type="var">x1</span> (<span class="id" type="var">MIN</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">x2</span>, <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> (<span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>))<br/> - (<span class="id" type="var">MON</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">x1</span> <span class="id" type="var">x2</span>, <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> -> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> -> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> (<a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a>) (<a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a>)),<br/> - <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> (<span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>) (<span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a><span class="id" type="notation">.+1</span> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="fun_mon_iter_mon_generic"><span class="id" type="lemma">fun_mon_iter_mon_generic</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">T</span> (<span class="id" type="var">f</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">le</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">REFL</span>: <span class="id" type="definition">reflexive</span> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a>) (<span class="id" type="var">TRANS</span>: <span class="id" type="definition">transitive</span> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a>)<br/> - <span class="id" type="var">x0</span> <span class="id" type="var">x1</span> <span class="id" type="var">x2</span> (<span class="id" type="var">LE</span>: <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a>)<br/> - (<span class="id" type="var">MON</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">x1</span> <span class="id" type="var">x2</span>, <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> -> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> -> <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> (<a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a>) (<a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a>))<br/> - (<span class="id" type="var">MIN</span>: <span class="id" type="keyword">forall</span> <span class="id" type="var">x2</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>, <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> (<span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>)),<br/> - <a class="idref" href="util_lemmas.html#le"><span class="id" type="variable">le</span></a> (<span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>) (<span class="id" type="definition">iter</span> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> <a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="divSn_cases"><span class="id" type="lemma">divSn_cases</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">n</span> <span class="id" type="var">d</span> (<span class="id" type="var">GT1</span>: <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <span class="id" type="notation">></span> 1),<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">.+1</span> <span class="id" type="notation">%/</span><a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">%%</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <span class="id" type="notation">+</span> 1 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">.+1</span> <span class="id" type="notation">%%</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a> <span class="id" type="notation">%/</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a> <span class="id" type="notation">+</span> 1 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><span class="id" type="notation">.+1</span> <span class="id" type="notation">%/</span> <a class="idref" href="util_lemmas.html#d"><span class="id" type="variable">d</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">)</span></a>.<br/> - Case 1: y = d - 1*)</span><br/> - Case 2: y < d - 1 *)</span><br/> -<span class="id" type="keyword">Definition</span> <a name="total_over_seq"><span class="id" type="definition">total_over_seq</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">leT</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">s</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> (<span class="id" type="var">INx</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) (<span class="id" type="var">INy</span>: <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>),<br/> - <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'\/'_x"><span class="id" type="notation">\/</span></a> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="antisymmetric_over_seq"><span class="id" type="definition">antisymmetric_over_seq</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">leT</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">s</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :=<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> (<span class="id" type="var">INx</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) (<span class="id" type="var">INy</span>: <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>)<br/> - (<span class="id" type="var">LEx</span>: <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a>) (<span class="id" type="var">LEy</span>: <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>),<br/> - <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="before_ij_implies_leq_ij"><span class="id" type="lemma">before_ij_implies_leq_ij</span></a> :<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">s</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">leT</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">SORT</span>: <span class="id" type="definition">sorted</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) (<span class="id" type="var">REFL</span>: <span class="id" type="definition">reflexive</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a>)<br/> - (<span class="id" type="var">TRANS</span>: <span class="id" type="definition">transitive</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a>)<br/> - (<span class="id" type="var">i</span> <span class="id" type="var">j</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a><span class="id" type="notation">)</span>) (<span class="id" type="var">LE</span>: <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a>),<br/> - <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> (<span class="id" type="definition">tnth</span> (<span class="id" type="definition">in_tuple</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) (<span class="id" type="definition">tnth</span> (<span class="id" type="definition">in_tuple</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a>).<br/> -<span class="id" type="keyword">Lemma</span> <a name="leq_ij_implies_before_ij"><span class="id" type="lemma">leq_ij_implies_before_ij</span></a> :<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">s</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">leT</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">SORT</span>: <span class="id" type="definition">sorted</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>)<br/> - (<span class="id" type="var">REFL</span>: <span class="id" type="definition">reflexive</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a>)<br/> - (<span class="id" type="var">TRANS</span>: <span class="id" type="definition">transitive</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a>)<br/> - (<span class="id" type="var">ANTI</span>: <a class="idref" href="util_lemmas.html#antisymmetric_over_seq"><span class="id" type="definition">antisymmetric_over_seq</span></a> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>)<br/> - (<span class="id" type="var">i</span> <span class="id" type="var">j</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a><span class="id" type="notation">)</span>) (<span class="id" type="var">UNIQ</span>: <span class="id" type="definition">uniq</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>)<br/> - (<span class="id" type="var">REL</span>: <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> (<span class="id" type="definition">tnth</span> (<span class="id" type="definition">in_tuple</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) (<span class="id" type="definition">tnth</span> (<span class="id" type="definition">in_tuple</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>) <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a>)),<br/> - <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="ext_tuple_to_fun_index"><span class="id" type="definition">ext_tuple_to_fun_index</span></a> {<span class="id" type="var">T</span>} {<span class="id" type="var">ts</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>} {<span class="id" type="var">idx</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">)</span>} (<span class="id" type="var">hp</span>: <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a><span class="id" type="notation">.-</span><span class="id" type="notation">tuple</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) : <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">)</span> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> -<span class="id" type="keyword">Defined</span>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="extend_ord"><span class="id" type="definition">extend_ord</span></a> {<span class="id" type="var">max</span>} (<span class="id" type="var">y</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_max</span>) (<span class="id" type="var">x</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_y</span>) :=<br/> - <span class="id" type="constructor">Ordinal</span> (<span class="id" type="lemma">ltn_trans</span> (<span class="id" type="lemma">ltn_ord</span> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>) (<span class="id" type="lemma">ltn_ord</span> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a>)).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="eq_ext_tuple_to_fun_index"><span class="id" type="lemma">eq_ext_tuple_to_fun_index</span></a> :<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="keyword">Type</span>} {<span class="id" type="var">ts</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>} {<span class="id" type="var">idx</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_</span><span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#ts"><span class="id" type="variable">ts</span></a><span class="id" type="notation">)</span>} (<span class="id" type="var">tp</span>: <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a><span class="id" type="notation">.-</span><span class="id" type="notation">tuple</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) (<span class="id" type="var">x</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_idx</span>),<br/> - (<a class="idref" href="util_lemmas.html#ext_tuple_to_fun_index"><span class="id" type="definition">ext_tuple_to_fun_index</span></a> <a class="idref" href="util_lemmas.html#tp"><span class="id" type="variable">tp</span></a>) (<a class="idref" href="util_lemmas.html#extend_ord"><span class="id" type="definition">extend_ord</span></a> <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">tnth</span> <a class="idref" href="util_lemmas.html#tp"><span class="id" type="variable">tp</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>.<br/> -<span class="id" type="keyword">Definition</span> <a name="comp_relation"><span class="id" type="definition">comp_relation</span></a> {<span class="id" type="var">T</span>} (<span class="id" type="var">R</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) : <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a> :=<br/> - <span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> => <span class="id" type="notation">~~</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="reverse_sorted"><span class="id" type="definition">reverse_sorted</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">R</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">s</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :=<br/> - <span class="id" type="definition">sorted</span> (<a class="idref" href="util_lemmas.html#comp_relation"><span class="id" type="definition">comp_relation</span></a> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>) <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="revert_comp_relation"><span class="id" type="lemma">revert_comp_relation</span></a>:<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">R</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">ANTI</span>: <span class="id" type="definition">antisymmetric</span> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>)<br/> - (<span class="id" type="var">TOTAL</span>: <span class="id" type="definition">total</span> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>)<br/> - <span class="id" type="var">x</span> <span class="id" type="var">y</span> (<span class="id" type="var">DIFF</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">!=</span> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a>),<br/> - <span class="id" type="notation">~~</span> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="comp_relation_trans"><span class="id" type="lemma">comp_relation_trans</span></a>:<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">R</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">ANTI</span>: <span class="id" type="definition">antisymmetric</span> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>)<br/> - (<span class="id" type="var">TOTAL</span>: <span class="id" type="definition">total</span> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>)<br/> - (<span class="id" type="var">TRANS</span>: <span class="id" type="definition">transitive</span> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>),<br/> - <span class="id" type="definition">transitive</span> (<a class="idref" href="util_lemmas.html#comp_relation"><span class="id" type="definition">comp_relation</span></a> <a class="idref" href="util_lemmas.html#R"><span class="id" type="variable">R</span></a>).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="sorted_rcons_prefix"><span class="id" type="lemma">sorted_rcons_prefix</span></a> :<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">leT</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) <span class="id" type="var">s</span> <span class="id" type="var">x</span><br/> - (<span class="id" type="var">SORT</span>: <span class="id" type="definition">sorted</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>)),<br/> - <span class="id" type="definition">sorted</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="order_sorted_rcons"><span class="id" type="lemma">order_sorted_rcons</span></a> :<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">leT</span>: <span class="id" type="definition">rel</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">s</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">x</span> <span class="id" type="var">last</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>)<br/> - (<span class="id" type="var">TRANS</span>: <span class="id" type="definition">transitive</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a>) (<span class="id" type="var">SORT</span>: <span class="id" type="definition">sorted</span> <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> (<span class="id" type="definition">rcons</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a> <a class="idref" href="util_lemmas.html#last"><span class="id" type="variable">last</span></a>))<br/> - (<span class="id" type="var">IN</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#s"><span class="id" type="variable">s</span></a>),<br/> - <a class="idref" href="util_lemmas.html#leT"><span class="id" type="variable">leT</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="util_lemmas.html#last"><span class="id" type="variable">last</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="exists_unzip2"><span class="id" type="lemma">exists_unzip2</span></a> :<br/> - <span class="id" type="keyword">forall</span> {<span class="id" type="var">T1</span> <span class="id" type="var">T2</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">l</span>: <span class="id" type="abbreviation">seq</span> (<a class="idref" href="util_lemmas.html#T1"><span class="id" type="variable">T1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:type_scope:x_'*'_x"><span class="id" type="notation">*</span></a> <a class="idref" href="util_lemmas.html#T2"><span class="id" type="variable">T2</span></a>)) <span class="id" type="var">x</span> (<span class="id" type="var">IN</span>: <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><span class="id" type="definition">unzip1</span> <a class="idref" href="util_lemmas.html#l"><span class="id" type="variable">l</span></a><span class="id" type="notation">)</span>),<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">y</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#l"><span class="id" type="variable">l</span></a>.<br/> -<span class="comment">(* Based on https://www.ps.uni-saarland.de/formalizations/fset/html/libs.fset.html *)</span><br/> -<span class="id" type="keyword">Definition</span> <a name="powerset"><span class="id" type="definition">powerset</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">l</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) : <span class="id" type="abbreviation">seq</span> (<span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :=<br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">mT</span> := (<span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#l"><span class="id" type="variable">l</span></a><span class="id" type="notation">).-</span><span class="id" type="notation">tuple</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) <span class="id" type="keyword">in</span><br/> - (<span class="id" type="definition">map</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">m</span> : <a class="idref" href="util_lemmas.html#mT"><span class="id" type="variable">mT</span></a> => (<span class="id" type="definition">mask</span> <a class="idref" href="util_lemmas.html#m"><span class="id" type="variable">m</span></a> <a class="idref" href="util_lemmas.html#l"><span class="id" type="variable">l</span></a>)) (<span class="id" type="abbreviation">enum</span> <span class="id" type="notation">{:</span> <a class="idref" href="util_lemmas.html#mT"><span class="id" type="variable">mT</span></a><span class="id" type="notation">}</span>)).<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="mem_powerset"><span class="id" type="lemma">mem_powerset</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">x</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) <span class="id" type="var">y</span> :<br/> - <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#powerset"><span class="id" type="definition">powerset</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a><span class="id" type="notation">)</span> -> <span class="id" type="notation">{</span><span class="id" type="notation">subset</span> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a><span class="id" type="notation">}</span>.<br/> - -<br/> -<span class="comment">(*Lemma in_powerset {T: eqType} (x: seq T) y :<br/> - y \in (powerset x) -> {subset y <= x}.<br/> -Proof.<br/> - intros POW; red; intros z IN; unfold powerset in POW.<br/> - move: POW => /mapP POW; destruct POW as <span class="inlinecode"><span class="id" type="var">pair</span></span> <span class="inlinecode"><span class="id" type="var">POW</span></span> <span class="inlinecode"><span class="id" type="var">EQ</span></span>; subst.<br/> - by apply mem_mask with (m := pair).<br/> -Qed.*)</span><br/> - -<br/> -<span class="comment">(* Based on http://www.ps.uni-saarland.de/~doczkal/cpp11/html/base.html *)</span><br/> -<span class="id" type="keyword">Lemma</span> <a name="ex2E"><span class="id" type="lemma">ex2E</span></a> <span class="id" type="var">X</span> (<span class="id" type="var">p</span> <span class="id" type="var">q</span> : <span class="id" type="definition">pred</span> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">exists2</span></a> <span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <span class="id" type="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists2'_x_','_x_'&'_x"><span class="id" type="notation">&</span></a> <a class="idref" href="util_lemmas.html#q"><span class="id" type="variable">q</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'<->'_x"><span class="id" type="notation"><-></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="util_lemmas.html#q"><span class="id" type="variable">q</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="mem_zip"><span class="id" type="lemma">mem_zip</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">X</span> <span class="id" type="var">Y</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) <span class="id" type="var">x</span> <span class="id" type="var">y</span> :<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="definition">zip</span> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a> <a class="idref" href="util_lemmas.html#Y"><span class="id" type="variable">Y</span></a> -><br/> - <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="util_lemmas.html#Y"><span class="id" type="variable">Y</span></a>.<br/> -<span class="id" type="keyword">Lemma</span> <a name="zipP"><span class="id" type="lemma">zipP</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">P</span>: <span class="id" type="var">_</span> -> <span class="id" type="var">_</span> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#bool"><span class="id" type="inductive">bool</span></a>) (<span class="id" type="var">X</span> <span class="id" type="var">Y</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) <span class="id" type="var">x0</span>:<br/> - <span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#Y"><span class="id" type="variable">Y</span></a> -><br/> - <span class="id" type="inductive">reflect</span> (<span class="id" type="keyword">forall</span> <span class="id" type="var">i</span>, <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <span class="id" type="definition">size</span> (<span class="id" type="definition">zip</span> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a> <a class="idref" href="util_lemmas.html#Y"><span class="id" type="variable">Y</span></a>) -> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) (<span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#x0"><span class="id" type="variable">x0</span></a> <a class="idref" href="util_lemmas.html#Y"><span class="id" type="variable">Y</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>))<br/> - (<span class="id" type="definition">all</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">p</span> => <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#fst"><span class="id" type="definition">fst</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#snd"><span class="id" type="definition">snd</span></a> <a class="idref" href="util_lemmas.html#p"><span class="id" type="variable">p</span></a>)) (<span class="id" type="definition">zip</span> <a class="idref" href="util_lemmas.html#X"><span class="id" type="variable">X</span></a> <a class="idref" href="util_lemmas.html#Y"><span class="id" type="variable">Y</span></a>)).<br/> -<span class="id" type="keyword">Lemma</span> <a name="mem_zip_exists"><span class="id" type="lemma">mem_zip_exists</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">T</span> <span class="id" type="var">T'</span>: <span class="id" type="abbreviation">eqType</span>) (<span class="id" type="var">x1</span>: <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) (<span class="id" type="var">x2</span>: <a class="idref" href="util_lemmas.html#T'"><span class="id" type="variable">T'</span></a>) <span class="id" type="var">l1</span> <span class="id" type="var">l2</span> <span class="id" type="var">elem</span> <span class="id" type="var">elem'</span>,<br/> - <span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#l2"><span class="id" type="variable">l2</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">,</span></a> <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:core_scope:'('_x_','_x_','_'..'_','_x_')'"><span class="id" type="notation">)</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <span class="id" type="definition">zip</span> <a class="idref" href="util_lemmas.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="util_lemmas.html#l2"><span class="id" type="variable">l2</span></a> -><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">exists</span></a> <span class="id" type="var">idx</span><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:'exists'_x_'..'_x_','_x"><span class="id" type="notation">,</span></a><br/> - <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a> <span class="id" type="notation"><</span> <span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a> <span class="id" type="notation"><</span> <span class="id" type="definition">size</span> <a class="idref" href="util_lemmas.html#l2"><span class="id" type="variable">l2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="util_lemmas.html#x1"><span class="id" type="variable">x1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="util_lemmas.html#l1"><span class="id" type="variable">l1</span></a> <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="util_lemmas.html#x2"><span class="id" type="variable">x2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <span class="id" type="definition">nth</span> <a class="idref" href="util_lemmas.html#elem'"><span class="id" type="variable">elem'</span></a> <a class="idref" href="util_lemmas.html#l2"><span class="id" type="variable">l2</span></a> <a class="idref" href="util_lemmas.html#idx"><span class="id" type="variable">idx</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Definition</span> <a name="no_intersection"><span class="id" type="definition">no_intersection</span></a> {<span class="id" type="var">T</span>: <span class="id" type="abbreviation">eqType</span>} (<span class="id" type="var">l1</span> <span class="id" type="var">l2</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :=<br/> - <span class="id" type="notation">~~</span> <span class="id" type="definition">has</span> (<span class="id" type="definition">mem</span> <a class="idref" href="util_lemmas.html#l1"><span class="id" type="variable">l1</span></a>) <a class="idref" href="util_lemmas.html#l2"><span class="id" type="variable">l2</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="leq_big_max"><span class="id" type="lemma">leq_big_max</span></a> <span class="id" type="var">I</span> <span class="id" type="var">r</span> (<span class="id" type="var">P</span> : <span class="id" type="definition">pred</span> <a class="idref" href="util_lemmas.html#I"><span class="id" type="variable">I</span></a>) (<span class="id" type="var">E1</span> <span class="id" type="var">E2</span> : <a class="idref" href="util_lemmas.html#I"><span class="id" type="variable">I</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) :<br/> - (<span class="id" type="keyword">forall</span> <span class="id" type="var">i</span>, <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> -> <a class="idref" href="util_lemmas.html#E1"><span class="id" type="variable">E1</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#E2"><span class="id" type="variable">E2</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a>) -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">max_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <span class="id" type="notation">|</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#E1"><span class="id" type="variable">E1</span></a> <span class="id" type="var">i</span> <span class="id" type="notation"><=</span> <span class="id" type="notation">\</span><span class="id" type="notation">max_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <span class="id" type="notation">|</span> <a class="idref" href="util_lemmas.html#P"><span class="id" type="variable">P</span></a> <span class="id" type="var">i</span><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#E2"><span class="id" type="variable">E2</span></a> <span class="id" type="var">i</span>.<br/> - -<br/> -<span class="id" type="keyword">Variable</span> <a name="l"><span class="id" type="variable">l</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#list"><span class="id" type="inductive">list</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="sum_nat_eq0_nat"><span class="id" type="lemma">sum_nat_eq0_nat</span></a> (<span class="id" type="var">T</span> : <span class="id" type="abbreviation">eqType</span>) (<span class="id" type="var">F</span> : <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>) (<span class="id" type="var">r</span>: <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :<br/> - <span class="id" type="definition">all</span> (<span class="id" type="keyword">fun</span> <span class="id" type="var">x</span> => <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation">==</span> 0) <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="util_lemmas.html#r"><span class="id" type="variable">r</span></a><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">i</span> <span class="id" type="notation">==</span> 0<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a>.<br/> -<span class="id" type="keyword">Lemma</span> <a name="min_lt_same"><span class="id" type="lemma">min_lt_same</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">x</span> <span class="id" type="var">y</span> <span class="id" type="var">z</span>,<br/> - <span class="id" type="definition">minn</span> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <a class="idref" href="util_lemmas.html#z"><span class="id" type="variable">z</span></a> <span class="id" type="notation"><</span> <span class="id" type="definition">minn</span> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a> <a class="idref" href="util_lemmas.html#z"><span class="id" type="variable">z</span></a> -> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#y"><span class="id" type="variable">y</span></a>.<br/> - -<br/> -<span class="id" type="keyword">Lemma</span> <a name="size_bigcat_ord"><span class="id" type="lemma">size_bigcat_ord</span></a> {<span class="id" type="var">T</span>} <span class="id" type="var">n</span> (<span class="id" type="var">i</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span>) (<span class="id" type="var">f</span>: <span class="id" type="notation">'</span><span class="id" type="notation">I_n</span> -> <span class="id" type="abbreviation">seq</span> <a class="idref" href="util_lemmas.html#T"><span class="id" type="variable">T</span></a>) :<br/> - (<span class="id" type="keyword">forall</span> <span class="id" type="var">x</span>, <span class="id" type="definition">size</span> (<a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#x"><span class="id" type="variable">x</span></a>) <span class="id" type="notation"><=</span> 1) -><br/> - <span class="id" type="definition">size</span> (<a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">\</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">cat_</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation"><</span></a> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">(</span></a><a class="idref" href="util_lemmas.html#f"><span class="id" type="variable">f</span></a> <a class="idref" href="util_lemmas.html#i"><span class="id" type="variable">i</span></a><a class="idref" href="util_lemmas.html#:nat_scope:'\cat_'_'('_x_'<'_x_')'_x"><span class="id" type="notation">)</span></a>) <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#n"><span class="id" type="variable">n</span></a>.<br/> -<span class="id" type="keyword">Lemma</span> <a name="extend_sum"><span class="id" type="lemma">extend_sum</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span> <span class="id" type="var">t1'</span> <span class="id" type="var">t2'</span> <span class="id" type="var">F</span>,<br/> - <a class="idref" href="util_lemmas.html#t1'"><span class="id" type="variable">t1'</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#t1"><span class="id" type="variable">t1</span></a> -><br/> - <a class="idref" href="util_lemmas.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="util_lemmas.html#t2'"><span class="id" type="variable">t2'</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">t</span> <span class="id" type="notation"><=</span> <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="util_lemmas.html#t1'"><span class="id" type="variable">t1'</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="util_lemmas.html#t2'"><span class="id" type="variable">t2'</span></a><span class="id" type="notation">)</span> <a class="idref" href="util_lemmas.html#F"><span class="id" type="variable">F</span></a> <span class="id" type="var">t</span>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/workload.html b/workload.html deleted file mode 100644 index ded6280da..000000000 --- a/workload.html +++ /dev/null @@ -1,95 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>workload</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library workload</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="response_time.html#"><span class="id" type="library">response_time</span></a><br/> - <a class="idref" href="schedulability.html#"><span class="id" type="library">schedulability</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">div</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">path</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="Workload"><span class="id" type="module">Workload</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Job</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">Schedule</span> <span class="id" type="var">SporadicTaskArrival</span> <span class="id" type="var">ResponseTime</span> <span class="id" type="var">Schedulability</span>.<br/> - -<br/> - <span class="comment">(* Let's define the workload. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="Workload.WorkloadDef"><span class="id" type="section">WorkloadDef</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Workload.WorkloadDef.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="workload.html#Workload.WorkloadDef.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="workload.html#Workload.WorkloadDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">arr_seq</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.Job"><span class="id" type="variable">Job</span></a>}.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="Workload.WorkloadDef.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Consider some task *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="Workload.WorkloadDef.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="workload.html#Workload.WorkloadDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* First, we define a function that returns the amount of service<br/> - received by this task in a particular processor. *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Workload.service_of_task"><span class="id" type="definition">service_of_task</span></a> (<span class="id" type="var">cpu</span>: <a class="idref" href="schedule.html#Schedule.processor"><span class="id" type="definition">processor</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.num_cpus"><span class="id" type="variable">num_cpus</span></a>)<br/> - (<span class="id" type="var">j</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#option"><span class="id" type="inductive">option</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.arr_seq"><span class="id" type="variable">arr_seq</span></a>)) : <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a> :=<br/> - <span class="id" type="keyword">match</span> <a class="idref" href="workload.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="keyword">with</span><br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#Some"><span class="id" type="constructor">Some</span></a> <span class="id" type="var">j'</span> => (<a class="idref" href="workload.html#Workload.WorkloadDef.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">j'</span> <span class="id" type="notation">==</span> <a class="idref" href="workload.html#Workload.WorkloadDef.tsk"><span class="id" type="variable">tsk</span></a>)<br/> - | <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#None"><span class="id" type="constructor">None</span></a> => 0<br/> - <span class="id" type="keyword">end</span>.<br/> - -<br/> - <span class="comment">(* Next, workload is defined as the service received by jobs of<br/> - the task in the interval <span class="inlinecode"><span class="id" type="var">t1</span>,<span class="id" type="var">t2</span>).</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Workload.workload"><span class="id" type="definition">workload</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><a class="idref" href="workload.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <span class="id" type="var">t</span> <span class="id" type="notation"><</span> <a class="idref" href="workload.html#t2"><span class="id" type="variable">t2</span></a><span class="id" type="notation">)</span><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">cpu</span> <span class="id" type="notation"><</span> <a class="idref" href="workload.html#Workload.WorkloadDef.num_cpus"><span class="id" type="variable">num_cpus</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="workload.html#Workload.service_of_task"><span class="id" type="definition">service_of_task</span></a> <span class="id" type="var">cpu</span> (<a class="idref" href="workload.html#Workload.WorkloadDef.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">cpu</span> <span class="id" type="var">t</span>).<br/> - -<br/> - <span class="comment">(* Now, we define workload by summing up the cumulative service<br/> - during <span class="inlinecode"><span class="id" type="var">t1</span>,<span class="id" type="var">t2</span>)</span> <span class="inlinecode"><span class="id" type="var">of</span></span> <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">scheduled</span></span> <span class="inlinecode"><span class="id" type="var">jobs</span>,</span> <span class="inlinecode"><span class="id" type="var">but</span></span> <span class="inlinecode"><span class="id" type="var">only</span></span> <span class="inlinecode"><span class="id" type="var">those</span></span> <span class="inlinecode"><span class="id" type="var">spawned</span></span> - <span class="inlinecode"><span class="id" type="tactic">by</span></span> <span class="inlinecode"><span class="id" type="var">the</span></span> <span class="inlinecode"><span class="id" type="var">task</span></span> <span class="inlinecode"><span class="id" type="var">that</span></span> <span class="inlinecode"><span class="id" type="var">we</span></span> <span class="inlinecode"><span class="id" type="var">care</span></span> <span class="inlinecode"><span class="id" type="var">about</span>.</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="Workload.workload_joblist"><span class="id" type="definition">workload_joblist</span></a> (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">j</span> <span class="id" type="notation"><-</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload.html#t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">|</span> <a class="idref" href="workload.html#Workload.WorkloadDef.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">j</span> <span class="id" type="notation">==</span> <a class="idref" href="workload.html#Workload.WorkloadDef.tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload.html#Workload.WorkloadDef.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">j</span> <a class="idref" href="workload.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we show that the two definitions are equivalent. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="Workload.workload_eq_workload_joblist"><span class="id" type="lemma">workload_eq_workload_joblist</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="workload.html#Workload.workload"><span class="id" type="definition">workload</span></a> <a class="idref" href="workload.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload.html#t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload.html#Workload.workload_joblist"><span class="id" type="definition">workload_joblist</span></a> <a class="idref" href="workload.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload.html#Workload.WorkloadDef"><span class="id" type="section">WorkloadDef</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="workload.html#"><span class="id" type="module">Workload</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file diff --git a/workload_bound.html b/workload_bound.html deleted file mode 100644 index 6c101d201..000000000 --- a/workload_bound.html +++ /dev/null @@ -1,442 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> -<link href="coqdoc.css" rel="stylesheet" type="text/css"/> -<title>workload_bound</title> -</head> - -<body> - -<div id="page"> - -<div id="header"> -</div> - -<div id="main"> - -<h1 class="libtitle">Library workload_bound</h1> - -<div class="code"> -<span class="id" type="keyword">Require</span> <span class="id" type="keyword">Import</span> <a class="idref" href="workload.html#"><span class="id" type="library">workload</span></a> <a class="idref" href="Vbase.html#"><span class="id" type="library">Vbase</span></a> <a class="idref" href="job.html#"><span class="id" type="library">job</span></a> <a class="idref" href="task.html#"><span class="id" type="library">task</span></a> <a class="idref" href="schedule.html#"><span class="id" type="library">schedule</span></a> <a class="idref" href="task_arrival.html#"><span class="id" type="library">task_arrival</span></a> <a class="idref" href="response_time.html#"><span class="id" type="library">response_time</span></a><br/> - <a class="idref" href="schedulability.html#"><span class="id" type="library">schedulability</span></a> <a class="idref" href="util_divround.html#"><span class="id" type="library">util_divround</span></a> <a class="idref" href="util_lemmas.html#"><span class="id" type="library">util_lemmas</span></a><br/> - <span class="id" type="library">ssreflect</span> <span class="id" type="library">ssrbool</span> <span class="id" type="library">eqtype</span> <span class="id" type="library">ssrnat</span> <span class="id" type="library">seq</span> <span class="id" type="library">div</span> <span class="id" type="library">fintype</span> <span class="id" type="library">bigop</span> <span class="id" type="library">path</span>.<br/> - -<br/> -<span class="id" type="keyword">Module</span> <a name="WorkloadBound"><span class="id" type="module">WorkloadBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Import</span> <span class="id" type="var">Job</span> <span class="id" type="var">SporadicTaskset</span> <span class="id" type="var">ScheduleOfSporadicTask</span> <span class="id" type="var">SporadicTaskArrival</span> <span class="id" type="var">ResponseTime</span> <span class="id" type="var">Schedulability</span> <span class="id" type="var">Workload</span>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.WorkloadBoundDef"><span class="id" type="section">WorkloadBoundDef</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.WorkloadBoundDef.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.WorkloadBoundDef.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.WorkloadBoundDef.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.WorkloadBoundDef.R_tsk"><span class="id" type="variable">R_tsk</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>. <span class="comment">(* Known response-time bound for the task *)</span><br/> - <span class="id" type="keyword">Variable</span> <span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>. <span class="comment">(* Length of the interval *)</span><br/> - -<br/> - <span class="comment">(* Bound on the number of jobs that execute completely in the interval *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="WorkloadBound.max_jobs"><span class="id" type="definition">max_jobs</span></a> :=<br/> - <a class="idref" href="util_divround.html#div_floor"><span class="id" type="definition">div_floor</span></a> (<span class="id" type="keyword">delta</span> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation">-</span> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.tsk"><span class="id" type="variable">tsk</span></a>) (<a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.tsk"><span class="id" type="variable">tsk</span></a>).<br/> - -<br/> - <span class="comment">(* Bertogna and Cirinei's bound on the workload of a task in an interval of length delta *)</span><br/> - <span class="id" type="keyword">Definition</span> <a name="WorkloadBound.W"><span class="id" type="definition">W</span></a> :=<br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">e_k</span> := (<a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.tsk"><span class="id" type="variable">tsk</span></a>) <span class="id" type="keyword">in</span><br/> - <span class="id" type="keyword">let</span> <span class="id" type="var">p_k</span> := (<a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.tsk"><span class="id" type="variable">tsk</span></a>) <span class="id" type="keyword">in</span> <br/> - <span class="id" type="definition">minn</span> <a class="idref" href="workload_bound.html#e_k"><span class="id" type="variable">e_k</span></a> (<span class="id" type="keyword">delta</span> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation">-</span> <a class="idref" href="workload_bound.html#e_k"><span class="id" type="variable">e_k</span></a> <span class="id" type="notation">-</span> <a class="idref" href="workload_bound.html#WorkloadBound.max_jobs"><span class="id" type="definition">max_jobs</span></a> <span class="id" type="notation">*</span> <a class="idref" href="workload_bound.html#p_k"><span class="id" type="variable">p_k</span></a>) <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.max_jobs"><span class="id" type="definition">max_jobs</span></a> <span class="id" type="notation">*</span> <a class="idref" href="workload_bound.html#e_k"><span class="id" type="variable">e_k</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.WorkloadBoundDef"><span class="id" type="section">WorkloadBoundDef</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.BasicLemmas.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="comment">(* Let tsk be any task...*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* ...with period > 0. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.BasicLemmas.H_period_positive"><span class="id" type="variable">H_period_positive</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="comment">(* Let R1 <= R2 be two response-time bounds that<br/> - are larger than the cost of the tsk. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.BasicLemmas.R1"><span class="id" type="variable">R1</span></a> <a name="WorkloadBound.BasicLemmas.R2"><span class="id" type="variable">R2</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.BasicLemmas.H_R_lower_bound"><span class="id" type="variable">H_R_lower_bound</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.R1"><span class="id" type="variable">R1</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.BasicLemmas.H_R1_le_R2"><span class="id" type="variable">H_R1_le_R2</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.R1"><span class="id" type="variable">R1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.R2"><span class="id" type="variable">R2</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.BasicLemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> := <a class="idref" href="workload_bound.html#WorkloadBound.W"><span class="id" type="definition">W</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Then, Bertogna and Cirinei's workload bound is monotonically increasing. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.W_monotonic"><span class="id" type="lemma">W_monotonic</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">t1</span> <span class="id" type="var">t2</span>,<br/> - <a class="idref" href="workload_bound.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#t2"><span class="id" type="variable">t2</span></a> -><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.R1"><span class="id" type="variable">R1</span></a> <a class="idref" href="workload_bound.html#t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.workload_bound"><span class="id" type="variable">workload_bound</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas.R2"><span class="id" type="variable">R2</span></a> <a class="idref" href="workload_bound.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - <span class="comment">(* Prove special case for p <= 1. *)</span><br/> - Harder case: p > 1. *)</span><br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.BasicLemmas"><span class="id" type="section">BasicLemmas</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.ProofWorkloadBound"><span class="id" type="section">ProofWorkloadBound</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">sporadic_task</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.task_deadline"><span class="id" type="variable">task_deadline</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">Job</span>: <span class="id" type="abbreviation">eqType</span>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.job_cost"><span class="id" type="variable">job_cost</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.job_deadline"><span class="id" type="variable">job_deadline</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.Job"><span class="id" type="variable">Job</span></a> -> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.arrival_sequence"><span class="id" type="definition">arrival_sequence</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.Job"><span class="id" type="variable">Job</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that all jobs have valid parameters *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_jobs_have_valid_parameters"><span class="id" type="variable">H_jobs_have_valid_parameters</span></a> :<br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="job.html#Job.valid_sporadic_job"><span class="id" type="definition">valid_sporadic_job</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a>.<br/> - -<br/> - <span class="comment">(* Consider any schedule. *)</span><br/> - <span class="id" type="keyword">Context</span> {<span class="id" type="var">num_cpus</span>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>}.<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a>: <a class="idref" href="schedule.html#Schedule.schedule"><span class="id" type="definition">schedule</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.num_cpus"><span class="id" type="variable">num_cpus</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - -<br/> - <span class="comment">(* Assumption: jobs only execute if they arrived.<br/> - This is used to eliminate jobs that arrive after end of the interval t1 + delta. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_jobs_must_arrive_to_execute"><span class="id" type="variable">H_jobs_must_arrive_to_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_must_arrive_to_execute"><span class="id" type="definition">jobs_must_arrive_to_execute</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assumption: jobs do not execute after they completed.<br/> - This is used to eliminate jobs that complete before the start of the interval t1. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_completed_jobs_dont_execute"><span class="id" type="variable">H_completed_jobs_dont_execute</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.completed_jobs_dont_execute"><span class="id" type="definition">completed_jobs_dont_execute</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assumptiom: Jobs do not execute in parallel.<br/> - This is required to use interval lengths as a measure of service. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_no_parallelism"><span class="id" type="variable">H_no_parallelism</span></a>:<br/> - <a class="idref" href="schedule.html#Schedule.jobs_dont_execute_in_parallel"><span class="id" type="definition">jobs_dont_execute_in_parallel</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - -<br/> - <span class="comment">(* Assumption: sporadic task model.<br/> - This is necessary to conclude that consecutive jobs ordered by arrival times<br/> - are separated by at least 'period' times units. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_sporadic_tasks"><span class="id" type="variable">H_sporadic_tasks</span></a>: <a class="idref" href="task_arrival.html#SporadicTaskArrival.sporadic_task_model"><span class="id" type="definition">sporadic_task_model</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a>.<br/> - -<br/> - <span class="comment">(* Before starting the proof, let's give simpler names to the definitions. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.job_has_completed_by"><span class="id" type="variable">job_has_completed_by</span></a> := <a class="idref" href="schedule.html#Schedule.completed"><span class="id" type="definition">completed</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.no_deadline_misses_by"><span class="id" type="variable">no_deadline_misses_by</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">t</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="schedulability.html#Schedulability.task_misses_no_deadline_before"><span class="id" type="definition">task_misses_no_deadline_before</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_cost"><span class="id" type="variable">job_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_deadline"><span class="id" type="variable">job_deadline</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="workload_bound.html#t"><span class="id" type="variable">t</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.workload_of"><span class="id" type="variable">workload_of</span></a> (<span class="id" type="var">tsk</span>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>) (<span class="id" type="var">t1</span> <span class="id" type="var">t2</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>) :=<br/> - <a class="idref" href="workload.html#Workload.workload"><span class="id" type="definition">workload</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="workload_bound.html#t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Now we define the theorem. Let tsk be any task in the taskset. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sporadic_task"><span class="id" type="variable">sporadic_task</span></a>.<br/> - -<br/> - <span class="comment">(* Assumption: the task must have valid parameters:<br/> - a) period > 0 (used in divisions)<br/> - b) deadline of the jobs = deadline of the task<br/> - c) cost <= period<br/> - (used to prove that the distance between the first and last<br/> - jobs is at least (cost + n*period), where n is the number<br/> - of middle jobs. If cost >> period, the claim does not hold<br/> - for every task set. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_valid_task_parameters"><span class="id" type="variable">H_valid_task_parameters</span></a>:<br/> - <a class="idref" href="task.html#SporadicTask.is_valid_sporadic_task"><span class="id" type="definition">is_valid_sporadic_task</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Assumption: the task must have a restricted deadline.<br/> - This is required to prove that n_k (max_jobs) from Bertogna<br/> - and Cirinei's formula accounts for at least the number of<br/> - middle jobs (i.e., number of jobs - 2 in the worst case). *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_restricted_deadline"><span class="id" type="variable">H_restricted_deadline</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Consider an interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t1</span></span> <span class="inlinecode">+</span> <span class="inlinecode"><span class="id" type="keyword">delta</span>),</span> <span class="inlinecode"><span class="id" type="keyword">with</span></span> <span class="inlinecode"><span class="id" type="keyword">no</span></span> <span class="inlinecode"><span class="id" type="var">deadline</span></span> <span class="inlinecode"><span class="id" type="var">misses</span>.</span> <span class="inlinecode"></span>*)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="keyword">delta</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_no_deadline_misses_during_interval"><span class="id" type="variable">H_no_deadline_misses_during_interval</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.no_deadline_misses_by"><span class="id" type="variable">no_deadline_misses_by</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> (<a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>).<br/> - -<br/> - <span class="comment">(* Assume that a response-time bound R_tsk for that task in any<br/> - schedule of this processor platform is also given,<br/> - such that R_tsk >= task_cost tsk. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.time"><span class="id" type="definition">time</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_response_time_ge_cost"><span class="id" type="variable">H_response_time_ge_cost</span></a>: <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.H_response_time_bound"><span class="id" type="variable">H_response_time_bound</span></a> : <br/> - <span class="id" type="keyword">forall</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>),<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> -><br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation"><</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span> -><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_has_completed_by"><span class="id" type="variable">job_has_completed_by</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> (<a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a>).<br/> - -<br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="comment">(* In this section, we prove that the workload of a task in the<br/> - interval <span class="inlinecode"><span class="id" type="var">t1</span>,</span> <span class="inlinecode"><span class="id" type="var">t1</span></span> <span class="inlinecode">+</span> <span class="inlinecode"><span class="id" type="keyword">delta</span>)</span> <span class="inlinecode"><span class="id" type="var">is</span></span> <span class="inlinecode"><span class="id" type="var">bounded</span></span> <span class="inlinecode"><span class="id" type="tactic">by</span></span> <span class="inlinecode"><span class="id" type="var">W</span>.</span> <span class="inlinecode"></span>*)</span><br/> - -<br/> - <span class="comment">(* Let's simplify the names a bit. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> := <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> := <a class="idref" href="workload_bound.html#WorkloadBound.max_jobs"><span class="id" type="definition">max_jobs</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="keyword">delta</span>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.workload_bound"><span class="id" type="variable">workload_bound</span></a> := <a class="idref" href="workload_bound.html#WorkloadBound.W"><span class="id" type="definition">W</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="keyword">delta</span>.<br/> - -<br/> - <span class="comment">(* Identify the subset of jobs that actually cause interference *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a> :=<br/> - <span class="id" type="definition">filter</span> (<span class="id" type="keyword">fun</span> (<span class="id" type="var">j</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>) =><br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">==</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">&&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">(</span></a><a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0<a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#:bool_scope:x_'&&'_x"><span class="id" type="notation">)</span></a>)<br/> - (<a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>).<br/> - -<br/> - <span class="comment">(* Now, let's consider the list of interfering jobs sorted by arrival time. *)</span><br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.order"><span class="id" type="variable">order</span></a> := <span class="id" type="keyword">fun</span> (<span class="id" type="var">x</span> <span class="id" type="var">y</span>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>) => <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#x"><span class="id" type="variable">x</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#y"><span class="id" type="variable">y</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> := (<span class="id" type="definition">sort</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.order"><span class="id" type="variable">order</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a>).<br/> - -<br/> - <span class="comment">(* The first step consists in simplifying the sum corresponding<br/> - to the workload. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.SimplifyJobSequence"><span class="id" type="section">SimplifyJobSequence</span></a>.<br/> - -<br/> - <span class="comment">(* Remove the elements that we don't care about from the sum *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_simpl_by_filtering_interfering_jobs"><span class="id" type="lemma">workload_bound_simpl_by_filtering_interfering_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">|</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <span class="id" type="var">i</span> <span class="id" type="notation">==</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">i</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">i</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Consider the sum over the sorted sequence of jobs. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_simpl_by_sorting_interfering_jobs"><span class="id" type="lemma">workload_bound_simpl_by_sorting_interfering_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">i</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">i</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Remember that both sequences have the same set of elements *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_job_in_same_sequence"><span class="id" type="lemma">workload_bound_job_in_same_sequence</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j</span>,<br/> - <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.interfering_jobs"><span class="id" type="variable">interfering_jobs</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">(</span></a><a class="idref" href="workload_bound.html#j"><span class="id" type="variable">j</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">)</span></a>.<br/> - -<br/> - <span class="comment">(* Remember that all jobs in the sorted sequence is an<br/> - interfering job of task tsk. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_all_jobs_from_tsk"><span class="id" type="lemma">workload_bound_all_jobs_from_tsk</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">j_i</span>,<br/> - <a class="idref" href="workload_bound.html#j_i"><span class="id" type="variable">j_i</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> -><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#j_i"><span class="id" type="variable">j_i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#j_i"><span class="id" type="variable">j_i</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="workload_bound.html#j_i"><span class="id" type="variable">j_i</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Remember that consecutive jobs are ordered by arrival. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_jobs_ordered_by_arrival"><span class="id" type="lemma">workload_bound_jobs_ordered_by_arrival</span></a> :<br/> - <span class="id" type="keyword">forall</span> <span class="id" type="var">i</span> <span class="id" type="var">elem</span>,<br/> - <a class="idref" href="workload_bound.html#i"><span class="id" type="variable">i</span></a> <span class="id" type="notation"><</span> <span class="id" type="notation">(</span><span class="id" type="definition">size</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><span class="id" type="notation">).-1</span> -><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.order"><span class="id" type="variable">order</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="workload_bound.html#i"><span class="id" type="variable">i</span></a>) (<span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="workload_bound.html#i"><span class="id" type="variable">i</span></a><span class="id" type="notation">.+1</span>).<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.SimplifyJobSequence"><span class="id" type="section">SimplifyJobSequence</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we show that if the number of jobs is no larger than n_k,<br/> - the workload bound trivially holds. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadNotManyJobs"><span class="id" type="section">WorkloadNotManyJobs</span></a>.<br/> - -<br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_holds_for_at_most_n_k_jobs"><span class="id" type="lemma">workload_bound_holds_for_at_most_n_k_jobs</span></a> :<br/> - <span class="id" type="definition">size</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> -><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span><span class="id" type="var">i</span> <span class="id" type="notation"><-</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a><span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <span class="id" type="var">i</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound"><span class="id" type="variable">workload_bound</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadNotManyJobs"><span class="id" type="section">WorkloadNotManyJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Otherwise, assume that the number of jobs is larger than n_k >= 0.<br/> - First, consider the simple case with only one job. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob"><span class="id" type="section">WorkloadSingleJob</span></a>.<br/> - -<br/> - <span class="comment">(* Assume that there's at least one job in the sorted list. *)</span><br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.H_at_least_one_job"><span class="id" type="variable">H_at_least_one_job</span></a>: <span class="id" type="definition">size</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="notation">></span> 0.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem"><span class="id" type="variable">elem</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst"><span class="id" type="variable">j_fst</span></a> := <span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> 0.<br/> - -<br/> - <span class="comment">(* The first job is an interfering job of task tsk. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_j_fst_is_job_of_tsk"><span class="id" type="lemma">workload_bound_j_fst_is_job_of_tsk</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* The workload bound holds for the single job. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_holds_for_a_single_job"><span class="id" type="lemma">workload_bound_holds_for_a_single_job</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> 1<span class="id" type="notation">)</span> <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="var">i</span>) <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound"><span class="id" type="variable">workload_bound</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadSingleJob"><span class="id" type="section">WorkloadSingleJob</span></a>.<br/> - -<br/> - <span class="comment">(* Next, consider the last case where there are at least two jobs:<br/> - the first job j_fst, and the last job j_lst. *)</span><br/> - <span class="id" type="keyword">Section</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs"><span class="id" type="section">WorkloadTwoOrMoreJobs</span></a>.<br/> - -<br/> - <span class="comment">(* There are at least two jobs. *)</span><br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a>: <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" type="inductive">nat</span></a>.<br/> - <span class="id" type="keyword">Hypothesis</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.H_at_least_two_jobs"><span class="id" type="variable">H_at_least_two_jobs</span></a> : <span class="id" type="definition">size</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+2</span>.<br/> - -<br/> - <span class="id" type="keyword">Variable</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem"><span class="id" type="variable">elem</span></a>: <a class="idref" href="arrival_sequence.html#ArrivalSequence.JobIn"><span class="id" type="record">JobIn</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.arr_seq"><span class="id" type="variable">arr_seq</span></a>.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> := <span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> 0.<br/> - <span class="id" type="keyword">Let</span> <a name="WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> := <span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span>.<br/> - -<br/> - <span class="comment">(* The last job is an interfering job of task tsk. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_j_lst_is_job_of_tsk"><span class="id" type="lemma">workload_bound_j_lst_is_job_of_tsk</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.job_task"><span class="id" type="variable">job_task</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">!=</span> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'/\'_x"><span class="id" type="notation">/\</span></a><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <span class="id" type="notation">\</span><span class="id" type="keyword">in</span> <a class="idref" href="schedule.html#Schedule.jobs_scheduled_between"><span class="id" type="definition">jobs_scheduled_between</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* The response time of the first job must fall inside the interval. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_response_time_of_first_job_inside_interval"><span class="id" type="lemma">workload_bound_response_time_of_first_job_inside_interval</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a>.<br/> - -<br/> - <span class="comment">(* The arrival of the last job must also fall inside the interval. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_last_job_arrives_before_end_of_interval"><span class="id" type="lemma">workload_bound_last_job_arrives_before_end_of_interval</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <span class="id" type="notation"><</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a>.<br/> - -<br/> - <span class="comment">(* Next, we upper-bound the service of the first and last jobs using their arrival times. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_service_of_first_and_last_jobs"><span class="id" type="lemma">workload_bound_service_of_first_and_last_jobs</span></a> :<br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span><br/> - <span class="id" type="notation">(</span><a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation">-</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a><span class="id" type="notation">)</span> <span class="id" type="notation">+</span> <span class="id" type="notation">(</span><a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">-</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a><span class="id" type="notation">)</span>.<br/> - <span class="comment">(* Simplify the expression from the previous lemma. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_simpl_expression_with_first_and_last"><span class="id" type="lemma">workload_bound_simpl_expression_with_first_and_last</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation">-</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">+</span> <span class="id" type="notation">(</span><a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">-</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a><span class="id" type="notation">)</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a><br/> - <span class="id" type="keyword">delta</span> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.R_tsk"><span class="id" type="variable">R_tsk</span></a> <span class="id" type="notation">-</span> <span class="id" type="notation">(</span><a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <span class="id" type="notation">-</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a><span class="id" type="notation">)</span>.<br/> - -<br/> - <span class="comment">(* Bound the service of the middle jobs. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_service_of_middle_jobs"><span class="id" type="lemma">workload_bound_service_of_middle_jobs</span></a> :<br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="var">i</span><span class="id" type="notation">.+1</span>) <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation"><=</span><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a> <span class="id" type="notation">*</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_cost"><span class="id" type="variable">task_cost</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - -<br/> - <span class="comment">(* Conclude that the distance between first and last is at least num_mid_jobs + 1 periods. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_many_periods_in_between"><span class="id" type="lemma">workload_bound_many_periods_in_between</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <span class="id" type="notation">-</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span> <span class="id" type="notation">*</span> <span class="id" type="notation">(</span><a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a><span class="id" type="notation">)</span>.<br/> - <span class="comment">(* To simplify, call the jobs 'cur' and 'next' *)</span><br/> - <span class="comment">(* Show that cur arrives earlier than next *)</span><br/> - <span class="comment">(* Show that both cur and next are in the arrival sequence *)</span><br/> - <span class="comment">(* Use the sporadic task model to conclude that cur and next are separated<br/> - by at least (task_period tsk) units. Of course this only holds if cur != next.<br/> - Since we don't know much about the list (except that it's sorted), we must<br/> - also prove that it doesn't contain duplicates. *)</span><br/> - -<br/> - <span class="comment">(* Now, we prove an auxiliary lemma for the next result.<br/> - The statement is not meaningful, since it's part of a proof<br/> - by contradiction. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_helper_lemma"><span class="id" type="lemma">workload_bound_helper_lemma</span></a> :<br/> - <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_period"><span class="id" type="variable">task_period</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> -><br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation"><=</span> <a class="idref" href="arrival_sequence.html#ArrivalSequence.job_arrival"><span class="id" type="definition">job_arrival</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <span class="id" type="notation">+</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.task_deadline"><span class="id" type="variable">task_deadline</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a>.<br/> - Prove that arr_fst + d_k <= t2 *)</span><br/> - <span class="comment">(* Now we assume that (job_arrival j_fst + d_k < t1) and reach a contradiction.<br/> - Since j_fst doesn't miss deadlines, then the service it receives between t1 and t2<br/> - equals 0, which contradicts the previous assumption that j_fst interferes in<br/> - the scheduling window. *)</span><br/> - <span class="comment">(* Prove that n_k is at least the number of the middle jobs *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_n_k_covers_middle_jobs"><span class="id" type="lemma">workload_bound_n_k_covers_middle_jobs</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> <span class="id" type="notation">>=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a>.<br/> - -<br/> - <span class="comment">(* If n_k = num_mid_jobs, then the workload bound holds. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_n_k_equals_num_mid_jobs"><span class="id" type="lemma">workload_bound_n_k_equals_num_mid_jobs</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="var">i</span><span class="id" type="notation">.+1</span>) <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a><br/> - <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound"><span class="id" type="variable">workload_bound</span></a>.<br/> - <span class="comment">(* If n_k = num_mid_jobs + 1, then the workload bound holds. *)</span><br/> - <span class="id" type="keyword">Lemma</span> <a name="WorkloadBound.workload_bound_n_k_equals_num_mid_jobs_plus_1"><span class="id" type="lemma">workload_bound_n_k_equals_num_mid_jobs_plus_1</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">.+1</span> <a class="idref" href="http://coq.inria.fr/distrib/8.4pl4/stdlib/Coq.Init.Logic.html#:type_scope:x_'='_x"><span class="id" type="notation">=</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.n_k"><span class="id" type="variable">n_k</span></a> -><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_lst"><span class="id" type="variable">j_lst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.j_fst"><span class="id" type="variable">j_fst</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a> <span class="id" type="notation">+</span><br/> - <span class="id" type="notation">\</span><span class="id" type="notation">sum_</span><span class="id" type="notation">(</span>0 <span class="id" type="notation"><=</span> <span class="id" type="var">i</span> <span class="id" type="notation"><</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.num_mid_jobs"><span class="id" type="variable">num_mid_jobs</span></a><span class="id" type="notation">)</span><br/> - <a class="idref" href="schedule.html#Schedule.service_during"><span class="id" type="definition">service_during</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.sched"><span class="id" type="variable">sched</span></a> (<span class="id" type="definition">nth</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs.elem"><span class="id" type="variable">elem</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.sorted_jobs"><span class="id" type="variable">sorted_jobs</span></a> <span class="id" type="var">i</span><span class="id" type="notation">.+1</span>) <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.t2"><span class="id" type="variable">t2</span></a><br/> - <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound"><span class="id" type="variable">workload_bound</span></a>.<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.WorkloadTwoOrMoreJobs"><span class="id" type="section">WorkloadTwoOrMoreJobs</span></a>.<br/> - -<br/> - <span class="comment">(* Using the lemmas above, we prove the main theorem about the workload bound. *)</span><br/> - <span class="id" type="keyword">Theorem</span> <a name="WorkloadBound.workload_bounded_by_W"><span class="id" type="lemma">workload_bounded_by_W</span></a> :<br/> - <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.workload_of"><span class="id" type="variable">workload_of</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.tsk"><span class="id" type="variable">tsk</span></a> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> (<a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.t1"><span class="id" type="variable">t1</span></a> <span class="id" type="notation">+</span> <span class="id" type="keyword">delta</span>) <span class="id" type="notation"><=</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof.workload_bound"><span class="id" type="variable">workload_bound</span></a>.<br/> - <span class="comment">(* Use the definition of workload based on list of jobs. *)</span><br/> - <span class="comment">(* We only care about the jobs that cause interference. *)</span><br/> - <span class="comment">(* Now we order the list by job arrival time. *)</span><br/> - <span class="comment">(* Next, we show that the workload bound holds if n_k<br/> - is no larger than the number of interferings jobs. *)</span><br/> - <span class="comment">(* Find some dummy element to use in the nth function *)</span><br/> - <span class="comment">(* Now we index the sum to access the first and last elements. *)</span><br/> - <span class="comment">(* First, we show that the bound holds for an empty list of jobs. *)</span><br/> - <span class="comment">(* Then, we show the same for a singleton set of jobs. *)</span><br/> - <span class="comment">(* Knowing that we have at least two elements, we take first and last out of the sum *)</span><br/> - <span class="comment">(* There are two cases to be analyze since n <= n_k < n + 2,<br/> - where n is the number of middle jobs. *)</span><br/> - Case 1: n_k = n + 1, where n is the number of middle jobs. *)</span><br/> - Case 2: n_k = n, where n is the number of middle jobs. *)</span><br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound.MainProof"><span class="id" type="section">MainProof</span></a>.<br/> - -<br/> - <span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#WorkloadBound.ProofWorkloadBound"><span class="id" type="section">ProofWorkloadBound</span></a>.<br/> - -<br/> -<span class="id" type="keyword">End</span> <a class="idref" href="workload_bound.html#"><span class="id" type="module">WorkloadBound</span></a>.<br/> -</div> -</div> - -<div id="footer"> -<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> -</div> - -</div> - -</body> -</html> \ No newline at end of file -- GitLab