lemma inc_minus_suc_0 [simp]: "inc x - Suc 0 = x" unfolding inc_def by simp
lemma inc_never_one' [simp, intro]: "inc x ≠ Suc 0" 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"
lemma iD_Some [dest]: fixes dip rt assumes"dip ∈ iD rt" shows"∃dsn dsk hops nhip pre. σ(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∈kD(rt)" and"the (flag rt ip) = val" shows"ip∈vD(rt)" using assms unfolding vD_def by auto
lemma inv_is_iD [elim]: fixes ip rt assumes"ip∈kD(rt)" and"the (flag rt ip) = inv" shows"ip∈iD(rt)" using assms unfolding iD_def by auto
lemma iD_flag_is_inv [elim, simp]: fixes ip rt assumes"ip∈iD(rt)" shows"the (flag rt ip) = inv" proof - from‹ip∈iD(rt)›have"ip∈kD(rt)"by auto with assms show ?thesis unfolding iD_def by auto qed
lemma kD_but_not_vD_is_iD [elim]: fixes ip rt assumes"ip∈kD(rt)" and"ip∉vD(rt)" shows"ip∈iD(rt)" proof - from‹ip∈kD(rt)›obtain dsn dsk f hops nhop pre where rtip: "rt ip = Some (dsn, dsk, f, hops, nhop, pre)" by (metis kD_Some) from‹ip∉vD(rt)›have"f ≠ val" proof (rule contrapos_nn) assume"f = val" with rtip have"the (flag rt ip) = val"by simp with‹ip∈kD(rt)›show"ip∈vD(rt)" .. qed with rtip have"the (flag rt ip)= inv"by simp with‹ip∈kD(rt)›show"ip∈iD(rt)" .. qed
lemma vD_or_iD [elim]: fixes ip rt assumes"ip∈kD(rt)" and"ip∈vD(rt) ==> P rt ip" and"ip∈iD(rt) ==> P rt ip" shows"P rt ip" proof - from‹ip∈kD(rt)›have"ip∈vD(rt) ∪ iD(rt)" by (simp add: kD_is_vD_and_iD) thus ?thesis by (auto elim: assms(2-3)) qed
lemma proj5_eq_dhops: "∧dip rt. dip∈kD(rt) ==> π5(the (rt dip)) = the (dhops rt dip)" unfolding sqn_def by (drule kD_Some) clarsimp
lemma proj4_eq_flag: "∧dip rt. dip∈kD(rt) ==> π4(the (rt dip)) = the (flag rt dip)" unfolding sqn_def by (drule kD_Some) clarsimp
lemma proj2_eq_sqn: "∧dip rt. dip∈kD(rt) ==> π2(the (rt dip)) = sqn rt dip" unfolding sqn_def by (drule kD_Some) clarsimp
lemma kD_sqnf_is_proj3 [simp]: "∧ip rt. ip∈kD(rt) ==> sqnf rt ip = π3(the (rt ip))" unfolding sqnf_def by auto
lemma vD_flag_val [simp]: "∧dip rt. dip ∈ vD (rt) ==> the (flag rt dip) = val" unfolding vD_def by clarsimp
lemma kD_update [simp]: "∧rt nip v. kD (rt(nip ↦ v)) = insert nip (kD rt)" unfolding kD_def by auto
lemma ip_equal_or_known [elim]: fixes rt ip ip' assumes"ip = ip' ∨ ip∈kD(rt)" and"ip = ip' ==> P rt ip ip'" and"[ ip ≠ ip'; ip∈kD(rt)]==> P rt ip ip'" shows"P rt ip ip'" using assms by auto
subsection"Updating Routing Tables"
text‹Routing table entries are modified through explicit functions.
The properties of these functions are important in invariant proofs.›
subsubsection"Updating Precursor Lists"
definition addpre :: "r ==> ip set ==> r" where"addpre r npre ≡ let (dsn, dsk, flag, hops, nhip, pre) = r in (dsn, dsk, flag, hops, nhip, pre ∪ npre)"
lemma proj2_addpre: fixes v pre shows"π2(addpre v pre) = π2(v)" unfolding addpre_def by (cases v) simp
lemma proj3_addpre: fixes v pre shows"π3(addpre v pre) = π3(v)" unfolding addpre_def by (cases v) simp
lemma proj4_addpre: fixes v pre shows"π4(addpre v pre) = π4(v)" unfolding addpre_def by (cases v) simp
lemma proj5_addpre: fixes v pre shows"π5(addpre v pre) = π5(v)" unfolding addpre_def by (cases v) simp
lemma proj6_addpre: fixes dsn dsk flag hops nhip pre npre shows"π6(addpre v npre) = π6(v)" unfolding addpre_def by (cases v) simp
lemma proj7_addpre: fixes dsn dsk flag hops nhip pre npre shows"π7(addpre v npre) = π7(v) ∪ npre" unfolding addpre_def by (cases v) simp
lemma addpre_empty: "addpre r {} = r" unfolding addpre_def by simp
lemma proj2_addpreRT [simp]: fixes ip rt ip' npre assumes"ip∈kD rt" and"ip'∈kD rt" shows"π2(the (the (addpreRT rt ip' npre) ip)) = π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∈kD rt" and"ip'∈kD rt" shows"π3(the (the (addpreRT rt ip' npre) ip)) = π3(the (rt ip))" using assms [THEN kD_Some] unfolding addpreRT_def by clarsimp
lemma proj5_addpreRT [simp]: "∧rt dip ip npre. dip∈kD(rt) ==> π5(the (the (addpreRT rt dip npre) ip)) = π5(the (rt ip))" unfolding addpreRT_def by auto
lemma flag_addpreRT [simp]: fixes rt pre ip dip assumes"dip ∈ 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 ∈ 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 ∈ 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 ∈ 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 ∈ 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 ∈ kD rt" shows"sqn (the (addpreRT rt dip pre)) ip = sqn rt ip" unfolding sqn_def addpreRT_def using assms [THEN kD_Some] by (clarsimp)
lemma dhops_addpreRT [simp]: fixes rt pre ip dip assumes"dip ∈ 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]: "∧ip dip. ip∈kD(rt ξ) ==> sqnf (the (addpreRT (rt ξ) ip npre)) dip = sqnf (rt ξ) dip" unfolding sqnf_def addpreRT_def by auto
subsubsection"Updating route entries"
lemma in_kD_case [simp]: fixes dip rt assumes"dip ∈ kD(rt)" shows"(case rt dip of None ==> en | Some r ==> es r) = es (the (rt dip))" using assms [THEN kD_Some] by auto
lemma not_in_kD_case [simp]: fixes dip rt assumes"dip ∉ kD(rt)" shows"(case rt dip of None ==> en | Some r ==> 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 ∉ kD(rt)" shows"sqn rt dip = 0" using assms unfolding sqn_def by simp
lemma update_arg_wf_gives_cases: "∧r. update_arg_wf r ==> (π2(r) = 0) = (π3(r) = unk)" unfolding update_arg_wf_def by simp
lemma update_arg_wf_tuples [simp]: "∧nhip pre. update_arg_wf (0, unk, val, Suc 0, nhip, pre)" "∧n hops nhip pre. update_arg_wf (Suc n, kno, val, hops, nhip, pre)" unfolding update_arg_wf_def by auto
lemma update_arg_wf_tuples' [elim]: "∧n hops nhip pre. Suc 0 ≤ n ==> update_arg_wf (n, kno, val, hops, nhip, pre)" unfolding update_arg_wf_def by auto
lemma wf_r_cases [intro]: fixes P r assumes"update_arg_wf r" and c1: "∧nhip pre. P (0, unk, val, Suc 0, nhip, pre)" and c2: "∧dsn hops nhip pre. dsn > 0 ==> 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‹update_arg_wf r›have wf1: "flag = val" and wf2: "(dsn = 0) = (dsk = unk)" and wf3: "dsk = unk ⟶ (hops = 1)" unfolding update_arg_wf_def by auto have"P (dsn, dsk, flag, hops, nhip, pre)" proof (cases dsk) assume"dsk = unk" moreoverwith wf2 wf3 have"dsn = 0"and"hops = Suc 0"by auto ultimatelyshow ?thesis using‹flag = val›by simp (rule c1) next assume"dsk = kno" moreoverwith wf2 have"dsn > 0"by simp ultimatelyshow ?thesis using‹flag = val›by simp (rule c2) qed with * show"P r"by simp qed
definition update :: "rt ==> ip ==> r ==> rt" where "update rt ip r ≡ case σ(rt, ip) of None ==> rt (ip ↦ r) | Some s ==> if π2(s) < π2(r) then rt (ip ↦ addpre r (π7(s))) else if π2(s) = π2(r) ∧ (π5(s) > π5(r) ∨ π4(s) = inv) then rt (ip ↦ addpre r (π7(s))) else if π3(r) = unk then rt (ip ↦ (π2(s), snd (addpre r (π7(s))))) else rt (ip ↦ addpre s (π7(r)))"
lemma update_simps [simp]: fixes r s nrt nr nr' ns rt ip defines"s ≡ the σ(rt, ip)" and"nr ≡ addpre r (π7(s))" and"nr' ≡ (π2(s), π3(nr), π4(nr), π5(nr), π6(nr), π7(nr))" and"ns ≡ addpre s (π7(r))" shows "[ip ∉ kD(rt)]==> update rt ip r = rt (ip ↦ r)" "[ip ∈ kD(rt); sqn rt ip < π2(r)]==> update rt ip r = rt (ip ↦ nr)" "[ip ∈ kD(rt); sqn rt ip = π2(r); the (dhops rt ip) > π5(r)]==> update rt ip r = rt (ip ↦ nr)" "[ip ∈ kD(rt); sqn rt ip = π2(r); flag rt ip = Some inv]==> update rt ip r = rt (ip ↦ nr)" "[ip ∈ kD(rt); π3(r) = unk; (π2(r) = 0) = (π3(r) = unk)]==> update rt ip r = rt (ip ↦ nr')" "[ip ∈ kD(rt); sqn rt ip ≥ π2(r); π3(r) = kno; sqn rt ip = π2(r) ==> the (dhops rt ip) ≤ π5(r) ∧ the (flag rt ip) = val ] ==> update rt ip r = rt (ip ↦ ns)" proof - assume"ip∉kD(rt)" hence"σ(rt, ip) = None" .. thus"update rt ip r = rt (ip ↦ r)" unfolding update_def by simp next assume"ip ∈ kD(rt)" and"sqn rt ip < π2(r)" 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‹sqn rt ip < \π2(r)›show"update rt ip r = rt (ip ↦ nr)" unfolding update_def nr_def s_def by auto next assume"ip ∈ kD(rt)" and"sqn rt ip = π2(r)" and"the (dhops rt ip) > π5(r)" 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‹sqn rt ip = π2(r)›and‹the (dhops rt ip) > π5(r)› show"update rt ip r = rt (ip ↦ nr)" unfolding update_def nr_def s_def by auto next assume"ip ∈ kD(rt)" and"sqn rt ip = π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‹sqn rt ip = π2(r)›and‹flag rt ip = Some inv› show"update rt ip r = rt (ip ↦ nr)" unfolding update_def nr_def s_def by auto next assume"ip ∈ kD(rt)" and"π3(r) = unk" and"(π2(r) = 0) = (π3(r) = unk)" 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‹(π2(r) = 0) = (π3(r) = unk)›and‹π3(r) = unk› show"update rt ip r = rt (ip ↦ nr')" unfolding update_def nr'_def nr_def s_def by (cases r) simp next assume"ip ∈ kD(rt)" and otherassms: "sqn rt ip ≥ π2(r)" "π3(r) = kno" "sqn rt ip = π2(r) ==> the (dhops rt ip) ≤ π5(r) ∧ 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 ↦ ns)" unfolding update_def ns_def s_def by auto qed
lemma update_cases [elim]: assumes"(π2(r) = 0) = (π3(r) = unk)" and c1: "[ip ∉ kD(rt)]==> P (rt (ip ↦ r))"
and c2: "[ip ∈ kD(rt); sqn rt ip < π2(r)] ==> P (rt (ip ↦ addpre r (π7(the σ(rt, ip)))))" and c3: "[ip ∈ kD(rt); sqn rt ip = π2(r); the (dhops rt ip) > π5(r)] ==> P (rt (ip ↦ addpre r (π7(the σ(rt, ip)))))" and c4: "[ip ∈ kD(rt); sqn rt ip = π2(r); the (flag rt ip) = inv] ==> P (rt (ip ↦ addpre r (π7(the σ(rt, ip)))))" and c5: "[ip ∈ kD(rt); π3(r) = unk] ==> P (rt (ip ↦ (π2(the σ(rt, ip)), π3(r), π4(r), π5(r), π6(r), π7(addpre r (π7(the σ(rt, ip)))))))" and c6: "[ip ∈ kD(rt); sqn rt ip ≥ π2(r); π3(r) = kno; sqn rt ip = π2(r) ==> the (dhops rt ip) ≤ π5(r) ∧ the (flag rt ip) = val] ==> P (rt (ip ↦ addpre (the σ(rt, ip)) (π7(r))))" shows"(P (update rt ip r))" proof (cases "ip ∈ kD(rt)") assume"ip ∉ kD(rt)" with c1 show ?thesis by simp next assume"ip ∈ kD(rt)" moreoverthenobtain dsn dsk fl hops nhip pre where rteq: "rt ip = Some (dsn, dsk, fl, hops, nhip, pre)" by (metis kD_Some) moreoverobtain dsn' dsk' fl' hops' nhip' pre' where req: "r = (dsn', dsk', fl', hops', nhip', pre')" by (cases r) metis ultimatelyshow ?thesis using‹(π2(r) = 0) = (π3(r) = unk)›
c2 [OF ‹ip∈kD(rt)›]
c3 [OF ‹ip∈kD(rt)›]
c4 [OF ‹ip∈kD(rt)›]
c5 [OF ‹ip∈kD(rt)›]
c6 [OF ‹ip∈kD(rt)›] unfolding update_def sqn_def by auto qed
lemma update_cases_kD: assumes"(π2(r) = 0) = (π3(r) = unk)" and"ip ∈ kD(rt)" and c2: "sqn rt ip < π2(r) ==> P (rt (ip ↦ addpre r (π7(the σ(rt, ip)))))" and c3: "[sqn rt ip = π2(r); the (dhops rt ip) > π5(r)] ==> P (rt (ip ↦ addpre r (π7(the σ(rt, ip)))))" and c4: "[sqn rt ip = π2(r); the (flag rt ip) = inv] ==> P (rt (ip ↦ addpre r (π7(the σ(rt, ip)))))" and c5: "π3(r) = unk ==> P (rt (ip ↦ (π2(the σ(rt, ip)), π3(r), π4(r), π5(r), π6(r), π7(addpre r (π7(the σ(rt, ip)))))))" and c6: "[sqn rt ip ≥ π2(r); π3(r) = kno; sqn rt ip = π2(r) ==> the (dhops rt ip) ≤ π5(r) ∧ the (flag rt ip) = val] ==> P (rt (ip ↦ addpre (the σ(rt, ip)) (π7(r))))" shows"(P (update rt ip r))" using assms(1) proof (rule update_cases) assume"sqn rt ip < π2(r)" thus"P (rt(ip ↦ addpre r (π7(the (rt ip)))))"by (rule c2) next assume"sqn rt ip = π2(r)" and"the (dhops rt ip) > π5(r)" thus"P (rt(ip ↦ addpre r (π7 (the (rt ip)))))" by (rule c3) next assume"sqn rt ip = π2(r)" and"the (flag rt ip) = inv" thus"P (rt(ip ↦ addpre r (π7 (the (rt ip)))))" by (rule c4) next assume"π3(r) = unk" thus"P (rt (ip ↦ (π2(the σ(rt, ip)), π3(r), π4(r), π5(r), π6(r), π7(addpre r (π7(the (rt ip)))))))" by (rule c5) next assume"sqn rt ip ≥ π2(r)" and"π3(r) = kno" and"sqn rt ip = π2(r) ==> the (dhops rt ip) ≤ π5(r) ∧ the (flag rt ip) = val" thus"P (rt (ip ↦ addpre (the (rt ip)) (π7(r))))" by (rule c6) qed (simp add: ‹ip ∈ kD(rt)›)
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 ≠ 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: "∧v. rt dip = Some v ==> update rt dip (dsn, dsk, flag, hops, nhip, {}) ≠ rt(dip ↦ addpre (the (rt dip)) (π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 ≠ None" thenobtain 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 (λx. if x = rip then Some v else rt x) ip = (if ip = rip then π2(v) else sqn rt ip)" unfolding sqn_def by simp
lemma dhops_invalidate [simp]: "∧dip. the (dhops (invalidate rt dests) dip) = the (dhops rt dip)" unfolding invalidate_def by (clarsimp split: option.split)
lemma sqnf_invalidate [simp]: "∧dip. sqnf (invalidate (rt ξ) (dests ξ)) dip = sqnf (rt ξ) dip" unfolding sqnf_def invalidate_def by (clarsimp split: option.split)
lemma nhop_invalidate [simp]: "∧dip. the (nhop (invalidate (rt ξ) (dests ξ)) dip) = the (nhop (rt ξ) dip)" unfolding invalidate_def by (clarsimp split: option.split)
lemma dests_iD_invalidate [simp]: assumes"dests ip = Some rsn" and"ip∈kD(rt)" shows"ip∈iD(invalidate rt dests)" using assms(1) assms(2) [THEN kD_Some] unfolding invalidate_def iD_def by (clarsimp split: option.split)
subsection"Route Requests"
text‹Generate a fresh route request identifier.›
definition nrreqid :: "(ip × rreqid) set ==> ip ==> rreqid" where"nrreqid rreqs ip ≡ Max ({n. (ip, n) ∈ rreqs} ∪ {0}) + 1"
subsection"Queued Packets"
text‹Functions for sending data packets.›
type_synonym store = "ip ⇀ (p × data list)"
definition sigma_queue :: "store ==> ip ==> data list" (‹σ'(_, _')›) where"σ(store, dip) ≡ case store dip of None ==> [] | Some (p, q) ==> q"
definition qD :: "store ==> ip set" where"qD ≡ dom"
definition add :: "data ==> ip ==> store ==> store" where"add d dip store ≡ case store dip of None ==> store (dip ↦ (req, [d])) | Some (p, q) ==> store (dip ↦ (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)
definition drop :: "ip ==> store ⇀ store" where"drop dip store ≡ map_option (λ(p, q). if tl q = [] then store (dip := None) else store (dip ↦ (p, tl q))) (store dip)"
definition unsetRRF :: "store ==> ip ==> store" where"unsetRRF store dip ≡ case store dip of None ==> store | Some (p, q) ==> store (dip ↦ (noreq, q))"
definition setRRF :: "store ==> (ip ⇀ sqn) ==> store" where"setRRF store dests ≡ λdip. if dests dip = None then store dip else map_option (λ(_, q). (req, q)) (store dip)"
subsection"Comparison with the original technical report"
text‹
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 @{term precs} is partial. \item @{term "σ-flag(store, dip)"} is partial. \item The routing table (@{typ rt}) is modelled as a map (@{typ "ip ==> 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 more related facts are available
automatically, rather than having to be acquired through tedious proofs. \item Similar remarks hold for the dests mapping passed to @{term "invalidate"},
and @{term "store"}. \end{enumerate} ›
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.