SSL Aodv.thy
Interaktion und PortierbarkeitIsabelle
(* Title: Aodv.thy
License BSD 2 .
Author : Timothy Bourke , Inria
*)
section "
theory
imports Aodv_Data Aodv_M
AWN._SOS_Lls AAWInants
begin
subsectionData "
record =
ip :: "ip"
sn :: "sqn"
rt :: "rt"
rreqs :: "(ip × rreqid) set"
store :: "store"
(* all locals *)
msg :: "msg"
data :: "data"
dests :: "ip ⇀ sqn"
pre :: "ip set"
rreqid :: "rreqid"
dip :: "ip"
oip :: "ip"
hops :: "nat"
dsn :: "sqn"
dsk :: "k"
osn :: "sqn"
sip :: "ip"
abbreviation aodv_init :: "ip ==> state"
where "aodv_init i ≡ (
ip = i,
sn = 1,
rt = Map.empty,
rreqs = {},
store = Map.empty,
msg = (SOME x. True),
data = (SOME x. True),
dests = (SOME x. True),
pre = (SOME x. True),
rreqid = (SOME x. True),
dip = (SOME x. True),
oip = (SOME x. True),
hops = (SOME x. True),
dsn = (SOME x. True),
dsk = (SOME x. True),
osn = (SOME x. True),
sip = (SOME x. x ≠ i)
java.lang.NullPointerException
lemma some_neq_not_eq [simp]: " not(SOME x :: nat. x ≠ i) = i)"
by (subst some_eq_ex) (metis zero_neq_numeral)
definition clear_locals :: " state ==> state"
where " clear_locals ξ = ξ ( : "sqn"
msg := (SOME x. True),
data := (SOME x. True :""
dests := (SOME x. True),
pre :SOME
rreqid
dip :=(SOME x.True,
oip := (SOME x. True),
hops := (SOME :: "datad"
dsn := (SOME x. True),
dsk := (SOME set
::rreqid
sip ( x. x <noteqnoteq ip)
)
lemma clear_locals_sip_not_ip :ip
unfolding by simp :: "sqn
lemma :: " "
" ip (clear_locals ξ) = ip ξ
"aodv_init i \equiv >🚫
" rt (clear_locals ξ) = rt ξ"
" rreqs x. True
"store (rre = (SOME x. True),
unfolding clear_locby auto
subsection " Auxilliary= SOME),
definition
where is_newpkt ≡ of
Newpkt data OME i)
| _ ==> "
definition is_pkt
where by (s (subst some_eq_ex) (metis zero_neq_numeral)
Pkt data dip'oip'\Rightarrow { xi\lparr > data := data', dip := dip', oip := oip' ) }
| _ ==>
definition is_rreq
where " is_rreq ≡ of
OME rue
\xi <>hopsqidrreqid: ip,
dsk := dskdsnSOME rue
|_Rightarrow {}"
lemma is_rreq_asm [dest!]:
assumes " ξ < is_rreq ξ"
shows " (∃ hops' rreqidp'osn
msg ξ"
i hops := hops', rreqid := rreqid', dip := dip', dsn := dsn',
dsk_i (clear_locals ξ)"
using assms is_rreq_def
by (cases "msg ξ [simp]:
definition is_rrep
where " is_rrep"sn (clear_locals \ ξ"
Rreps''oipRightarrow>
{ ξ( hops := hops', dip := dip', dsn := dsn', oip := oip', sip := sip' ) }
| _ ==> {}"
lemma is_rrep_asm [dest!]:
assumes " ξ' ∈ is_rrep ξ"
shows " (∃ hops' dip' dsn' oip' sip'.
msg ξ = Rrep hops' dip' dsn' oip' sip' ∧
ξ' = ξ( hops := hops', dip := dip', dsn := dsn', oip := oip', sip := sip' ) )"
using assms unfolding is_rrep_def
by (cases " msg ξ") simp_all
definition iss ca_lc \> = stor<
where" <xi case msg ξ
'Rightarrow> { ξ dests := dests', sip := sip }
| _ ==>
lemma [dest!]
assumes "ξ' ∈ {}"
shows "(∃
<> =Rer dss' sip <and
' <i\lparr > dests := dests', sip := sip' ) )"
using assms unfolding is_rerr_def
by (cases "msg \< |' p dp'dssn := dsn',
lemmassg_defs f
is_rerr_def is_rrep_def is_rreq_def is_pkt_def is_newpkt_def
lemma is is_rreq_asm [dest]:
" ξ is_rerr ==> "
shows \> opsrrq dp' d dsk'oi' sn' ip
xi>∈ is_rreq ξ ip ξ<>"
"ξ' = ξ
\xi >' ∈ ip ξ"
unfolding is_msg_defs
by cases<", clarsimp+)+
lemma is_msg_inv_s is_rrep
" ξ is_rerr ξ sn ξ"
" ξ' ∈
\' ∈ sn \xi <>
"ξ' ∈ {}"
"ξ' ∈
unfolding is_msg_defs
by (cases " msg<xi", clarsimp+)+
lemmasg_inv_rt [sp]
" ξ
"ξ' ∈ ( )"
"ξ' ∈ ξ
" is_rerr>≡
"ξ' sip' ==> dests := dests', sip := sip' )
unfolding is_msg_defs
by (cases " msg
lemma is_msg_inv_rreqs [simp:
"ξdests' sip'.
" ξ' <in
"ξ iw_def
" ξjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
"ξ is_newpkt ξ rreqs ξ= rreqs ξ
unfolding is_msg_defs
by (cases " msg ξ", clarsimp+)+
lemmais_msg_inv_store [simp]:
" ξ'n 🚫 sn' "
" <>' ∈ store> = store \>
<>in is_rreq <i >' = storexi>"
" ξ is_pkt ξ
"ξ' ∈ ' ∈ sn ξ"
unfolding is_msg_defs " ξ
by (cases " msg' ∈ rt ξ"
lemma is_msg_inv_sip [simp]:
" ξ is_pkt ξ>sip ξ \> java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
\' ∈ is_newpkt ==> "
nfolding g_defs
by (cases " msg
subsection "The protocol process"
datatype pseqp =
PAodv
| PNewPkt
| PPkt
| PRreq
| PRrep
| Rerr
fun nat_of_seqp : \w > nat"
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 5
" nat_of_seqp PAodv =<>'<>s_rreq ==> \xi "
| " nat_of_seqp Pkt
| "nat_of_seqp " <> <> is_newpkt ==> ' ξ
| "nat_of_seqp PRreq = 4"
|"at_of_seqp p = 5
| " nat_of_seqp' is_pkt ξ sip ξ"
instantiationg_defs
begin
definition less_eq_seqp [iff]: " l1 ≤
definition less_seqp
instance ..
end
abbreviation AODV :\ghtarrow
where
"AODV \ ek
abbreviation PKT
where
" PKT args java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
< PKT
(clear_locals ξ) p) = >in
call(PPkt
abbreviation )"
where
" NEWPKT args ≡ ξ in
\lbrakk <. let )xi> in
(clear_locals
call(PNewPkt)"
abbreviationξs = a<> n
where
" RREQ
[ nsk
(clear_locals ξ) ( ]
dsn := dsn
osn :RREP
call(<ξ rgs in
abbreviation RREP
where
"RREP args ≡
[
r_locals ξ hops := hops, dip := dip, dsn := ds,
java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
call(PRrep)"
abbreviation RERR
where
"RERR args ≡
[ p)a<>
ocals \ >) \\ <lparr> dests := dests, sip := sip \rparr <>
call(r)
java.lang.NullPointerException
where
" ΓAD java.lang.NullPointerException
receivemsg'\xi .<>\lparr > msg' <>)is_rrep
( ⟨ rt := updatexi) (sip<>) ( unk,, \> { \rparr \rbrakk
⊕ . (hops, dip xi>, dsn <, oip ξ))
⊕ is_rreq⟩
[ ξ. ξrt := update (rt ξ) (0 , unk,val ξ]
RREQξ<> rreqid ξ ξ, dsk ξ, osn ξ))
⊕ ⟨ λ. { ξ dip := dip> | dip. dip ∈ \inter vD(rt ξ) }⟩
[ rt := update <xi>) (sip <)
RREP(λξ. (hops ξ, dip ξ, dsn ξ(λ. the (nhop ξ)), λ. pkt(data ξ, ip <xi.
⊕ ⟨ ξ ( xi) (store ξ]
[ [ <( rip (rip vD (rt ξ nhop (rt ξrt) (dip <xi)
RERR(λξ. (dests ξ,then Some (sqn ( ξ None]
)
⊕ λ. { ξ dip := dip ) qD(store ξ vD(rt ξ}\rangle
[ ξ. ξξ ( ) (dests ξ))
unicast(λ. the (rt<>)dip)), λ. pkt(data ξ, ip ξ
[ ξ. ξξ. \xi > ( rip (( ξ None the ( (rt) rip) \noteq }
AODV
▹ . pre , λ. rerr ξ).AODV
Someinc( (rt) rip)) Nonerparr>]
<ξ. ξ ( rt := invalidate (rt ξ) (dests ξ) ) ]
[ ξ. ξ ( store := setRRF (store ξ) (dests ξ)) ]
[ ξ. ξ🚫 = ( \i ) )
ξ ( \lambda >rip ((dests<> rip ≠ (precs ξ<>
then (dests ξelseNone) <>]
groupcast<. rerr ξ)). AODV
⊕ ⟨ ip ξ <xi ξ)
| dip. dip ∈
[ <xi>ξ store := unsetRRF(store) (dip ξ]
[ i sn := inc (sn) )
[ ξ. data ξ
[ <. rreqs ξ {(ip ξ ξ]
broadcast(λξ. rreq(0 , rreqid ξ, dip <xi\. ξ store := add (data) (dip ξ) )
ip, sn ξ)). AODV()"
| " ΓAD PNewPktlangle<xi>. dip ξ = ip ξ⟩
⟨ . dip ξ ip ξ⟩
deliver(λξ. data⊕ ξ. dip>≠ ξ
⊕ ⟨ ξ. dip ξ
[ xi>. ξ ( store := add (data ξ (dip ξstore ξ<rparr>]
AODV())"
| " ΓA O D V PPkt = labelled PPkt (
⟨ ξ. dip ξ(λ. the (nhop (rt) (dip ξξ ξ, oip ξ)).AODV()
deliver(λ
⊕ ⟨ ξ.\xi \lparr dests := \lambda rip (rip vD (rt ξ nhop (rt ξ = nhop ξ<))
⟨ ξ. dip [ ( ) (dests <>)
<>)dip, oip<>).AODV)
▹
[ ξ. ξ ( dests := (λrip. if (rip ∈ ξ <>pre { the (precs (rt ξ dom (dests<>) } )
Someinc ( (rt\xi > )) else) )
[ ξ. ξ ( (dests ξripelse None) )
[ ξ. ξ ( store : groupcast(λ> pre ξ,λ. rerr(dests ξ ip ξ()
[ ξ. \xi > ( : ∪ ( ξ) | rip ∈ ) } )
ξ
then (dests ξ) rip else None) ) (λ. the (precs ξ)),
groupcast<>ξ ξξ <>,ip)).AODV()
⊕ ⟨ ξ. dip> <langle>ξ. dip ∉
(
⟨
groupcast(λ<>. theprecs(rt < dip)),
λξ. ( ξ> ∈ ⟩
⊕ ⟨ . (oip ξ) ∉
AODVξ. ξ rt := updatert> (oip ξxi kno, val, hops ξ + 1 , sip ξ, {}) ) ]
)
))"
| " ΓO V PRreq = labelled PRreq (
⟨ ξ. (oip ξ[ . ξ sn := max (sn ξ) )
AODV()
⊕
[ ξξ ( rip. if (rip vD (rt ξ<> (rt\xi > = nhop ξxi))
[ ξ. ξ ( rreqs := rreqs ξ ∪ ( (sqn (rt ξ))elseNone) ) ]
(
⟨ ξ. dip ξ = ip ξ⟩
[ ξ. ξ ( sn := max (sn ξ) (dsn ξ) ) <lbrakkxi ξ ( rt := invalidate (rt ξ) (dests ξ) )
unicast(λξ. the (nhop (rt ξ) (oip ξ)), <lambda\>ξ. ξ ( store= setRRF (store ξ ξ)
▹ [ . ξ dests := (λ. if ξ None ∧ precs ( ξnoteq {})
ξ <> ( rip. if (rip ∈ ) ∧ ) rip =nhop ( ξ))
then Some (incgroupcastξ xi, λ. rerr(dests, ip ξ
[ ξ ( ξ> )
[ . ξ store := setRRF (store ξ))
[ ξ ( (rt) (dip ξ}) )
[ ξξ. ξ rt := the (addpreRTrtξ (oip) {the (nhop ξ))}) )
then ξ None]
groupcast (rt) (dip ξ <>, ip ξ)).
⊕
(
<>\) ∧ sqn (rt ξ ξ sqnf (rt ξ ξ⟩
[ ξ. ξ ( rt := the (addpreRT (rt ξ) (dip ξ) {sip ξ}) ) ]
[ ξ<><xi ( \lambda rip (rip vD (rt ξ nhop (rt ξ (rtxi) (oip ξ
unicast(λ (inc (rt>) rip)) else ) )
sqn (rt ξ><xi>. ξ\lparr rt : invalidate (rtxi (dests ξ) ) ]
AODV()
▹
[ . ξ dests := (λ. if (rip vD (rt ξ) ∧ ξ= nhop (rtxi) (oip ξ
then Somelbrakk<xi>. ξ ( dests := (λ. if (dests) rip ≠ the (precs ξ {})
<>\ rt := invalidate (rt ξ> )
[ ξ. ξ ( store := setRRF (store ξ) (dests ξ)) ><xi>. pre ξ, λξrerr(dests, ip ξ
[ . ξ( :=∪ <<xi dom (dests) } )
\lbrakk >ξ ( . if dests) rip<noteqNone ∧ the (precs (rt ξ rip {})
then (destsdsk ξξ osn ξ, ip ξ)).
groupcast(λξAODV
⊕
broadcast(λ
sk ξ ξ\xi , ip i
AODV()
)
))"
| " Γ. <> = ip ⟩
⟨
[ ξ. ξ ( rt := update (rt ξ) (dip ξ) (dsn ξ, kno, val, hops ξ + 1 , sip ξ, {}) ) ]
(
⟨ ξ. oip ξ = ip ξ ⟩
AODV()
⊕ ⟨ ξ. oip ξ ≠ ip ξ ⟩
(
⟨ ξ. oip ξ ∈ vD (rt ξ)⟩
[ ξ. ξ ( rt := the (addpreRT (rt ξ) (dip ξ) {the (nhop (rt ξ) (oip ξ))}) ) ]
[ ξ. ξ ( rt := the (addpreRT (rt ξ) (the (nhop (rt ξ) (dip ξ)))
{the (nhop (rt ξ) (oip ξ))}) ) ]
unicast(<\<rt)⟩
(
▹ \rt := the (addpreRT <>) ((rt) (dip)))
[ ( . if ∈ \and (rt) rip = nhop <>
Some ( ξ]
[ ()
[ ξ ( ]
<ξ. ξ destsrip ( ∈ nhop) rip=nhop \ (oip))
>ξ ( . if dests) rip\noteq None \and the (precs (rt ξ) rip) ≠
then (dests ξξ. ξ ( := nvalidate ξ ξrparr]
groupcast(λξ. ξ store := setRRF (storexi) (dests\) <rparr>]
⊕ > oip ξ vD (rt ξ
AODV()
)
)
)
⊕ ξ ξξ ξ)).AODV()
AODV()
)"
| " Γ)
[ ξ
| Some rsn\Rightarrow > if ∈ and > (nhop( \< > rip == \< >
\<and > sqn
\<lbrakk| \Gamma\^ub\^>\^sub D^> = PRerr(
\ <>\xi. <> \lparr>dests= \lambdarip (dests \<xi) rip of None \RightarrowNone
\<lbrakk><xi.\<xi> <> :=\Union ( <> ) |rip. rip\in dom(dests \<xi)}\<rparr><>
\\<and sqn(rt\<i>rip <<rsn Somersn else None \rparr\rbrakk
then (dests \<xi>) rip else None) \<rparr> <><>.\<xi <lparr rt=invalidate ((rt\xi) (dests \<xi)\rparr\<brakk>
groupcast(\<lambda\<>. \<i,\lambda\<>. rerrdests\xi> ip \<i>). AODV()"
declare \Gamma\^sub >A<^sub >O\^>D\^sub >Vsimps[simp del]
lemmas \<Gamma> \<lbrakk\xi.\xi := \lambda>.if ((dests <> rip \noteq \<> the ( ( \xi)rip\<> {)
fun \<Gamma>\<^sub >A\<^sub >O\<^sub >D (\lambda\xi> \xi, <>\<>.rerr( \<> ip\<xi>).AODV()"
where
"\<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V_skeleton PAodv = seqp_skeleton (\<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V PAodv)"
|"<Gamma>\^>A\^>O<sub>\^sub>V_skeletonPNewPkt= seqp_skeleton\Gamma\^>\^>\^subD<sub>VPNewPkt)"
| "\<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V_skeleton PPkt = seqp_skeleton (\<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V PPkt)"
| "\Gamma\<sub>\<^subO<subD<subV_skeletonPRreq = seqp_skeleton (\<Gamma>\<^sub>\<^sub>O\<^>D\^subV PRreq)" "
| "\<Gamma>\<^sub>A\<^sub>O\<fun <Gamma\<^>A\^sub>\^subD\sub>V_skeleton
"<><^>\^>\<sub\^> PRerr= seqp_skeleton (\Gamma><subA<subO<subD\<^> PRerr"
lemma<><sub \^>\^>\^sub > simp
"wellformed \<Gamma> | " \Gamma<sub O<sub D<sub > seqp_skeleton\Gamma\<^>A<sub O\^>\^> PPkt"
proofruleintro)
fix pn|"<>\^>A<^>O<^sub>D<sub>V_skeleton PRrep = seqp_skeleton (\Gamma\<^>A\^subO\^subD<^ubV PRrep)"
show "call(pn') \<notin> stermsl (\<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V_skeleton pn)"
by (cases pn) simp_all
qed
declare \<java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
\Gamma^>A\<sub \^>\^>V_skeleton_simps[, ] =\<><sub A<^>O<sub >\sub V_skeleton. [implified \><sub A\^ubO<sub D\^>V_simps seqp_skeleton.imps
lemma aodv_proc_cases [dest]:
fixes pp pn
shows "p \<in>
<in >ctermsl<><^sub ><sub O<^sub D\^> PAodv \<>
p \<in > ctermsl (shows" \in> ctermsl(\Gamma\<sub>A<^>O\^sub>\<> pn \<>
p\in \Gamma\^ubA<sub O<sub D\^>V ) \<>
p \<in > ctermsl (\<Gamma>\<^sub >A\<^sub >O\<^sub >D\<^sub >V PRreq) \<or >
p \<in > ctermsl (\<Gamma>\<^sub >A\<^sub >O\<^sub >D\<^sub >V PRrep) \<or >
p \<in > ctermsl ( \in > (\Gamma><sub >A\^>\^>D\<^sub >V PRreq) \<or >
by (cases pn) simp_all
definition <sigma\<sub A<sub O<sub D<sub V: ip <>( \<>(state, msg, pseqp, pseqp label) seqp) set "
where "\<sigma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V i \<equiv> {(aodv_init i, \<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V PAodv)}"
abbreviation paodv
: "ip \Rightarrow (state\<> (, msg, pseqp label seqp,msg seq_action)automaton"
where
"paodv i \sigma>\^subA<subO<^>D\<subV : " \<> ( \<> (, msg, , pseqp label)seqp) set "
lemma aodv_trans: "trans (paodv i) = seqp_sos \<Gamma>\<^sub>A\<^sub paodv
by simp
lemma aodv_control_within [simp]: "control_within \<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V (init (paodv i))"
unfolding \<sigmajava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
lemma aodv_wf [simp]:
"wellformed \<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>Ve sigma\<^>A<^>O<subD\<^sub>V_defby rule )( simpdel\<sub>A<^sub>O<^sub>D\^sub>simps)
proof (rule, intro allI)
fix pn pn'
show"call(pn) \notin stermsl (<Gamma><subA<^sub>O\<sub>D\<^sub>V pn"
by (cases pn) simp_all
qed
lemmas aodv_labels_not_empty [] =labels_not_emptyOF aodv_wf
lemma aodv_ex_label [intro]: "\<exists>l. l\<in>labels \<Gamma>\<^sub>A\<^sub> " call(')\notin stermsl (<Gamma>\^>A\^sub>\<sub>\^sub>V )"
by (metis aodv_labels_not_empty all_not_in_conv)
lemma aodv_ex_labelE [elim]:
assumes "\<forall>l\<in>labels \<Gamma>\<^sub>A\<^sub>O\<^subjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
and "\<exists>p l. P l p <Gamma>\<^>A\^sub>O<^>D\^sub>> p.P p"
shows ""
using assmsshows""
lemma aodv_simple_labels [simp]: "simple_labels \<Gamma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V"
proof
fixpnp
assume "p\<in>subterms(\<Gamma>\<^sub>A\<java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 7
thus "\<exists>!l. labels \<Gamma>\<^sub>A\<^sub>O\<^sub>thus" <>!l.labels \Gamma\^>A\^ubO\^ubD\<^sub l"
by (cases pn) (simp_allby casespn) simp_allcong seqp_congs elimdisjE)+
qed
lemma \<sigma>\<^sub >A\<^sub >O<sub D<sub V_labels[simp"\xi,p <in> <sigma\<subA\<subO<subD<subV \<> \Gamma\<^>A<^sub>O<sub>D\<^sub> p {PAodv-:0"
unfolding\sigma<sub A\^ubO\^sub >D<^sub >V_defby simp
lemma aodv_init_kD_empty [simp]:
"(\<xi>, p) \<in> \<sigma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V i \<Longrightarrow> kD (rt \<xi>) = {}"
unfolding\<sigma\^>A\<O<sub D\^>V_def kD_defbysimp
lemmaaodv_init_sip_not_ip[] "\not( (aodv_initi) =i)" by simp
lemma ' [simp]:
assumes "(\<xi>, p) \<in> \<sigma>\<^sub>A\<^sub>O\<^sub>java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
shows "sip \<xi> \<noteq> ip \<xi>"
usingassms \sigma\^>\^>\^sub >D<sub > bysimp
lemma assumes"(\xi>, ) \in \sigma\<^>A\<sub>O<^>D\<^sub>Vi"
assumes "(\<xi>, p) \<in> \<sigma>\<^sub>A\<^sub>O\<^sub>D\<^sub>V i"
shows "sip \<xi> \<noteq> i"
using assms unfolding \<sigma>\<^sub >A\<^sub >O\<^sub >D\<^sub shows
lemma clear_locals_sip_not_ip':
assumes "ip \<xi> = i"
shows "\<not>(sip (clear_locals \<xi>) = i)"
using assms by auto
text \
declare seqp_congs [cong]
textshows"\not>sip(lear_locals \<xi> =i)"
declare
\<text <>Stop the simplifierfrom into process .\lose
aodv_proc_cases [ctermsl_cases]
OF aodv_simple_labels,
cterms_intros]
seq_step_invariant_ctermsI [ aodv_control_within ,
cterms_intros]
end
Messung V0.5 in Prozent C=97 H=88 G=92
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.22Angebot
¤
*Eine klare Vorstellung vom Zielzustand
Wurzel
Suchen
NIST Cobol Testsuite
Haftungshinweis
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.
2026-06-12