inductive
eval1 :: "J1_prog → expr1→ state1→ expr1→ state1→ bool"
(‹_ ⊨1 ((1⟨_,/_⟩) →/ (1⟨_,/_⟩))› [51,0,0,0,0] 81) and evals1 :: "J1_prog → expr1 list → state1→ expr1 list → state1→ bool"
(‹_ ⊨1 ((1⟨_,/_⟩) [→]/ (1⟨_,/_⟩))› [51,0,0,0,0] 81) for P :: J1_prog where
New1: "[ new_Addr h = Some a; P ⊨ C has_fields FDTs; h' = h(a↦(C,init_fields FDTs)) ] ==> P ⊨1⟨new C,(h,l)⟩→⟨addr a,(h',l)⟩"
| NewFail1: "new_Addr h = None ==> P ⊨1⟨new C, (h,l)⟩→⟨THROW OutOfMemory,(h,l)⟩"
| Cast1: "[ P ⊨1⟨e,s0⟩→⟨addr a,(h,l)⟩; h a = Some(D,fs); P ⊨ D ⪯* C ] ==> P ⊨1⟨Cast C e,s0⟩→⟨addr a,(h,l)⟩"
| CastNull1: "P ⊨1⟨e,s0⟩→⟨null,s1⟩==> P ⊨1⟨Cast C e,s0⟩→⟨null,s1⟩"
| CastFail1: "[ P ⊨1⟨e,s0⟩→⟨addr a,(h,l)⟩; h a = Some(D,fs); ¬ P ⊨ D ⪯* C ] ==> P ⊨1⟨Cast C e,s0⟩→⟨THROW ClassCast,(h,l)⟩"
| CastThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨Cast C e,s0⟩→⟨throw e',s1⟩"
| Val1: "P ⊨1⟨Val v,s⟩→⟨Val v,s⟩"
| BinOp1: "[ P ⊨1⟨e1,s0⟩→⟨Val v1,s1⟩; P ⊨1⟨e2,s1⟩→⟨Val v2,s2⟩; binop(bop,v1,v2) = Some v ] ==> P ⊨1⟨e1«bop¬ e2,s0⟩→⟨Val v,s2⟩"
| BinOpThrow11: "P ⊨1⟨e1,s0⟩→⟨throw e,s1⟩==> P ⊨1⟨e1«bop¬ e2, s0⟩→⟨throw e,s1⟩"
| BinOpThrow21: "[ P ⊨1⟨e1,s0⟩→⟨Val v1,s1⟩; P ⊨1⟨e2,s1⟩→⟨throw e,s2⟩] ==> P ⊨1⟨e1«bop¬ e2,s0⟩→⟨throw e,s2⟩"
| Var1: "[ ls!i = v; i < size ls ]==> P ⊨1⟨Var i,(h,ls)⟩→⟨Val v,(h,ls)⟩"
| LAss1: "[ P ⊨1⟨e,s0⟩→⟨Val v,(h,ls)⟩; i < size ls; ls' = ls[i := v] ] ==> P ⊨1⟨i:= e,s0⟩→⟨unit,(h,ls')⟩"
| LAssThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨i:= e,s0⟩→⟨throw e',s1⟩"
| FAcc1: "[ P ⊨1⟨e,s0⟩→⟨addr a,(h,ls)⟩; h a = Some(C,fs); fs(F,D) = Some v ] ==> P ⊨1⟨e∙F{D},s0⟩→⟨Val v,(h,ls)⟩"
| FAccNull1: "P ⊨1⟨e,s0⟩→⟨null,s1⟩==> P ⊨1⟨e∙F{D},s0⟩→⟨THROW NullPointer,s1⟩"
| FAccThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨e∙F{D},s0⟩→⟨throw e',s1⟩"
| FAss1: "[ P ⊨1⟨e1,s0⟩→⟨addr a,s1⟩; P ⊨1⟨e2,s1⟩→⟨Val v,(h2,l2)⟩; h2 a = Some(C,fs); fs' = fs((F,D)↦v); h2' = h2(a↦(C,fs')) ] ==> P ⊨1⟨e1∙F{D}:= e2,s0⟩→⟨unit,(h2',l2)⟩"
| FAssNull1: "[ P ⊨1⟨e1,s0⟩→⟨null,s1⟩; P ⊨1⟨e2,s1⟩→⟨Val v,s2⟩] ==> P ⊨1⟨e1∙F{D}:= e2,s0⟩→⟨THROW NullPointer,s2⟩"
| FAssThrow11: "P ⊨1⟨e1,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨e1∙F{D}:= e2,s0⟩→⟨throw e',s1⟩"
| FAssThrow21: "[ P ⊨1⟨e1,s0⟩→⟨Val v,s1⟩; P ⊨1⟨e2,s1⟩→⟨throw e',s2⟩] ==> P ⊨1⟨e1∙F{D}:= e2,s0⟩→⟨throw e',s2⟩"
| CallObjThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨e∙M(es),s0⟩→⟨throw e',s1⟩"
| CallNull1: "[ P ⊨1⟨e,s0⟩→⟨null,s1⟩; P ⊨1⟨es,s1⟩ [→] ⟨map Val vs,s2⟩] ==> P ⊨1⟨e∙M(es),s0⟩→⟨THROW NullPointer,s2⟩"
| Call1: "[ P ⊨1⟨e,s0⟩→⟨addr a,s1⟩; P ⊨1⟨es,s1⟩ [→] ⟨map Val vs,(h2,ls2)⟩; h2 a = Some(C,fs); P ⊨ C sees M:Ts→T = body in D; size vs = size Ts; ls2' = (Addr a) # vs @ replicate (max_vars body) undefined; P ⊨1⟨body,(h2,ls2')⟩→⟨e',(h3,ls3)⟩] ==> P ⊨1⟨e∙M(es),s0⟩→⟨e',(h3,ls2)⟩"
| CallParamsThrow1: "[ P ⊨1⟨e,s0⟩→⟨Val v,s1⟩; P ⊨1⟨es,s1⟩ [→] ⟨es',s2⟩; es' = map Val vs @ throw ex # es2] ==> P ⊨1⟨e∙M(es),s0⟩→⟨throw ex,s2⟩"
| Block1: "P ⊨1⟨e,s0⟩→⟨e',s1⟩==> P ⊨1⟨Block i T e,s0⟩→⟨e',s1⟩"
| Seq1: "[ P ⊨1⟨e0,s0⟩→⟨Val v,s1⟩; P ⊨1⟨e1,s1⟩→⟨e2,s2⟩] ==> P ⊨1⟨e0;;e1,s0⟩→⟨e2,s2⟩"
| SeqThrow1: "P ⊨1⟨e0,s0⟩→⟨throw e,s1⟩==> P ⊨1⟨e0;;e1,s0⟩→⟨throw e,s1⟩"
| CondT1: "[ P ⊨1⟨e,s0⟩→⟨true,s1⟩; P ⊨1⟨e1,s1⟩→⟨e',s2⟩] ==> P ⊨1⟨if (e) e1 else e2,s0⟩→⟨e',s2⟩"
| CondF1: "[ P ⊨1⟨e,s0⟩→⟨false,s1⟩; P ⊨1⟨e2,s1⟩→⟨e',s2⟩] ==> P ⊨1⟨if (e) e1 else e2,s0⟩→⟨e',s2⟩"
| CondThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨if (e) e1 else e2, s0⟩→⟨throw e',s1⟩"
| WhileF1: "P ⊨1⟨e,s0⟩→⟨false,s1⟩==> P ⊨1⟨while (e) c,s0⟩→⟨unit,s1⟩"
| WhileT1: "[ P ⊨1⟨e,s0⟩→⟨true,s1⟩; P ⊨1⟨c,s1⟩→⟨Val v1,s2⟩; P ⊨1⟨while (e) c,s2⟩→⟨e3,s3⟩] ==> P ⊨1⟨while (e) c,s0⟩→⟨e3,s3⟩"
| WhileCondThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨while (e) c,s0⟩→⟨throw e',s1⟩"
| WhileBodyThrow1: "[ P ⊨1⟨e,s0⟩→⟨true,s1⟩; P ⊨1⟨c,s1⟩→⟨throw e',s2⟩] ==> P ⊨1⟨while (e) c,s0⟩→⟨throw e',s2⟩"
| Throw1: "P ⊨1⟨e,s0⟩→⟨addr a,s1⟩==> P ⊨1⟨throw e,s0⟩→⟨Throw a,s1⟩"
| ThrowNull1: "P ⊨1⟨e,s0⟩→⟨null,s1⟩==> P ⊨1⟨throw e,s0⟩→⟨THROW NullPointer,s1⟩"
| ThrowThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨throw e,s0⟩→⟨throw e',s1⟩"
| Try1: "P ⊨1⟨e1,s0⟩→⟨Val v1,s1⟩==> P ⊨1⟨try e1 catch(C i) e2,s0⟩→⟨Val v1,s1⟩"
| TryCatch1: "[ P ⊨1⟨e1,s0⟩→⟨Throw a,(h1,ls1)⟩; h1 a = Some(D,fs); P ⊨ D ⪯* C; i < length ls1; P ⊨1⟨e2,(h1,ls1[i:=Addr a])⟩→⟨e2',(h2,ls2)⟩] ==> P ⊨1⟨try e1 catch(C i) e2,s0⟩→⟨e2',(h2,ls2)⟩"
| TryThrow1: "[ P ⊨1⟨e1,s0⟩→⟨Throw a,(h1,ls1)⟩; h1 a = Some(D,fs); ¬ P ⊨ D ⪯* C ] ==> P ⊨1⟨try e1 catch(C i) e2,s0⟩→⟨Throw a,(h1,ls1)⟩"
| Nil1: "P ⊨1⟨[],s⟩ [→] ⟨[],s⟩"
| Cons1: "[ P ⊨1⟨e,s0⟩→⟨Val v,s1⟩; P ⊨1⟨es,s1⟩ [→] ⟨es',s2⟩] ==> P ⊨1⟨e#es,s0⟩ [→] ⟨Val v # es',s2⟩"
| ConsThrow1: "P ⊨1⟨e,s0⟩→⟨throw e',s1⟩==> P ⊨1⟨e#es,s0⟩ [→] ⟨throw e' # es, s1⟩"
lemma evals1_preserves_elen: "∧es' s s'. P ⊨1⟨es,s⟩ [→] ⟨es',s'⟩==> length es = length es'" (*<*)by(induct es type:list) (auto elim:evals\<^sub>1.cases)(*>*)
lemma eval1_final: "P ⊨1⟨e,s⟩→⟨e',s'⟩==> final e'" and evals1_final: "P ⊨1⟨es,s⟩ [→] ⟨es',s'⟩==> finals es'" (*<*)by(induct rule:eval\<^sub>1_evals\<^sub>1.inducts, simp_all)(*>*)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-07-15)
¤
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.