header {* \isaheader{Safety Policy against arithmetic overflow} *} theory JBC_SafetyPolicy = JBC_Semantics: constdefs MAX :: int "MAX \ 2147483647" MX :: val "MX \ Intg MAX" constdefs safeF::"jbc_prog \ pos \ expr" "safeF \ p \ (case (cmd \ p) of None \ FF | Some c \ case c of Load nat \ TT | Store nat \ TT | Push val \ TT | New cname \ TT | Getfield vname cname \ TT | Putfield vname cname \ TT | Checkcast cname \ TT | Invoke mname nat \ TT | Return \ TT | Pop \ TT | (IBin no) \ Rel (Num (St 1) no (St 0)) Leq (Cn MX) | Goto int \ TT | CmpEq \ TT | IfIntCmp ro b \ TT | IfFalse int \ TT | Throw \ TT)" constdefs sys_xcptns :: "cname list" "sys_xcptns \ [NullPointer, ClassCast, OutOfMemory]" constdefs initF::"jbc_prog \ expr" "initF \ == And ([Pos (ipc \),Eq (Rg 0) (Cn Null),Eq FrNr (Cn (Intg 1))]@ (map (\C. Ty (Cn (Addr (addr_of_sys_xcpt C))) (Class C)) sys_xcptns)@ (let (C,M,pc)=ipc \; (D,Ts,T,mxs,mxl,bd) = method (fst \) C M in map (\n. not_none (Rg n)) (upt 1 (Suc mxl))))" (* "initF \ \ And ([Pos (ipc \),Eq (Rg 0) (Cn Null),Eq FrNr (Cn (Intg 1))]@ (map (\C. Ty (Cn (Addr (addr_of_sys_xcpt C))) (Class C)) sys_xcptns))" *) end