section‹ The Bytecode Verifier \label{sec:BVSpec} ›
theory BVSpec imports Effect begin
text‹
This theory contains a specification of the BV. The specification
describes correct typings of method bodies; it corresponds
to type \emph{checking}. ›
definition
― ‹The method type only contains declared classes:›
check_types :: "'m prog ==> nat ==> nat ==> tyi' err list ==> bool" where "check_types P mxs mxl τs ≡ set τs ⊆ states P mxs mxl"
― ‹An instruction is welltyped if it is applicable and its effect›
― ‹is compatible with the type at all successor instructions:› definition
wt_instr :: "['m prog,ty,nat,pc,ex_table,instr,pc,tym] ==> bool"
(‹_,_,_,_,_ ⊨ _,_ :: _› [60,0,0,0,0,0,0,61] 60) where "P,T,mxs,mpc,xt ⊨ i,pc :: τs ≡ app i P mxs T pc mpc xt (τs!pc) ∧ (∀(pc',τ') ∈ set (eff i P pc xt (τs!pc)). P ⊨ τ' ≤' τs!pc')"
― ‹The type at @{text "pc=0"} conforms to the method calling convention:› definition wt_start :: "['m prog,cname,staticb,ty list,nat,tym] ==> bool" where "wt_start P C b Ts mxl0 τs ≡ case b of NonStatic ==> P ⊨ Some ([],OK (Class C)#map OK Ts@replicate mxl0 Err) ≤' τs!0 | Static ==> P ⊨ Some ([],map OK Ts@replicate mxl0 Err) ≤' τs!0"
― ‹A method is welltyped if the body is not empty,›
― ‹if the method type covers all instructions and mentions›
― ‹declared classes only, if the method calling convention is respected, and›
― ‹if all instructions are welltyped.› definition wt_method :: "['m prog,cname,staticb,ty list,ty,nat,nat,instr list, ex_table,tym] ==> bool" where "wt_method P C b Ts Tr mxs mxl0 is xt τs ≡ (b = Static ∨ b = NonStatic) ∧ 0 < size is ∧ size τs = size is ∧ check_types P mxs ((case b of Static ==> 0 | NonStatic ==> 1)+size Ts+mxl0) (map OK τs) ∧ wt_start P C b Ts mxl0 τs ∧ (∀pc < size is. P,Tr,mxs,size is,xt ⊨ is!pc,pc :: τs)"
― ‹A program is welltyped if it is wellformed and all methods are welltyped› definition wf_jvm_prog_phi :: "tyP==> jvm_prog ==> bool" (‹wf'_jvm'_prog›) where "wf_jvm_prog<Phi>≡ wf_prog (λP C (M,b,Ts,Tr,(mxs,mxl0,is,xt)). wt_method P C b Ts Tr mxs mxl0 is xt (Φ C M))"
definition wf_jvm_prog :: "jvm_prog ==> bool" where "wf_jvm_prog P ≡∃Φ. wf_jvm_prog<Phi> P"
lemma wt_jvm_progD: "wf_jvm_prog<Phi> P ==>∃wt. wf_prog wt P" (*<*) by (unfold wf_jvm_prog_phi_def, blast) (*>*)
lemma wt_jvm_prog_impl_wt_instr: assumes wf: "wf_jvm_prog<Phi> P"and
sees: "P ⊨ C sees M,b:Ts → T = (mxs,mxl0,ins,xt) in C"and
pc: "pc < size ins" shows"P,T,mxs,size ins,xt ⊨ ins!pc,pc :: Φ C M" (*<*) proof - have wfm: "wf_prog (λP C (M, b, Ts, Tr, mxs, mxl0, is, xt). wt_method P C b Ts Tr mxs mxl0 is xt (Φ C M)) P"using wf by (unfold wf_jvm_prog_phi_def) show ?thesis using sees_wf_mdecl[OF wfm sees] pc by (simp add: wf_mdecl_def wt_method_def) qed (*>*)
lemma wt_jvm_prog_impl_wt_start: assumes wf: "wf_jvm_prog<Phi> P"and
sees: "P ⊨ C sees M,b:Ts → T = (mxs,mxl0,ins,xt) in C" shows"0 < size ins ∧ wt_start P C b Ts mxl0 (Φ C M)" (*<*) proof - have wfm: "wf_prog (λP C (M, b, Ts, Tr, mxs, mxl0, is, xt). wt_method P C b Ts Tr mxs mxl0 is xt (Φ C M)) P"using wf by (unfold wf_jvm_prog_phi_def) show ?thesis using sees_wf_mdecl[OF wfm sees] by (simp add: wf_mdecl_def wt_method_def) qed (*>*)
lemma wf_jvm_prog_nclinit: assumes wtp: "wf_jvm_prog<Phi> P" and meth: "P ⊨ C sees M, b : Ts→T = (mxs, mxl0, ins, xt) in D" and wt: "P,T,mxs,size ins,xt ⊨ ins!pc,pc :: Φ C M" and pc: "pc < length ins"and Φ: "Φ C M ! pc = Some(ST,LT)" and ins: "ins ! pc = Invokestatic C0 M0 n" shows"M0≠ clinit" using assms by(simp add: wf_jvm_prog_phi_def wt_instr_def app_def)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 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.