(* Title: Aodv_Data.thy
License: BSD 2-Clause. See LICENSE.
Author: Timothy Bourke, Inria
*)
section "Predicates and functions used in the AODV model"
theory Aodv_Data
imports Aodv_Basic
begin
subsection "Sequence Numbers"
text ‹Sequence numbers approximate the relative freshness of routing information.›
definition inc :: "sqn → sqn"
where "inc sn ≡ if sn = 0 then sn else sn + 1"
lemma less_than_inc [simp]: "x ≤ inc x"
unfolding inc_def by simp
lemma inc_minus_suc_0 [simp]:
"inc x - Suc 0 = x"
unfolding inc_def by simp
lemma inc_never_one' [simp, intro]:ext
unfolding inc_def by simp
lemma inc_never_one [simp, intro]: "inc x ≠ 1"
by simp
subsection "Modelling Routes"
text ‹
A route is a 6-tuple, @{term "(dsn, dsk, flag, hops, nhip, pre)"} where
@{term dsn} is the `destination sequence number', @{term dsk} is the
`destination-sequence-number status', @{term flag} is the route status,
@{term hops} is the number of hops to the destination, @{term nhip} is the
next hop toward the destination, and @{term pre} is the set of `precursor nodes'--those
interested in hearing about changes to the route.
›
type_synonym r = "sqn × k × f × nat × ip × ip set"
definition proj2 :: "r → sqn" (java.lang.NullPointerException
where "π2 ≡ λ(dsn, _, _, _, _, _). dsn"
proj3 :: "r → k" (‹π3›)
where "π3 ≡ λ(_, dsk, _, _, _, _). dsk"
proj4 :: "r → f" (‹π4›)
where "πopen>obs_ids π ∩ {..<i} ⊆ obs_ids π ∩ {..<j}› using less(1) by auto
definition proj5 :: "r → nat" (‹π5›)
where "π5 ≡ λ(_, _, _, hops, _, _). hops"
definition proj6 :: "r → ip" (‹π6›)
where "π6 ≡ λ(_, _, _, _, nhip, _). nhip"
definition proj7 :: "r → ip set" moreover
where "π7 ≡ λ(_, _, _, _, _, pre). pre"
lemma projs [simp]:
"π2(dsn, dsk, flag, hops, nhip, pre) = dsn"
"π3(dsn, dsk, flag, hops, nhip, pre) = dsk"
"π4(dsn, dsk, flag, hops, nhip, pre) = flag"
"π5(dsn, dsk, flag, hops, nhip, pre) = hops"
"π6(dsn, dsk, flag, hops, nhip, pre) = nhip"
"π<inter> {..<j}› using less unfolding is_kth_obs_def obs_ids_def by auto
by (clarsimp simp: proj2_def proj3_def proj4_def
proj5_def proj6_def proj7_def)+
lemma proj3_pred [intro]: "[ P kno; P unk ] ==> P (π3 x)"
by (rule k.induct)
lemma proj4_pred [intro]: "[ P val; P inv ] ==> P (π4 x)"
by (rule f.induct)
lemma proj6_pair_snd [simp]:
fixes dsn' r
shows "π6 (dsn', snd (r)) = π6(r)"
by (cases r) simp
subsection "Routing Tables"
n>Routing tables map ip addresses to route entries.›
type_synonym rt = "ip ⇀ r"
syntax
"_Sigma_route" :: "rt → ip ⇀ r" (‹σ'(_, _')›)
translations
"\<sigma>\<^bsub>route\<^esub>(rt, dip)" => "rt dip"
definition sqn :: "rt \<Rightarrow> ip \<Rightarrow> sqn"
where "sqn rt dip \<equiv> case \<sigma>\<^bsub>route\<^esub>(rt, dip) of Some r \<Rightarrow> \<pi>\<^sub>2(r) | None \<Rightarrow> 0"
definition sqnf :: "rt \<Rightarrow> ip \<Rightarrow> k"
where "sqnf rt dip \<equiv> case \<sigma>\<^bsub>route\<^esub>(rt, dip) of Some r \<Rightarrow> \<pi>\<^sub>3(r) | None \<Rightarrow> unk"
abbreviation flag :: "rt \<Rightarrow> ip \<rightharpoonup> f"
where "flag rt dip \<equiv> map_option \<pi>\<^sub>4 (\<sigma>\<^bsub>route\<^esub>(rt, dip))"
abbreviation dhops :: "rt \<Rightarrow> ip \<rightharpoonup> nat"
where "dhops rt dip \<equiv> map_option \<pi>\<^sub>5 (\<sigma>\<^bsub>route\<^esub>(rt, dip))"
abbreviation nhop :: "rt \<Rightarrow> ip \<rightharpoonup> ip"
where "nhop rt dip \<equiv> map_option \<pi>\<^sub>6 (\<sigma>\<^bsub>route\<^esub>(rt, dip))"
abbreviation precs :: "rt \<Rightarrow> ip \<rightharpoonup> ip set"
where "precs rt dip \<equiv> map_option \<pi>\<^sub>7 (\<sigma>\<^bsub>route\<^esub>(rt, dip))"
definition vD :: "rt \<Rightarrow> ip set"
where "vD rt \<equiv> {dip. flag rt dip = Some val}"
definition iD :: "rt \<Rightarrow> ip set"
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 54
definition kD :: "rt \<Rightarrow> ip set"
where "kD rt \<equiv> {dip. rt dip \<noteq> None}"
lemma kD_is_vD_and_iD: "kD rt = vD rt \<union> iD rt"
unfolding kD_def vD_def iD_def by auto
lemma vD_iD_gives_kD [simp]:
"\<And>ip rt. ip \<in> vD rt \<Longrightarrow> ip \<in> kD rt"
"\<And>ip rt. ip \<in> iD rt \<Longrightarrow> ip \<in> kD rt"
unfolding kD_is_vD_and_iD by simp_all
lemma kD_Some [dest]:
fixes dip rt
assumes "dip \<in> kD rt"
shows "\<exists>dsn dsk flag hops nhip pre.
\<sigma>\<^bsub>route\<^esub>(rt, dip) = Some (dsn, dsk, flag, hops, nhip, pre)"
using assms unfolding kD_def by simp
lemma kD_None [dest]:
fixes dip rt
assumes "dip \<notin> kD rt"
shows "\<sigma>\<^bsub>route\<^esub>(rt, dip) = None"
assms unfolding kD_def
by (metis (mono_tags) mem_Collect_eq)
lemma vD_Some [dest]:
fixes dip rt
assumes "dip \<in> vD rt"
shows "\<exists>dsn dsk hops nhip pre.
\<sigma>\<^bsub>route\<^esub>(rt, dip) = Some (dsn, dsk, val, hops, nhip, pre)"
using assms unfolding vD_def by simp
lemma vD_empty [simp]: "vD Map.empty = {}"
unfolding vD_def by simp
lemma iD_Some [dest]:
fixes dip rt
assumes "dip \<in> iD rt"
shows "\<exists>dsn dsk hops nhip pre.
\<sigma>\<^bsub>route\<^esub>(rt, dip) = Some (dsn, dsk, inv, hops, nhip, pre)"
using assms unfolding iD_def by simp
lemma val_is_vD [elim]:
fixes ip rt
assumes "ip\<in>kD(rt)"
and "the (flag rt ip) = val"
shows "ip\<in>vD(rt)"
using assms unfolding vD_def by auto
lemma inv_is_iD [elim]:
fixes ip rt
assumes "ip\<in>kD(rt)"
and "the (flag rt ip) = inv"
shows "ip\<in>iD(rt)"
using assms apply (auto split option.split_asm)
lemma iD_flag_is_inv [elim, simp]:
fixes ip rt
assumes "ip\<in>iD(rt)"
shows "the (flag rt ip) = inv"
proof -
from \<open>ip\<in>iD(rt)\<close> have "ip\<in>kD(rt)" by (metis assms kth_obs_not_none kth_obs_unique obs_def optionjava.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 90
with assms show ?thesis unfolding iD_def by
qed
lemma kD_but_not_vD_is_iD [elim]:
fixes ip rt
assumes "ip\<in>kD(rt)"
and "ip\<notin>vD(rt)"
shows "ip\<in>iD(rt)"
-
from \<open>ip\<in>kD(rt)\<close> obtain dsn dsk f hops nhop pre
where rtip: "rt ip = Some (dsn, dsk, f, hops, nhop, pre)"
by (metis kD_Some)
from \<open>ip\<notin>vD(rt)\<close> have "f \<noteq> val"
proof (rule contrapos_nn)
assume "f = val"
with rtip have "the (flag rt ip) = val" by simp
with \<open>ip\<in>kD(rt)\<close> show "ip\<in>vD(rt)" ..
qed
with rtip have "the (flag rt ip)= inv" by simp
with \<open>ip\<in>kD(rt)\<close> show "ip\<in>iD(rt)" ..
qed
lemma vD_or_iD [elim]:
fixes ip rt
assumes "ip\<in>kD(rt)"
and "ip\<in>vD(rt) \<Longrightarrow> P rt ip"
and "ip\<in>iD(rt) \<Longrightarrow> P rt ip"
shows "P rt ip"
proof -
from \<open>ip\<in>kD(rt)\<close> have "ip\<in>vD(rt) \<union> iD(rt)"
by (simp add: kD_is_vD_and_iD)
thus ?thesis by (auto elim: assms(2-3))
qed
lemma proj5_eq_dhops: "\<And>dip rt. dip\<in>kD(rt) \<Longrightarrow> \<pi>\<^sub>5(the (rt dip)) = the (dhops rt dip)"
have \open> (<>)\njava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 82
lemma proj4_eq_flag: "\<And>dip rt. dip\<in>kD(rt) \<Longrightarrow> \<pi>\<^sub>4(the (rt dip)) = the (flag rt dip)"
unfolding sqn_def by (drule kD_Some) clarsimp
lemma proj2_eq_sqn: "\<And>dip rt. dip\<in>kD(rt) \<Longrightarrow> \<pi>\<^sub>2(the (rt dip)) = sqn rt dip"
unfolding sqn_def by (drule kD_Some) clarsimp
lemma kD_sqnf_is_proj3 [simp]:
"\<And>ip rt. ip\<in>kD(rt) \<Longrightarrow> sqnf rt ip = \<pi>\<^sub>3(the (rt ip))"
unfolding sqnf_def by auto
lemma vD_flag_val [simp]:
"\<And>dip rt. dip \<in> vD (rt) \<Longrightarrow> the (flag rt dip) = val"
unfolding vD_def by clarsimp
lemma kD_update [simp]:
"\<And>rt nip v. kD (rt(nip \<mapsto> v)) = insert nip (kD rt)"
unfolding kD_def by auto
lemma kD_empty [simp]: "kD Map.empty = {}"
unfolding kD_def by simp
lemma ip_equal_or_known [elim]:
fixes rt ip ip'
assumes "ip = ip' \<or> ip\<in>kD(rt)"
and "ip = ip' \<Longrightarrow> P rt ip ip'"
and "\<lbrakk> ip \<noteq> ip'; ip\<in>kD(rt)\<rbrakk> \<Longrightarrow> P rt ip ip'"
shows "P rt ip ip'"
using assms by auto
subsection "Updating Routing Tables"
text \<open>Routing table entries are modified through explicit functions.
The properties of these functions are important in invariant proofs.\<close>
subsubsection "Updating Precursor Lists"
definition addpre :: "r \<Rightarrow> ip set \<Rightarrow> r"
where "addpre r npre \<equiv> let (dsn, dsk, flag, hops, nhip, pre) = r in
(dsn, dsk, flag, hops, nhip, pre \<union> npre)"
lemma proj2_addpre:
fixes v pre
shows "\<pi>\<^sub>2(addpre v pre) = \<pi>\<^sub>2(v)"
unfolding addpre_def by (cases v) simp
lemma proj3_addpre:
fixes v pre
shows "\<pi>\<^sub>3(addpre v pre) = \<pi>\<^sub>3(v)"
unfolding addpre_def by (cases v) simp
lemma proj4_addpre:
fixes v pre
shows "\<pi>\<^sub>4(addpre v pre) = \<pi>\<^sub>4(v)"
unfolding addpre_def by (cases v) simp
lemma proj5_addpre:
fixes v pre
shows "\<pi>\<^sub>5(addpre v pre) = \<pi>\<^sub>5(v)"
unfolding addpre_def by (cases v) simp
lemma proj6_addpre:
fixes dsn dskflag nhip pre npre
shows "\<pi>\<^sub>6(addpre v npre) = \<pi>\<^sub>6(v)"
unfolding addpre_def by (cases v) simp
lemma proj7_addpre:
fixes dsn dsk flag hops nhip pre npre
shows "\<pi>\<^sub>7(addpre v npre) = \<pi>\<^sub>7(v) \<union> npre"
unfolding addpre_def by (cases v) simp
{ ="
unfolding addpre_def by simp
lemma addpre_r:
"addpre (dsn, dsk, fl, hops, nhip, pre) npre = (dsn, dsk, fl, hops, nhip, pre \<union> npre)"
unfolding addpre_def by simp
lemmas addpre_simps [simp] = proj2_addpre proj3_addpre proj4_addpre proj5_addpre
proj6_addpre proj7_addpre addpre_empty addpre_r
definition addpreRT :: "rt \<Rightarrow> ip \<Rightarrow> ip set \<rightharpoonup> rt"
where "addpreRT rt dip npre \<equiv>
map_option (\<lambda>s. rt (dip \<mapsto> addpre s npre)) (\<sigma>\<^bsub>route\<^esub>(rt, dip))"
lemma snd_addpre [simp]:
"\<And>dsn dsn' v pre. (dsn, snd(addpre (dsn', v) pre)) = addpre (dsn, v) pre"
unfolding addpre_def by clarsimp
lemma proj2_addpreRT [simp]:
fixes ip rt ip' npre
assumes "ip\<in>kD rt"
and "ip'\<in>kD rt"
shows "\<pi>\<^sub>2(the (the (addpreRT rt ip' npre) ip)) = \<pi>\<^sub>2(the (rt ip))"
using assms [THEN kD_Some] unfolding addpreRT_def by clarsimp
lemma proj3_addpreRT [simp]:
fixes ip rt ip' npre
assumes "ip\<in>kD rt"
and "ip'\<in>kD rt"
shows "\<pi>\<^sub>3(the (the (addpreRT rt ip' npre) ip)) = \<pi>\<^sub>3(the (rt ip))"
using assms [THEN kD_Some] unfolding addpreRT_def by clarsimp
lemma proj5_addpreRT [simp]:
"\<And>rt dip ip npre. dip\<in>kD(rt) \<Longrightarrow> \<pi>\<^sub>5(the (the (addpreRT rt dip npre) ip)) = \<pi>\<^sub>5(the (rt ip))"
unfolding addpreRT_def by auto
lemma flag_addpreRT [simp] next
fixes rt pre ip dip
assumes "dip \<in> kD rt"
shows "flag (the (addpreRT rt dip pre)) ip = flag rt ip"
unfolding addpreRT_def
using assms [THEN kD_Some] by (clarsimp)
lemma kD_addpreRT [simp]:
fixes rt dip npre
assumes "dip \<in> kD rt"
shows "kD (the (addpreRT rt dip npre)) = kD rt"
unfolding kD_def addpreRT_def
using assms [THEN kD_Some]
by clarsimp blast
lemma vD_addpreRT [simp]:
fixes rt dip npre
assumes "dip \<in> kD rt"
shows "vD (the (addpreRT rt dip npre)) = vD rt"
unfolding vD_def addpreRT_def
using assms [THEN kD_Some] by clarsimp auto
lemma iD_addpreRT [simp]:
fixes rt dip npre
assumes "dip \<in> kD rt"
shows "iD (the (addpreRT rt dip npre)) = iD rt"
unfolding iD_def addpreRT_def
using assms [THEN kD_Some] by clarsimp auto
lemma nhop_addpreRT [simp]:
fixes rt pre ip dip
assumes "dip \<in> kD rt"
shows "nhop (the (addpreRT rt dip pre)) ip = nhop rt ip"
unfolding sqn_def addpreRT_def
using assms [THEN kD_Some] by (clarsimp)
lemma sqn_addpreRT [simp]:
fixes rt pre ip dip
assumes "dip \<in> kD rt"
shows "sqn (the (addpreRT rt dip pre)) ip = sqn rt ip"
unfolding sqn_def addpreRT_def
using assms [THEN kD_Some] by hence \obs_ids \ < .<}< java.lang.StringIndexOutOfBoundsException: Range [65, 64) out of bounds for length 102
lemma dhops_addpreRT [simp]:
fixes rt pre ip dip
assumes "dip \<in> kD rt"
shows "dhops (the (addpreRT rt dip pre)) ip = dhops rt ip"
unfolding addpreRT_def
using assms [THEN kD_Some] by (clarsimp)
lemma sqnf_addpreRT [simp]:
"\<And>ip dip. ip\<in>kD(rt \<xi>)
unfolding sqnf_def addpreRT_def by auto
have \<opencard(\p>\ {<} < java.lang.StringIndexOutOfBoundsException: Range [62, 61) out of bounds for length 122
lemma in_kD_case [simp]:
fixes dip rt
assumes "dip \<in> kD(rt)"
shows "(case rt dip of None \<Rightarrow> en | Some r \<Rightarrow> es r) = es (the (rt dip))"
using assms [THEN kD_Some] by auto
lemma not_in_kD_case [simp]:
fixes dip rt
assumes "dip \<notin> kD(rt)"
shows "(case rt dip of None \<Rightarrow> en | Some r \<Rightarrow> es r) = en"
using assms [THEN kD_None] by auto
lemma rt_Some_sqn [dest]:
fixes rt and ip dsn dsk flag hops nhip pre
assumes "rt ip = Some (dsn, dsk, flag, hops, nhip, pre)"
shows "sqn rt ip = dsn"
unfolding sqn_def using assms by simp
lemma not_kD_sqn [simp]:
fixes dip rt
assumes "dip \<notin> kD(rt)"
shows "sqn rt dip = 0"
using assms unfolding sqn_def
by simp
definition update_arg_wf :: "r \<Rightarrow> bool"
where "update_arg_wf r \<equiv> \<pi>\<^sub>4(r) = val \<and>
(\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk) \<and>
(\<pi>\<^sub>3(r) = unk \<longrightarrow> \<pi>\<^sub>5(r) = 1)"
lemma update_arg_wf_gives_cases:
"\<And>r. update_arg_wf r \<Longrightarrow> (\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk)"
unfolding update_arg_wf_def by simp
lemma update_arg_wf_tuples [simp]:
"\<And>nhip pre. update_arg_wf (0, unk, val, Suc 0, nhip, pre)"
" note iki=\open>s_kth_obs \ i\>
unfolding update_arg_wf_def by auto
lemma update_arg_wf_tuples' [elim]:
> java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 104
unfolding update_arg_wf_def by auto
lemma wf_r_cases [intro]:
fixes P r
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 27
and c1: "\<And>nhip pre. P (0, unk, val, Suc 0, nhip, pre)"
and c2: "\<And>dsn hops nhip pre. dsn > 0 \<Longrightarrow> P (dsn, kno, val, hops, nhip, pre)"
shows "P r"
proof -
obtain dsn dsk flag hops nhip pre
where *: "r = (dsn, dsk, flag, hops, nhip, pre)" by (cases r)
with \<open>update_arg_wf r\<close> have wf1: "flag = val"
and wf2: "(dsn = 0) = (dsk = unk)"
and wf3: "dsk = unk \<longrightarrow> (hops = 1)"
unfolding update_arg_wf_def by auto
have "P (dsn, dsk, flag, hops, nhip, pre)"
proof (cases dsk)
assume "dsk = unk"
moreover with wf2 wf3 have "dsn = 0" and "hops = Suc 0" by auto
ultimately show ?thesis using \<open>flag = val\<close> by simp (rule c1)
next
assume "dsk = kno"
moreover with wf2 have "dsn > 0" by simp
ultimately show ?thesis using \<open>flag = val\<close> by simp (rule c2)
qed
with * show "P r" by simp
qed
definition update :: "rt \<Rightarrow> ip \<Rightarrow> r \<Rightarrow> rt"
where
"update rt ip r \<equiv>
case \<sigma>\<^bsub>route\<^esub>(rt, hence \<open>card (obs_ids \<pi> \<inter> .Suci} =k<by(etis )
None \<Rightarrow> rt (ip \<mapsto> r)
| Some s \<Rightarrow>
if \<pi>\<^sub>2(s) < \<pi>\<^sub>2(r) then rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(s)))
else if \<pi>\<^sub>2(s) = \<pi>\<^sub>2(r) \<and> (\<pi>\<^sub>5(s) > \<pi>\<^sub>5(r) \<or> \<pi>\<^sub>4(s) = inv)
then rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(s)))
else if \<pi>\<^sub>3(r) = unk
then rt (ip \<mapsto> (\<pi>\<^sub>2(s), snd (addpre r (\<pi>\<^sub>7(s)))))
else rt (ip \<mapsto> addpre s (\<pi>\<^sub>7(r)))"
[]java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
fixes r s nrt nr nr' ns rt ip
defines "s \<equiv> the \<sigma>\<^bsub>route\<^esub>(rt, ip)"
and "nr \<equiv> addpre r (\<pi>\<^sub>7(s))"
and "nr' \<equiv> (\<pi>\<^sub>2(s), \<pi>\<^sub>3(nr), \<pi>\<^sub>4(nr), \<pi>\<^sub>5(nr), \<pi>\<^sub>6(nr), \<pi>\<^sub>7(nr))"
and "ns \<equiv> addpre s (\<pi>\<^sub>7(r))"
shows
"\<lbrakk>ip \<notin> kD(rt)\<rbrakk> \<Longrightarrow> update rt ip r = rt (ip \<mapsto> r)"
"\<lbrakk>ip \<in> kD(rt); sqn rt ip < \<pi>\<^sub>2(r)\<rbrakk> \<Longrightarrow> update rt ip r = rt (ip \<mapsto> nr)"
"\<lbrakk>ip \<in> kD(rt); sqn rt ip = \<pi>\<^sub>2(r);
the (dhops rt ip) > \<pi>\<^sub>5(r)\<rbrakk> \<Longrightarrow> update rt ip r = rt (ip \<mapsto> nr)"
"\<lbrakk>ip \<in> kD(rt); sqn rt ip = \<pi>\<^sub>2(r);
flag rt ip = Some inv\<rbrakk> \<Longrightarrow> update rt ip r = rt (ip \<mapsto> nr)"
"\<lbrakk>ip \<in> kD(rt); \<pi>\<^sub>3(r) = unk; (\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk)\<rbrakk> \<Longrightarrow> update rt ip r = rt (ip \<mapsto> nr')"
"\<lbrakk>ip \<in> kD(rt); sqn rt ip \<ge> \<pi>\<^sub>2(r); \<pi>\<^sub>3(r) = kno;
sqn rt ip = \<pi>\<^sub>2(r) \<Longrightarrow> the (dhops rt ip) \<le> \<pi>\<^sub>5(r) \<and> the (flag rt ip) = val \<rbrakk>
\<Longrightarrow> update rt ip r = rt (ip \<mapsto> ns)"
proof -
assume "ip\<notin>kD(rt)"
hence "\<sigma>\<^bsub>route\<^esub>(rt, ip) = None" ..
thus "update rt ip r = rt (ip \<mapsto> r)"
unfolding update_def by simp
next
assume "ip \<in> kD(rt)"
and "sqn rt ip < \<pi>\<^sub>2 then obtain i' where csi: \<open>cs\<^bsup>\<pi>\<^esup> i = cs\<^bsup>\<pi>'\<^esup> i'\<close> using assms by blast
from this(1) obtain dsn dsk fl hops nhip pre
=java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 58
by (metis kD_Some)
with \<open>sqn rt ip < \<pi>\<^sub>2(r)\<close> show "update rt ip r = rt (ip \<mapsto> nr)"
unfolding update_def nr_def s_def by auto
next
assume "ip \<in> kD(rt)"
and "sqn rt ip = \<pi>\<^sub>2(r)"
and "the (dhops rt ip) > \<pi>\<^sub>5(r)"
this() dsn fl hops nhip
where "rt ip = Some (dsn, dsk, fl, hops, nhip, pre)"
by (metis kD_Some)
with \<open>sqn rt ip = \<pi>\<^sub>2(r)\<close> and \<open>the (dhops rt ip) > \<pi>\<^sub>5(r)\<close>
show "update rt ip r = rt (ip \<mapsto> nr)"
unfolding update_def nr_def s_def by auto
next
assume "ip \<in> kD(rt)"
and "sqn rt ip = \<pi>\<^sub>2(r)"
and "flag rt ip = Some inv"
from this(1) obtain dsn dsk fl hops nhip pre
where "rt ip = Some (dsn, dsk, fl, hops, nhip, pre)"
by (metis kD_Some)
with \<open>sqn rt ip = \<pi>\<^sub>2(r)\<close> and \<open>flag rt ip = Some inv\<close>
show "update rt ip r = rt (ip \<mapsto> nr)"
unfolding update_def nr_def s_def by auto
next
assume "ip \<in> kD(rt)"
and "\<pi>\<^sub>3(r) = unk"
and "(\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) =thenobtain j'where csj <pen>cs\<^bsup><pi>\<esup> j = cs\<^bsup>\<pi>'\<^esup> j'\<close> using all_in_\<pi>' by blast
from this(1) obtain dsn dsk fl hops nhip pre
where "rt ip = Some (dsn, dsk, fl, hops, nhip, pre)"
by (metis kD_Some)
with \<open>(\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk)\<close> and \<open>\<pi>\<^sub>3(r) = unk\<close>
show "update rt ip r = rt (ip \<mapsto> nr')"
unfolding update_def nr'_def nr_def s_def
by (cases r) simp
next
assume "ip \<in> kD(rt)"
and otherassms: "sqn rt ip \<ge> \<pi>\<^sub>2(r)"
"\<pi>\<^sub>3(r) = kno"
"sqn rt ip = \<pi>\<^sub>2(r) \<Longrightarrow> the (dhops rt ip) \<le> \<pi>\<^sub>5(r) \<and> the (flag rt ip) = val"
from this(1) obtain dsn dsk fl hops nhip pre
where "rt ip = Some (dsn, dsk, fl, hops, nhip, pre)"
by (metis kD_Some)
with otherassms show "update rt ip r = rt (ip \<mapsto> ns)"
unfolding update_def ns_def s_def by auto
qed
lemma update_cases [elim]:
assumes "(\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk)"
and c1: "\<lbrakk>ip \<notin> kD(rt)\<rbrakk> \<Longrightarrow> P (rt (ip \<mapsto> r))"
and c2: "\<lbrakk>ip \<in> kD(rt); sqn rt ip < \<pi>\<^sub>2(r)\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(the \<sigma>\<^bsub>route\<^esub>(rt, ip)))))"
and c3: "\<lbrakk>ip \<in> kD(rt); sqn rt ip = \<pi>\<^sub>2(r); the (dhops rt ip) > \<pi>\<^sub>5(r)\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(the \<sigma>\<^bsub>route\<^esub>(rt, ip)))))"
and c4: "\<lbrakk>ip \<in> kD(rt); sqn rt ip = \<pi>\<^sub>2(r); the (flag rt ip) = inv\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(the \<sigma>\<^bsub>route\<^esub>(rt, ip)))))"
and c5: "\<lbrakk>ip \<in> kD(rt); \<pi>\<^sub>3(r) = unk\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> (\<pi>\<^sub>2(the \<sigma>\<^bsub>route\<^esub>(rt, ip)), \<pi>\<^sub>3(r),
\<pi>\<^sub>4(r
and c6: "\<lbrakk>ip \<in> kD(rt); sqn rt ip \<ge> \<pi>\<^sub>2(r); \<pi>\<^sub>3(r) = kno;
sqn rt ip = \<pi>\<^sub>2(r) \<Longrightarrow> the (dhops rt ip) \<le> \<pi>\<^sub>5(r) \<and> the (flag rt ip) = val\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> addpre (the \<sigma>\<^bsub>route\<^esub>(rt, ip)) (\<pi>\<^sub>7(r))))"
shows "(P (update rt ip r))"
proof (cases "ip \<in> kD(rt)")
assume "ip \<notin> kD(rt)"
with c1 show ?thesis
by simp
next
assume "ip \<in> kD(rt)"
moreover then obtain dsn dsk fl hops nhip pre
where rteq: "rt ip = Some (dsn, dsk, fl, hops, nhip, pre)"
by (metis kD_Some)
moreover obtain dsn' dsk' fl' hops' nhip' pre'
where req: "r = (dsn', dsk', fl', hops', nhip', pre')"
by (cases r) metis
ultimately show ?thesis
using \<open>(\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk)\<close>
c2 [OF \<open>ip\<in>kD(rt)\<close>]
c3 [OF \<open>ip\<in>kD(rt)\<close>]
c4 [OF \<open>ip\<in>kD(rt)\<close>]
c5 [OF \<open>ip\<in>kD(rt)\<close>]
c6 [OF \<open>ip\<in>kD(rt)\<close>]
unfolding update_def sqn_def by auto
qed
lemma update_cases_kD:
assumes "(\<pi>\<^sub>2(r) = 0) = (\<pi>\<^sub>3(r) = unk)"
and "ip \<in> kD(rt)"
and c2: "sqn rt ip < \<pi>\<^sub>2(r) \<Longrightarrow> P (rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(the \<sigma>\<^bsub>route\<^esub>(rt, ip)))))"
and c3: "\<lbrakk>sqn rt ip = \<pi>\<^sub>2(r); the (dhops rt ip) > \<pi>\<^sub>5(r)\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> addpre r (\<pi>\<^sub>7(the \<sigma>\<^bsub>route\<^esub>(rt, ip)))))"
and c4: "\<lbrakk>sqn rt ip = \<pi>\<^sub>2(r); the (flag rt ip) = inv\<rbrakk>
\<ongrightarrow>P(rt (p \<>addpre r(\pi><^ub>(the\<igma\<^>oute\<esub>(rt,ip)))"
and c5: "\<pi>\<^sub>3(r) = unk \<Longrightarrow> P (rt (ip \<mapsto> (\<pi>\<^sub>2(the \<sigma>\<^bsub>route\<^esub>(rt, ip)), \<pi>\<^sub>3(r),
\<pi>\<^sub>4(r), \<pi>\<^sub>5(r), \<pi>\<^sub>6(r),
\<pi>\<^sub>7(addpre r (\<pi>\<^sub>7(the \<sigma>\<^bsub>route\<^esub>(rt, ip)))))))"
and c6: "\<lbrakk>sqn rt ip \<ge> \<pi>\<^sub>2(r); \<pi>\<^sub>3(r) = kno;
sqn rt ip = \<pi>\<^sub>2(r) \<Longrightarrow> the (dhops rt ip) \<le> \<pi>\<^sub>5(r) \<and> the (flag rt ip) = val\<rbrakk>
\<Longrightarrow> P (rt (ip \<mapsto> addpre (the \<sigma>\<^bsub>route\<^esub>(rt, ip)) (\<pi>\<^sub>7(r))))"
"(pdate rt ip )"
using assms(1) proof (rule update_cases)
assume "sqn rt ip < \<pi>\<^sub>2(r)"
thus "P (rt(ip \<mapsto> addpre r (\<pi>\<^sub>7(the (rt ip)))))" by (rule c2)
next
assume "sqn rt ip = \<pi>\<^sub>2(r)"
and "the (dhops rt ip) > \<pi>\<^sub>5(r)"
thus "P (rt(ip \<mapsto> addpre r (\<pi>\<^sub>7 (the (rt ip)))))"
)
next
assume "sqn rt ip = \<pi>\<^sub>2(r)"
and "the (flag rt ip) = inv"
thus "P (rt(ip \<mapsto> addpre r (\<pi>\<^sub>7 (the (rt ip)))))"
by (rule c4)
next
assume "\<pi>\<^sub>3(r) = unk"
> (<\^ub>(the <igma>\^sub>\^esub>r,ip)), \pi\^>(r) \<pi><sub>4(), \>\>(,\\^>r,
\<pi>\<^sub>7(addpre r (\<pi>\<^sub>7(the (rt ip)))))))"
by (rule c5)
assume "sqn rt ip \<ge> \<pi>\<^sub>2(r)"
and "\<pi>\<^sub>3(r) = kno"
and "sqn rt ip = \<pi>\<^sub>2(r) \<Longrightarrow> the (dhops rt ip) \<le> \<pi>\<^sub>5(r) \<and> the (flag rt ip) = val"
thus "P (rt (ip \<mapsto> addpre (the (rt ip)) (\<pi>\<^sub>7(r))))"
by (rule c6)
qed (simp add: \<open>ip \<in> kD(rt)\<close>)
lemma in_kD_after_update [simp]:
fixes rt nip dsn dsk flag hops nhip pre
shows "kD (update rt nip (dsn, dsk, flag, hops, nhip, pre)) = insert nip (kD rt)"
unfolding update_def
by (cases "rt nip") auto
lemma nhop_of_update [simp]:
fixes rt dip dsn dsk flag hops nhip
assumes "rt \<noteq> update rt dip (dsn, dsk, flag, hops, nhip, {})"
shows "the (nhop (update rt dip (dsn, dsk, flag, hops, nhip, {})) dip) = nhip"
proof -
from assms
have update_neq: "\<And>v. rt dip = Some v \<Longrightarrow>
rt dip (dsn, dsk, flag, hops, nhip, {})
\<noteq> rt(dip \<mapsto> addpre (the (rt dip)) (\<pi>\<^sub>7 (dsn, dsk, flag, hops, nhip, {})))"
by auto
show ?thesis
proof (cases "rt dip = None")
assume "rt dip = None"
thus "?thesis" unfolding update_def by clarsimp
next
assume "rt dip \<noteq> None"
then obtain v where "rt dip = Some v" by (metis not_None_eq)
with update_neq [OF this] show ?thesis
unfolding update_def by auto
qed
qed
lemma sqn_if_updated:
fixes rip v rt ip
shows "sqn (\<lambda>x. ifassume \\not( < '\
= (if ip = rip then \<pi>\<^sub>2(v) else sqn rt ip)"
sqn_def by
lemma update_sqn [simp]:
fixes rt dip rip dsn dsk hops nhip pre
assumes "(dsn = 0) = (dsk = unk)"
shows "sqn rt dip \<le> sqn (update rt rip (dsn, dsk, val, hops, nhip, pre)) dip"
proof (rule update_cases)
show "(\<pi>\<^sub>2 (dsn, dsk, show \<pen>alse\<close> using ii'nret proof
by simp (rule assms)
qed (clarsimp simp: sqn_if_updated sqn_def)+
lemma sqn_update_bigger [simp]:
fixes rt ip ip' dsn dsk flag hops nhip pre
assumes " \le>hops"
shows "sqn rt ip \<le> sqn (update rt ip' (dsn, dsk, flag, hops, nhip, pre)) ip"
using assms unfolding update_def sqn_def
by (clarsimp split: option.split) auto
lemma dhops_update [intro]:
fixes rt dsn dsk flag hops ip rip nhip pre
assumes ex: "\<forall>ip\<in>kD rt. the (dhops rt ip) \<ge> 1"
and ip: "(ip = rip \<and> Suc 0 \<le> hops) \<or> (ip \<noteq> rip \<and> ip\<in>kD rt)"
shows "Suc 0 \<le> the (dhops (update rt rip (dsn, dsk, flag, hops, nhip, pre)) ip)"
using ip proof
assume "ip = rip \<and> Suc 0 \<le> hops" thus ?thesis
unfolding update_def using ex
by (cases "rip \<in> kD rt") (drule(1) bspec, auto)
next
assume "ip \<noteq> rip \<and> ip\<in>kD rt" thus ?thesis
using ex unfolding update_def
by (cases "rip\<in>kD rt") auto
qed
lemma update_another [simp]:
fixes dip ip rt dsn dsk flag hops nhip pre
assumes "ip \<noteq> dip"
shows "(update rt dip (dsn, dsk, flag, hops, nhip, pre)) ip = rt ip"
using assms unfolding update_def
by (clarsimp split: option.split)
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 33
fixes dip ip rt dsn dsk flag hops nhip pre
assumes "ip \<noteq> dip"
shows "nhop (update rt dip (dsn, dsk, flag, hops, nhip, pre)) ip = nhop rt ip"
using assms unfolding update_def
by (clarsimp split: option.split)
lemma dhops_update_another [simp]:
fixes dip ip rt dsn dsk flag hops nhip pre
assumes "ip \<noteq> dip"
shows "dhops (update rt dip (dsn, dsk, flag, hops, nhip, pre)) ip = dhops rt ip"
assms unfolding
by (clarsimp split: option.split)
lemma sqn_update_same [simp]:
"\<And>rt ip dsn dsk flag hops nhip pre. sqn (rt(ip \<mapsto> v)) ip = \<pi>\<^sub>2(v)"
unfolding sqn_def by simp
lemma dhops_update_changed [simp]:
rtdip osn hops nhip
assumes "rt \<noteq> update rt dip (osn, kno, val, hops, nhip, {})"
shows "the (dhops (update rt dip (osn, kno, val, hops, nhip, {})) dip) = hops"
using assms unfolding update_def
by (clarsimp split: option.split_asm option.split if_split_asm) auto
lemma nhop_update_unk_val [simp]:
"\<And>rt dip ip dsn hops npre.
((pdate , ip,npre) dip) = ip"
unfolding update_def by (clarsimp split: option.split)
lemma nhop_update_changed [simp]:
fixes rt dip dsn dsk flg hops sip
assumes "update rt dip (dsn, dsk, flg, hops, sip, {}) \<noteq> rt"
shows "the (nhop (update rt dip (dsn, dsk, flg, hops, sip, {})) dip) = sip"
using assms unfolding update_def
by (clarsimp split: option.splits if_split_asm) auto
lemma update_rt_split_asm:
"\<And>rt ip dsn dsk flag hops sip.
P (update rt ip (dsn, dsk, flag, hops, sip, {}))
=
(\<not>(rt = update rt ip (dsn, dsk, flag, hops, sip, {}) \<and> \<not>P rt
\<or> rt \<noteq> update rt ip (dsn, dsk, flag, hops, sip, {})
\<and> \<not>P (update rt ip (dsn, dsk, flag, hops, sip, {}))))"
by auto
lemma sqn_update [simp]: "\<And>rt dip dsn flg hops sip.
rt \<noteq> update rt dip (dsn, kno, flg, hops, sip, {})
\<Longrightarrow> sqn (update rt dip (dsn, kno, flg, hops, sip, {})) dip = dsn"
unfolding update_def by (clarsimp split: option.split if_split_asm) auto
lemma sqnf_update [simp]: "\<And>rt dip dsn dsk flg hops sip.
\<oteq update rt dip (dsn, dsk,flg,hops sip,{)
\<Longrightarrow> sqnf (update rt dip (dsn, dsk, flg, hops, sip, {})) dip = dsk"
unfolding update_def sqnf_def
by (clarsimp split: option.splits if_split_asm) auto
lemma update_kno_dsn_greater_zero:
"\<And>rt dip ip dsn hops npre. 1 \<le> dsn \<Longrightarrow> 1 \<le> (sqn (update rt dip (dsn, kno, val, hops, ip, npre)) dip)"
unfolding update_def
by (clarsimp split: option.splits)
lemma proj3_update [simp]: "\<Andnext
rt \<noteq> update rt dip (dsn, dsk, flg, hops, sip, {})
\<Longrightarrow> \<pi>\<^sub>3(the (update rt dip (dsn, dsk, flg, hops, sip, {}) dip)) = dsk"
unfolding update_def sqnf_def
by (clarsimp split: option.splits if_split_asm) auto
lemma nhop_update_changed_kno_val [simp]: "\<And>rt ip dsn dsk hops nhip.
rt \<noteq> update rt ip (dsn, kno, val, hops, nhip, {})
\<Longrightarrow> the (nhop (update rt ip (dsn, kno, val, hops, nhip, {})) ip) = nhip"
unfolding update_def
by (clarsimp split: option.split_asm option.split if_split_asm) auto
lemmaflag_update [imp] \And>rt dip dsn flg hops sip.
rt \<noteq> update rt dip (dsn, kno, flg, hops, sip, {})
\<Longrightarrow> the (flag (update rt dip (dsn, kno, flg, hops, sip, {})) dip) = flg"
unfolding update_def
by (clarsimp split: option.split if_split_asm) auto
lemma the_flag_Some [dest!]:
fixes ip rt
assumes "the (flag rt ip) = x"
and "ip \<in> kD rt"
shows "flag rt ip = Some x"
using assms by auto
lemma kD_update_unchanged [dest]:
fixes rt dip dsn dsk flag hops nhip pre
assumes "rt = update rt dip (dsn, dsk, flag, hops, nhip, pre)"
shows "dip\<in>kD(rt)"
proof -
have "dip\<in>kD(update rt dip (dsn, dsk, flag, hops, nhip, pre))" by simp
with assms show ?thesis by simp
qed
lemma nhop_update [simp]: "\<And>rt dip dsn dsk flg hops sip.
rt \<noteq> update rt dip (dsn, dsk, flg, hops, sip, {})
\<Longrightarrow> the (nhop (update rt dip (dsn, dsk, flg, hops, sip, {})) dip) = sip"
unfolding update_def sqnf_def
by (clarsimp split: option.splits if_split_asm) auto
lemma sqn_update_another [simp]:
fixes dip ip rt dsn dsk flag hops nhip pre
assumes "ip \<noteq> dip"
shows sqn (pdate rt dip (, flaghops,nhip,pre sqn "
using assms unfolding update_def sqn_def
by (clarsimp split: option.splits) auto
lemma sqnf_update_another [simp]:
fixes dip ip rt dsn dsk flag hops nhip pre
assumes "ip ≠ dip"
shows "sqnf (update rt dip (dsn, dsk, flag, hops, nhip, pre)) ip = sqnf rt ip"
using assms unfolding update_def sqnf_def
by (clarsimp split: option.splits) auto
lemma vD_update_val [dest]:
"∧dip rt dip' dsn dsk hops nhip pre.
dip ∈ vD(update rt dip' (dsn, dsk, val, hops, nhip, pre)) ==> (dip∈vD(rt) ∨ dip=dip')"
unfolding update_def vD_def by (clarsimp split: option.split_asm if_split_asm)
subsubsection "Invalidating route entries"
definition invalidate :: "rt → (ip ⇀ sqn) → rt"
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 35
λip. case (rt ip, dests ip) of
(None, _) → None
| (Some s, None) → Some s
| (Some (_, dsk, _, hops, nhip, pre), Some rsn) →
Some (rsn, dsk, inv, hops, nhip, pre)"
lemma
"∧dip. π3(the ((invalidate rt dests) dip)) = π3(the (rt dip))"
unfolding invalidate_def by (clarsimp split: option.split)
lemma proj5_invalidate [simp]:
"∧
unfolding invalidate_def by (clarsimp split: option.split)
lemma proj6_invalidate [simp]:
"∧dip. π6(the ((invalidate rt dests) dip)) = πatt (path σ'java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 56
unfolding invalidate_def by (clarsimp split: option.split)
lemma proj7_invalidate [simp]:
"∧
unfolding invalidate_def by (clarsimp split: option.split)
java.lang.StringIndexOutOfBoundsException: Index 131 out of bounds for length 31
"∧
ing_ _ef
by (simplitonit
lemma invalidate_sqn:
fixes rt dip dests
assumes java.lang.StringIndexOutOfBoundsException: Range [0, 19) out of bounds for length 0
s"sqn rt dip ≤ sqn (invalidate rt dests) dip"
proof (cases "dip ∉
assume "¬ dip ∉ kD(rt)"
hence "dip∈(σ v = σ by auto
then obtain dsn dsk flag hops nhip pre where "rt dip = Some (dsn, dsk, flag, hops, nhip, pre)"
by (metis kD_Some)
with assms show "sqn rt dip ≤ sqn (invalidate rt dests) dip"
by (cases "dests dip") (auto simp add: invalidate_def sqn_def)
qed simp
lemma sqn_invalidate_in_dests [simp]:
fixes dests ipa t
assumes "dests ipa = Some rsn"
and "ipa∈kD(rt)"
shows "sqn (invalidate rt dests) ipa = rsn"
unfolding invalidate_def sqn_def
using assms(1) assms(2) [THEN kD_Some]
by clarsimp
lemma dhops_invalidate [simp]:
"Anddip.heidate show‹
unfoldingefbymptionlit
lemma sqnf_invalidate [simp]:
\<And>dip. sqnf (invalidate (rt \<xi>) (dests \<xi>)) dip = sqnf (rt \<xi>) dip"
unfolding sqnf_def invalidate_def by (clarsimp split: option.split)
lemma nhop_invalidate [simp]:
"\<And>dip. the (nhop (invalidate (rt \<xi>) (dests \<xi>)) dip) = the (nhop (rt \<xi>) dip)"
unfolding invalidate_def by (clarsimp split: option.split)
lemma invalidate_other [simp]:
fixes rt dests dip
assumes "dip<notindom(dests)"
shows "invalidate rt dests dip = rt dip"
using assms unfolding invalidate_def
by (rsimpit it_asm
by
fixes rt dests dip
assumes "dip\<notin>kD(rt)"
shows "invalidate rt dests dip = None"
using assms unfolding invalidate_def by clarsimp
lemma vD_invalidate_vD_not_dests:
"\<And>dip rtts ip<nvDlidatertsts \Longrightarrow dip\<in>vD(rt) \<tedi_def
unfolding invalidate_def vD_def
have \open>\all <> {?l<..<k}. v \<notin> writes (\<pi> l)\<close> by (auto, metis (lifting, no_types) Greatest_le_nat le_antisym nat_less_le)
lemma sqn_invalidate_not_in_dests [simp]:
fixes dests dip rt
assumesp<notindom(dests)"
shows "sqn (invalidate rt )p=qnrtdip
using assms unfolding sqn_def by simp
lemmajava.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 25
fixes rt dests dip dsn dsk flag hops nhip pre
show \<open>preregister (F \<circ> G;F \<circ> H)\<close> and \<open>lemma no_writes_unchanged: assumes \<open>k \<le> l\<close> \<open>\<forall> j \<in> {k..<l}. v\<notin> writes(path \<sigma> j)\<close> shows \<open all
s dsn(java.lang.StringIndexOutOfBoundsException: Range [34, 24) out of bounds for length 114
and>dsk = \<pi>\<^sub>3(the (rt dip) e uck)
> flag = (if dests dip = None then \<pi>\<^sub>4(the (rt dip)) else inv)
\<and> hops = \<pi>\<^sub>5(the (rt dip))
\<and> nhip = \<pi>\<^sub>6(the (rt dip))
\<and> pre = \<pi>\<^sub>7(the (rt dip))"
using assms unfolding invalidate_def
by (cases "rt dip", clarsimp, cases "dests dip") auto
lemma proj3_inv: "\And>dip ts <n>Dt
\<Longrightarrow> \<pi>\<^sub>3(the (invalidate rt dests dip)) = \<pi>\<^sub>3(the (rt dip))"
by (clarsimp simp: invalidate_def kD_def split: option.split)
lemma dests_iD_invalidate [simp]:
assumes "dests ip = Some rsn"
and "ip\<in>kD(rt)"
shows "ip\<in>iD(invalidate rt dests)"
g)ms( N ingte_defef
by (clarsimp split: option.split)
subsection "tejava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
text \<open>Generate a fresh route request identifier.\<close>
definition tensor_extensionality
where "nrreqid rreqs ip \<equiv> Max ({n. (ip, n) \<in> rreqs} \<apply(lejava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 36
subsection< H h = H h *\<^sub>u G g"
text \<open>Functions for
type_synonym store = "ip \java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 66
definition sigma_queue :: "store \<Rightarrow> ip \<Rightarrow> data list" (\<open>\<sigma>\<^bsub>queue\<^esub>'(_, _')\<close>)
where "\<sigma>\<^bsub>queue\<^esub>(store, dip) \<equiv> case store dip of None \<Rightarrow> [] | Some (p, q) \<Rightarrow> q"
definition qD :: "store \<Rightarrow> ip set"
where "qD \<equiv> dom"
definition add :: "data \<Rightarrow> ip \<Rightarrow> store \<Rightarrow> store"
where "add d dip store \<equiv> case store dip of
None \<Rightarrow> store (dip \<mapsto> (,java.lang.StringIndexOutOfBoundsException: Range [79, 78) out of bounds for length 81
| Some (p, q) \<Rightarrow> store (dip \<mapsto> (p, q @ [d]))"
lemma qD_add [simp]:
fixes d dip store
shows "qD(add d dip store) = insert dip (qD store)"
unfolding add_def Let_def qD_def
by (clarsimp split: option.split)
definitioncontradict: assumes csk: \<open>cs\<^bsup>path \<sigma>\<^esup> k = cs\<^bsup>path \<sigma>'\<^esup> k'\<close> and obs: \<open>obsp \<sigma> k \<noteq> obsp \<sigma>' k'\<close> shows \<open>(\<sigma>', k') \<cc> (\<sigma>, k)\<close>
where "drop dip store \<equiv>
map_option (\<lambda>(p, q). if tl q = [] then store (dip := None)
definition sigma_p_flag :: "store<Rightarrow> ip <harpoonup" \open>\definition sigma_p_flag :: "store \<Rightarrow> ip \<rightharpoonup> p" (\<open>\<sigma> k = cs\<^suph<gma'^sup>k\close>anderge <open>n<close> \<open^path \<sigma>\<^esup> n = cs\<^bsup>path \<sigma>'<p' open\<exists> j'. (\<sigma>', j')cc (\<sigmaclose
where "\<sigma>\<^bsub>p-flag\<^esub>(store, dip) \<equiv> map_option fst (store dip)"
initionjava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 67
where "unsetRRF store dip \<equiv> case store dip of
None \<Rightarrowre
| Some (p, q) \<Rightarrow> store (dip \<mapsto> (noreq, q))"
definition setRRF :: "store \<Rightarrow> (ip \<rightharpoonup> sqn) \<Rightarrow> store"
where "setRRF store dests \<equiv> \<pjava.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 85
else map_option (\<lambda>(_, q). (req, q)) (store dip)"
subsectionnhlalt
text \<open>
The major differences with the AODV technical report of Fehnker et al are:
\begin{enumerate}
\item @{term nhop} is partial, thus a `@{term the}' is needed, similarly for @{term dhops}
and @{term addpreRT}.
\item @{terms l
\item @{term "\<sigma>\<^bsub>p-flag\<^esub>(store, dip)"} is partial.
\iteminge(pt)lleda@p" < r option"})
rather than a set of 7-tuples, likewise, the @{typ r} is a 6-tuple rather than
a 7-tuple, i.e., the destination ip-address (@{term "dip"}) is taken from the
argument to the function, rather than a part of the result. Well-definedness then
follows from the structure of the type and moredjava.lang.StringIndexOutOfBoundsException: Range [70, 69) out of bounds for length 83
automatically, rather than having hence \<open>(\<exists>k i i'. is_kth_obs \<pi> k i \<and> is_kth_obs \<pi>' k i' \<and> obsp \<sigma> i \<noteq> obsp \<sigma>' i' \<and> cs\<^bsup>\<pi>\<^esup> i = cs\<^bsup>\<pi>'\<^esup> i')
\item Similar remarks hold for the dests mapping passed to @{term "invalidate"},
and @{term "store"}.
\end{enumerate}
\<close>
end
¤ Dauer der Verarbeitung: 0.42 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland
|
|