java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 text
Maintainer: Norbert Schirmer, norbert.schirmer
Copyright (Cnow camples
*)
sectionβΉ
VcgEx imports "../HeapList" "../Vcg" begin
<> M :== π
texttt{HOL/Isar\_examples/HoareEx.thy}. βΊ
subsectionβΉπ
βΉ" = "{a>S = = π*\rbrace
First of all we provide a store of program variables that
occur in the programs considered later. Slightly unexpected
things may happen when attempting to work with undeclared variables. βΊπS = 0}\>π
βΉ_'βΊπM β βπM + 1)* b\>"
avoid cluttering the namespace with the simple names that could no longer
used for logical variables otherwise. βΊ
textβΉ
will regard procedures without global variables and finally we
get the full pictures: mutually recursive procedures with global
(including heap). βΊ
subsectionβΉ?inv \<nd a)}{S = a * b}auto
βΉ
We look at few trivialities involving assignment and sequential
composition, in order to get an idea of how to work with our
formulation fin th y βΊ
βΉ
Using the basic rule directly is a bit cumbersome.
βΉ
If we refer to components (variables) of the state-space of the program
we always mark these with βΉM * b}
most keyboards. So all program variables are marked with the acute and all
logical variables are not.
The assertions of the Hoare tuple are
ordinary Isabelle sets. As we usually want to refer to the state space
in the assertions, we provide special brackets for them. TheyDO \<cuteSM + 1 OD
as {\verb+{| |}+} in ASCII or βΉ{}βΊS = a * b\<>"
markingvc
state and secondary we get rid of the suffix βΉHere some examples of ``breaking'' out of a loopβΊ
So the assertion @{term "{|πN = 5|}"} internally \<acuteS = 0} βΉM * b}
Isabelle. It describes the set of states where the βΉM = a THEN THROW ELSE πS + b;; πM + 1 F OD
is βΊ
βΉ
Certainly we want the state modification already done, e.g.\ by
simplification. The βΉπS = 0}
``obvious'' consequences as well. βΊS = π
"Γπ«π
by vcg
"Γβ¨{2 * \ <ute M + 1
by vcg
"Γβ¨{πN = 5}
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 11
apply simp
done
"Γβ¨{TRY-CATCHβΊRAISEβΊ
by vcg
"Γ \lbraceπN :== πN = a + 1}
by vcg
"Γβ¨
by vcg
"Γ { \<teMN = b}
by vcg
java.lang.StringIndexOutOfBoundsException: Index 119 out of bounds for length 119 πS + b;; πM + 1 {πM = b β§πN = a}"
by vcg
βΉAbr =
can also perform verification conditions generation step by step by using βΉπ" βΊ
βΉAbr = ''Break''}β
It is important to note that statements like the following one can
only be proven for each individual program variable. Due to the
INV \lbraceπS = πM * b}
relating record selectors and updates schematically. βΊ
"Γβ¨ππN {N = a}"
by vcg
"ΓFI
apply (rule HoarePartial.Basic)
-- {* We can't proof this since we OD
oops
*) lemma"Gamma>β¨{s. x_' s = a} (Basic (λ
text \<open In the following assignments we make use of the consequence rule in order to achieve the intended precondition. Certainly, the βΉ \<close>
lemma " Γβ¨π LOC \acute>I;; π« "\<Gamma\turnstile> {πN = n}N :== 10;; πacute>N + 2 COL {πN = n}"
-
have "{πM = π
by auto
also have "Γ β¦M :== ππN}
by vcg
finally show ?thesis .
"Γβ¨open>
-
have "β§m n::nat. m = n βΆ m + 1 β n"
β
by simp
also have "\<theoblem
by vcg
finally show ?thesis .
"Γ
apply vcg
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
done
βΉ
βΉ
We now do some basic examples of actual \texttt{WHILE} programs.
This one is a loop for calculating the product of two natural
numbers, by iterated addition. We first give detailed structured
proof based on single-step Hoare rules. βΊ
"Γβ¨
WHILE πM β πS + b;; πM + 1 OD {πS = a * b}vcgβΊ method only applied locally to take care of
nment and seeutial composition. Nte that we xss
let "Γithout referring to the
let "{
have "{π
also have "Γ
proof
let ?c = "π{re\rbrace
have "{πS :== 0;; π
by auto
also have "Γ β¦π" by vcg
finally show "Γ {?inv β§π a}π"
qed
also have "{I :== π
finally show ?thesis by blast
βΉ
The subsequent version of the proof applies the βΉvcgβΊ method
to reduce the Hoare statement to a purely logical problem that can be
solved fully automatically. Note that we have to specify the \texttt{WHILE} loop invariant in the original statement. βΊ
"Γβ¨{πM = 0 β§πS = 0}
WHILE πM β a
INV {πS = πM * b}
DO πS :== πS + b;; πM :== πM + 1 OD {πS = a * b}"
apply vcg
apply auto
done
βΉHere some examples of ``breaking'' out of a loopβΊ
"Γβ¨{πM = 0 β§πS = 0}
TRY
WHILE True
INV {πS = πM * b}
DO IF πM = a THEN THROW ELSE πS :== πS + b;; πM :== πM + 1 FI OD
CATCH
SKIP
END {πS = a * b}"
vcg
auto
"Γβ¨{πM = 0 β§πS = 0}
TRY
WHILE True
INV {πS = πM * b}
DO IF πM = a THEN πAbr :== ''Break'';;THROW
ELSE πS :== πS + b;; πM :== πM + 1
FI
OD
CATCH
IF πAbr = ''Break'' THEN SKIP ELSE Throw FI
END {πS = a * b}"
vcg
auto
βΉSome more syntactic sugar, the label statement βΉβ¦ββ¦βΊ as shorthand
the βΉTRY-CATCHβΊ above, and the βΉRAISEβΊ for an state-update followed
a βΉTHROWβΊ. βΊ
"Γβ¨{πM = 0 β§πS = 0} {πAbr = ''Break''}β WHILE True INV {πS = πM * b}
DO IF πM = a THEN RAISE πAbr :== ''Break''
ELSE πS :== πS + b;; πM :== πM + 1
FI
OD {πS = a * b}"
vcg
auto
"Γβ¨{πM = 0 β§πS = 0} TRY WHILETrue INV\<lbrace>\<acute>S=\<acute>M*b\<rbrace> DOIF\<acute>M=aTHENRAISE\<acute>Abrproof- ELSE\<acute>S:==let?sum"<lambda>kSUMMj<jjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 FI OD java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 IF\<acute>Abr=''Break''THEN END \<lbrace>\<acute>S=a applyvcg applyauto done
lemma"\<Gamma>\<turnstile>\<lbrace>\<acute>M=0\<and>\<acute>S=0\<rbrace> \<lbrace>\<acute>Abr=''Break''\<rbrace>\<bullet>WHILETrue INV\<>\<acute>S=\<acuteM*b\<rbracejava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 DOIF\<acute>M=aTHENRAISE\<acute>Abr:==''Break'' ELSE\<acute>S:==\<acute>S+b;;\<acute>M:==\<acute>M+1 FI OD \<lbrace>\<acute>S=a*b\<rbrace>" applyvcg applyauto done
text\<open> Thefollowingproofisquiteexplicitintheindividualstepstaken, withthe\<open>vcg\<close>methodonlyappliedlocallytotakecareof assignmentandsequentialcomposition.Notethatweexpress intermediateproofobligationproofjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 statespace. \<close>
theorem"\<Gamma>\<turnstile>\<lbrace>True\<rbrace> \<acute>S:==0;;\<acute>I:==1;; WHILE\<acute>I\<noteq>n DO \<acute>S:==\<acute>S+\<acute>I;; \<acute>I:==\<acute>I+1 OD \<lbrace>\<acute>S=(SUMMj<n.java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 3 (is"\<Gamma>\<turnstile>_(_;;?while)_") proof- let?sum="\<lambda>k.SUMMj<k.<> let?inv="\<lambda>si.s=?sumi"
have"\<Gamma>\<turnstile>\<lbrace>True\<rbrace>\<acute>S:==0;;\<acute>I:==1\<lbrace>?inv\<acute>S\<acute>I\<rbrace>" proof- "\longrightarrow0?1java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 bysimp alsohave"\<Gamma>\<turnstile>\<lbrace>\<dots>\<rbrace>\<acute>S:==0;;\<acute>I:==1\<lbrace>?inv\<acute>S\<acute>I\<rbrace>" }<><>N=7 finallyshow?thesis. qed alsohave"\<Gamma>\<turnstile>\<lbrace>?inv\<acute>S\<acute>I\<rbrace>?while\<lbrace>?inv\<acute>S\<acute>I\<and>\<not>\<acute>I\<noteq>n\<rbrace>" java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 let?body="\<acute>S:==\<acute>S+\<acute>I;;\<acute>I:==\<acute>I+1" have"\<And>si.?invsi\<and>i\<noteq>n\<longrightarrow>?inv(s+i)(i+1)" bysimp alsohave"\<Gamma>\<turnstile>\<lbrace>\<acute>S+subsection\<>Mutually)RecursiveProcedures\close> byvcg finallyshow"\<Gamma>\<turnstile>\<lbrace>?inv\<acute>S\<acute>I\<and>\<acute>I\<noteq>n\<rbrace>?body\<lbrace>?inv\<acute>S\<acute>I\<rbrace>". qed alsohave"\<And>si.s=?sumi\<and>\<not>i\<noteq>n\<longrightarrow>s=?sumn" bysimp finallyshow?thesis. qed
theorem"\<Gamma>\<turnstile>\<lbrace>True\<rbrace> \<acute>S:==0;;\<acute>I:==1;; WHILE\<acute>I\<noteq>n INV\<lbrace>\<acute>S=(SUMMj<\<acute>I.j)\<rbrace> DO \<acute>S:==\<acute>S+\<acute>I;; \<acute>I:==\<acute>I+1 OD \<lbrace>\<acute>S=(SUMMj<n.j)\<rbrace>" proof- let?sum="\<lambda>k.SUMMj<k.j" let?inv="\<lambda>si.s=?sumi"
show?thesis proofvcg show"?inv01"bysimp next fixisassume"?invsi""i\<noteq>n" thus"?inv(s+i)(i+1)"bysimp next fixisassumex:"?invsi""\<not>i\<noteq>n" thus"s=?sumn"bysimp qed qed
procedures Fac(N|R)="IF\<acute>N=0THEN\<acute>R:==1 ELSE\<acute>Rjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 \<acute>:=\acuteN*\<>R FI"
lemma(inFac_impl)Fac_spec: text\<>OddandevenaredefinedmutuallyrecursivehereInthe (is"\<forall>n.\<Gamma>\<turnstile>(?Pren)?Fac(?Postn)") proof(hoare_ruleHoarePartial.ProcRec1) define\<Theta>'where"\<Theta>'=(\<Union>n.{(?Pren,Fac_'proc,?Postn,{}::('a,'b)vars_schemeset)})" haveFac_spec:"\<forall>n.\<Gamma>,\<Theta>'\<turnstile>(?Pren)?Fac(?Postn)" by(unfold\<Theta>'_def,ruleallI,rulehoarep.Asm)auto txt\<open>Wehavetonamethefact\<open>Fac_spec\<close>,sothatthevcgcan usethespecificationfortherecursivecall,sinceitcannotinferjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fromopaque@{\Theta'}\<close show"\<forall>\<sigma>.\<Gamma>,\<Theta>'\<turnstile>(?Pre\<sigma>)IF\<acute>N=0THEN\<acute>R:==1 ELSE\<acute>R:==CALLFac(\print_theorems applyvcg applysimp done qed
text\<open>Updatestoglobalcomponentsinsideaprocedurewill alwaysbepropagatedtothecaller.Thisisimplicitlydonebythe parameterpassing"forall\sigma>\<><turnstile>{\sigma>\acutep==PROCappend(\<cutep\<acuteq{.tmay_only_modify_globals\sigmanext}java.lang.StringIndexOutOfBoundsException: Index 151 out of bounds for length 151 \<close>
(* append_spec: "\<forall>\<sigma>PsQs. \<Gamma>\<turnstile>\<lbrace>\<sigma>.List\<acute>p\<acute>nextPssidenoteonthesyntax.Weuseordinarybracketsinthepostcondition \<acute>p:==PROCappend(\<acute>p,\<acute>q) \<lbrace>List\<acute>p\<acute>next(Ps@Qs)\<and>(\<forall>x.x\<notin>setPs\<longrightarrow>\<acute>nextx=\<^bsup>\<sigmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
contextappend_impl \close> declare[[hoare_use_call_tr'=false]] term"CALLappend(\<acute>p,\<acute>q,\<acute>p\<rightarrow>\<acute>next)" declare[[hoare_use_call_tr'=true]]
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 text\<open>Belowwegivetwospecificationsthistime. Onecapturesthefunctionalbehaviourandfocusesonthe entitiesthatarepotentiallymodifiedbytheprocedure,theotherone isapureframecondition. Thelistinthemodifiesclausehastolistallglobalstatecomponentsthat maybechangedbytheprocedure.Notethatweknowfromthemodifiesclause thatthe@{termcont}partsofthelistswillnotbechanged.Alsoasmall sideapplyjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 ofthemodifiesclause,andalsothestatecomponentsdonotcarrythe acute,becauseweexplicitlynotethestate@{termt}here.
lemma(inappend_impl)append_spec: shows"\<forall>\<sigma>PsQs.\<Gamma>\<turnstile> \<lbrace>\<sigma>.List\<acute>p\<acute>nextPs\<and>List\<acute>q\<acute>nextQs\<and>setPs\<inter>setQs={}\<rbrace> \<acute>p:==PROCappend(\<acute>p,\<acute>q) \<lbrace>List\<acute>p\<acute>next(Psjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 apply(hoare_ruleHoarePartial.ProcRec1) applyvcg applyfastforce done
text\<open>Iftheverificationconditiongeneratorworksonaprocedurecall itcheckswhetheritcanfindamodifiedclauseinthecontext.Ifone ispresentbeforetheHoarerule @{thm[source]HoarePartial.ProcSpec}isapplied.Simplificationoftheprocedurecallmeansapply(cgspecjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
java.lang.StringIndexOutOfBoundsException: Index 175 out of bounds for length 73 componentsthatoccurinthemodifiesclausewillactuallybecopiedback. Thissimplificationisjustifiedbytherule@{thm[source]HoarePartial.ProcModifyReturn}. Soafterthissimplificationallglobalcomponentsthatdonotappearin themodifiesclausewillbetreatedaslocalvariables. \<close>
text\<open>Toverifythebodyof@{term"append"}wedonotneedthemodifies clause,sincethespecificationdoesnottalkabout@{term"cont"}atall,and wedon'taccess@{term"cont"}insidethebody.Thismaybejava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 morecomplexprocedures. \<close>
primrecsorted::"('a\<Rightarrow>'a\<Rightarrow>bool)\<Rightarrow>'alist\<Rightarrow>bool" where "sortedle[]=True"| "sortedle(x#xs)=((\<forall>y\<in>setxs.lexy)\<and>sortedlexs)"
procedures insert(r,p|p)= "IF\<acute>r=NullTHENSKIP ELSEIF\<acute>p=NullTHEN\<acute>p:==\<acute>r;;\<acute>p\<rightarrow>\<acute>next:==Null ELSEIF\<acute>r\<rightarrow>\<acute>cont\<le>\<acute>p\<rightarrow>\<acute>cont THEN\<acute>r\<rightarrow>\<acute>next:==\<acute>p;;\<acute>p:==\<acute>r ELSE\<acute>p\<rightarrow>\<acute>next:==CALLinsert(\<acute>r,\<acute>p\<rightarrow>\<acute>next) FI FI FI"
lemma(ininsertSort_impl)insertSort_modifies: shows "\<forall>\<sigma>.\<Gamma>\<turnstile>{\<sigma>}apply(rule_tacx=psexIjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 {t.tmay_only_modify_globals\<sigma>in[next]}" apply(hoare_ruleHoarePartial.ProcRec1) apply(vcgspec=modifies) done
lemma(inhoare_ex) "\<Gamma>\<turnstile>\<lbrace>\<acute>i=0\<and>\<acute>first=Null\<and>n*sz\<le>\<acute>free\<rbrace> WHILE\<acute>i<n INV\<lbrace>\apply(vcg) setPs\<subseteq>set\<acute>alloc\<and>(n-\<acute>i)*sz\<le>\<acute>free\<rbrace> DO \<acute>p:==NNEWsz[\<acute>cont:==0,\<acute>next:==Null];; \<acute>p\<rightarrow>\<acute>next:==\<acute>first;; \java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 \<acute>i:==\<acute>i+1 OD \<lbrace>\<exists>Ps.List\<acute>first\<acute>nextPs\<and>lengthPs=n\<and>setPs\<subseteq>set\<acute>alloc\<rbrace>"
apply(vcg) applysimp applyclarsimp apply(ruleconjI) applyclarsimp apply(rule_tacx="new(setalloc)#Ps"inexI) applyclarsimp apply(ruleconjI) applyfastforce apply(simpadd:sz_def) apply(simpadd:sz_def) applyvcgjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 done
lemmacircular_list_rev_I: <Gamma><turnstile>\lbrace>\<acute>root=r\\<anddistPath\<acute>root\<acute>next\<acute>root(r#Ps)\<rbrace> \<acute>p:==\<acute>root;;\<acute>q:==\<acute>root\<rightarrow>\<acute>next;; WHILE\<acute>q\<noteq>\<acute>root INV\<lbrace>\<exists>psqs.distPath\<acute>p\<acute>next\<acute>rootps\<and>distPath\<acute>q\<acute>next\<acute>rootqs\<and> \<acute>root=r\<and>r\<noteq>Null\<and>r\<notin>setPs\<and>setps\<inter>setqs={}\<and> Ps=(revps)@qs\<rbrace> DO\<acute>tmp:==\<acute>q;;\<acute>q:==\<acute>q\<rightarrow>\<acute>next;;\<acute>tmp\<rightarrow>\<acute>next:==\<acute>p;;\<acute>p:==\<acute>tmpOD;; \<acute>root\<rightarrow>\<acute>next:==\<acute>p \<lbrace>\<acute>root=r\<and>distPath\<acute>root\<acute>next\<acute>root(r#revPs)\<rbrace>" apply(simponly:distPath_def) applyvcg apply(rule_tacx="[]"inexI) applyfastforce applyclarsimp apply(drule(2)neq_dP) apply(rule_tacx="q#ps"inexI) applyclarsimp apply<>\>=\<bsup\sigma><esup>N\and>\<cuteN=\java.lang.StringIndexOutOfBoundsException: Index 113 out of bounds for length 113 done
lemmapath_is_list:"\<And>anextb.\<lbrakk>Pathbnext \<Longrightarrow>Listb(next(a:=Null))(Ps@[a])" apply(inductPs) apply(autosimpadd:fun_upd_apply)
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
text\<open>Althoughtheabovealgorithmismoresuccinct,itsinvariant .Thereasonforthedistinctionon@termqjava.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69 isduetothefactthatduringexecution,thepointervariablescan pointtoeithercyclicoracyclicstructures. \<close>
lemma"\<Gamma>\<turnstile>{\<sigma>} \<acute>I:==\<acute>M;; ANNO\<tau>.\<lbrace>\<tau>.\<acute>I=\<^bsup>\<sigma>\<^esup>M\<rbrace> \<acute>M:==\<acute>N;;\<acute>N:==\<acute>I \<lbrace>\<acute>M=\<^bsup>\<tau>\<^esup>N\<and>\<acute>N=\<^bsup>\<tau>\<^esup>I\<rbracelemma"\<Gamma>\<turnstile>\lbrace\<acute>n\<>m\<rbrace \<lbrace>\<acute>M=\<^bsup>\<sigma>\<^esup>N\<and>\<acute>N=\<^bsup>\<sigma>\<^esup<acute>N:=\acute>N1;\acuteM=<>java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 applyvcg applyauto done
lemma"\<Gamma>\<turnstile>\<lbrace>\<acute>N=n\<and>\<acute>M=m\<rbrace> LEMMAfoo_lemma \<acute>Nlemma"\Gamma>\<turnstile>\^bsub>/{}<esub\lbraceTrue<>WHILE\sub><>N<\<acute>!java.lang.StringIndexOutOfBoundsException: Index 114 out of bounds for length 114 END;; LEMMAfoo_lemma \<acute>N:==\<acute>N+arbitrary END \<brace><acute>N=n+2\<>\acute>=\<brace> applyvcg applysimp done
lemma"\<Gamma>\<turnstile>\<lbrace>\<acute>N=n\<and>\<acute>M=m\<rbrace> \<acute>N:==\<acute>N+1;;\<acute>M:==\<acute>M+1;; <acute>N==\acute>+1;\acute>M:==\<acute>M+1 \<lbrace>\<acute>N=n+2\<and>\<acute>M=m+2\<rbrace>" apply(hoare_ruleanno= "LEMMAfoo_lemma \<acute>N:==\<acute>N+1;;\<acute>M:==\<acute>M+1 END;; LEMMAfoo_lemma \<acute>N:==\<acute>N+1;;\<acute>M:==\<acute>M+1 END" inHoarePartial.annotate_normI) applyvcg applyjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 done
text\<open>Justsometestonmarked,guards\<close> lemma"\<Gamma>\<turnstile>\<lbrace>True\<rbrace>WHILE\<lbrace>P\<acute>N\<rbrace>\<surd>,\<lbrace>Q\<acute>M\<rbrace>#,\<lbrace>R\<acute>N\<rbrace>\<longmapsto>\<acute>N<\<acute>M INV\<lbrace>\<acute>N<2\<rbrace>DO \<acute>N:==\<acute>M OD \<lbrace>hard\<rbrace>" applyvcg oops
lemma"\<Gamma>\<turnstile>\<^bsub>/{True}\<^esub>\<lbrace>True\<rbrace>WHILE\<lbrace>P\<acute>N\<rbrace>\<surd>,\<lbrace>Q\<acute>M\<rbrace>#,\<lbrace>R\<acute>N\<rbrace>\<longmapsto>\<acute>N<\<acute>M INV\<lbrace>\<acute>N<2\<rbrace>DO \<acute>N:==\<acute>M OD \<lbrace>hard\<rbrace>" applyvcg oops
DO \<acute>N:==\<acute>M OD \<lbrace>hard\<rbrace>"
lemma"\<Gamma>\<turnstile>\<^bsub>/{True}\<^esub>\<lbrace>True\<rbrace>WHILE\<^sub>g\<acute>N<\<acute>Arr!i FIXZ. INV\<lbrace>\<acute>N<2\<rbrace> VARarbitrary DO \<acute>N:==\<acute>M OD \<lbrace>hard\<rbrace>" applyvcg oops
lemma"\<Gamma>\<turnstile>\<^bsub>/{True}\<^esub>\<lbrace>True\<rbrace>WHILE\<lbrace>P\<acute>N\<rbrace>\<surd>,\<lbrace>Q\<acute>M\<rbrace>#,\<lbrace>R\<acute>N\<rbrace>\<longmapsto>\<acute>N<\<acute>M FIXZ. INV\<lbrace>\<acute>N<2\<rbrace> VARarbitrary DO \<acute>N:==\<acute>M OD \<lbrace>hard\<rbrace>" applyvcg oops
end
Messung V0.5 in Prozent
Β€ Dauer der Verarbeitung: 0.106 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.