WellForm.thy
Back to the index of JVM0_ASCII
WellForm = Classfile + Runtime +
constdefs
method_over_ok :: "['code classfiles,cname,cname] => bool"
"method_over_ok CFS cn cn' ==
!ml rd ins rd' ins'.
get_methods (CFS !! cn) ml = Some (rd ,ins ) &
get_methods (CFS !! cn') ml = Some (rd',ins')
--> rd=rd'"
method_impl_ok :: "['code classfiles,cname,cname] => bool"
"method_impl_ok CFS cn si ==
!ml rd ins.
get_methods (CFS !! si) ml = Some (rd,ins)
--> (? cn' ins'. (cn',cn) : (d_superclass_rel CFS)^* &
get_methods (CFS !! cn') ml = Some (rd,ins'))"
wf_inter :: "['code classfiles,cname] => bool"
"wf_inter CFS i ==
(get_superclass (CFS !! i) = Object) &
(!si : get_superinterfaces (CFS !! i).
is_inter CFS si &
(i,si) ~: (d_superinterface_rel CFS)^*)"
wf_class :: "['code classfiles,cname] => bool"
"wf_class CFS cn ==
if no_super (CFS !! cn)
then cn=Object &
get_superinterfaces (CFS !! cn)={}
else let sc = get_superclass (CFS !! cn)
in
is_class CFS sc &
(cn,sc) ~: (d_superclass_rel CFS)^* &
(!sc'. (sc',cn) : (d_superclass_rel CFS)^+ --> method_over_ok CFS cn sc') &
(!si : get_superinterfaces (CFS !! cn).
is_inter CFS si &
(!si'. (si',si) : (d_superinterface_rel CFS)^*
--> method_impl_ok CFS cn si'))"
wf_classfiles :: "'code classfiles => bool"
"wf_classfiles CFS ==
(finite {cn. CFS cn ~= None}) &
(is_class CFS Object & no_super (CFS !! Object)) &
(get_fields (CFS !! Object) = empty) &
(!cn. CFS cn ~= None
--> (get_thisclass (CFS !! cn) = cn) &
(is_inter CFS cn --> wf_inter CFS cn) &
(is_class CFS cn --> wf_class CFS cn))"
end
rtrancl_eq_or_trancl
((dc, oc) : r^*) = (oc = dc | (dc, oc) : r^+)
finite_d_superinterface_rel
wf_classfiles CFS ==> finite (d_superinterface_rel CFS)
finite_d_superclass_rel
wf_classfiles CFS ==> finite (d_superclass_rel CFS)
wf_cs1
[| wf_classfiles CFS; si : get_superinterfaces CFS !! i; is_inter CFS i |]
==> (i, si) ~: (d_superinterface_rel CFS)^*
d_superinterface_rel_irrefl
[| wf_classfiles CFS; (si, i) : (d_superinterface_rel CFS)^+ |] ==> i ~= si
acyclic_d_superinterface_rel
wf_classfiles CFS ==> acyclic (d_superinterface_rel CFS)
wf_d_superinterface_rel
wf_classfiles CFS ==> wf (d_superinterface_rel CFS)
in_d_superclass_rel_is_class
[| (cn, sc) : (d_superclass_rel CFS)^*; is_class CFS cn |] ==> is_class CFS sc
in_d_superclass_rel_is_class2
[| (cn, sc) : (d_superclass_rel CFS)^*; is_class CFS sc |] ==> is_class CFS cn
in_superclasses_not_Object
[| wf_classfiles CFS; (sc, cn) : (d_superclass_rel CFS)^+ |] ==> cn ~= Object
in_superclasses_not_Object2
[| wf_classfiles CFS; sc ~= Object; (sc, cn) : (d_superclass_rel CFS)^* |] ==> cn ~= Object
in_superclasses_not_Object3
[| wf_classfiles CFS; (sc, Object) : (d_superclass_rel CFS)^* |] ==> sc = Object
wf_cs0
wf_classfiles CFS ==> (sc, Object) ~: (d_superclass_rel CFS)^+
wf_cs3
[| wf_classfiles CFS; get_superclass CFS !! cn = sc; is_class CFS cn; cn ~= Object |]
==> (cn, sc) ~: (d_superclass_rel CFS)^*
wf_cs4
[| wf_classfiles CFS; cn ~= Object; get_superclass CFS !! cn = sc; is_class CFS cn |]
==> sc ~= cn & is_class CFS sc
d_superclass_rel_irrefl
[| wf_classfiles CFS; (sc, cn) : (d_superclass_rel CFS)^+ |] ==> cn ~= sc
acyclic_d_superclass_rel
wf_classfiles CFS ==> acyclic (d_superclass_rel CFS)
wf_d_superclass_rel
wf_classfiles CFS ==> wf (d_superclass_rel CFS)
wf_implements_term_rel
wf implements_term_rel
implements_rec
wf_classfiles CFS
==> implements (CFS, cn, si) =
(d_implements CFS cn si |
(? si'. d_implements CFS cn si' & (si, si') : (d_superinterface_rel CFS)^+) |
(? sc. (sc, cn) : d_superclass_rel CFS & implements (CFS, sc, si)))
wf_get_all_fields_term_rel
wf get_all_fields_term_rel
get_all_fields_rec
[| wf_classfiles CFS; is_class CFS cn |]
==> get_all_fields (CFS, cn) =
(let fs = get_fields CFS !! cn
in if cn = Object then fs else let sc = get_superclass CFS !! cn in get_all_fields (CFS, sc) ++ fs)
wf_cs6
wf_classfiles CFS
==> is_class CFS Object & get_superinterfaces CFS !! Object = {} & get_fields CFS !! Object = empty
not_implements_Object
wf_classfiles CFS ==> ~ implements (CFS, Object, i)
in_superinterface_rel_imp_is_inter
(si, i) : (d_superinterface_rel CFS)^+ ==> is_inter CFS si & is_inter CFS i
implements_impl_is_inter
[| wf_classfiles CFS; implements (CFS, cn, si) |] ==> is_class CFS cn & is_inter CFS si
not_in_superclass_rel_Object
wf_classfiles CFS ==> (sc, Object) ~: (d_superclass_rel CFS)^+
implements_superinterface_trans
[| wf_classfiles CFS; implements (CFS, cn, i); (si, i) : (d_superinterface_rel CFS)^+ |]
==> implements (CFS, cn, si)
implements_superinterface_trans2
[| wf_classfiles CFS; implements (CFS, cn, i); (si, i) : (d_superinterface_rel CFS)^* |]
==> implements (CFS, cn, si)
implements_superclass_rel_trans
[| wf_classfiles CFS; (sc, cn) : (d_superclass_rel CFS)^+; implements (CFS, sc, si) |]
==> implements (CFS, cn, si)
implements_superclass_rel_trans2
[| wf_classfiles CFS; (sc, cn) : (d_superclass_rel CFS)^*; implements (CFS, sc, si) |]
==> implements (CFS, cn, si)
in_superclass_rel_Object
[| wf_classfiles CFS; is_class CFS cn & cn ~= Object |] ==> (Object, cn) : (d_superclass_rel CFS)^+
in_superclass_rel_Object2
[| wf_classfiles CFS; is_class CFS cn |] ==> (Object, cn) : (d_superclass_rel CFS)^*
wf_dyn_class_term_rel
wf dyn_class_term_rel
dyn_class_rec
[| wf_classfiles CFS; is_class CFS cn |]
==> dyn_class (CFS, ml, cn) =
(let ms = get_methods CFS !! cn
in if ms ml ~= None then cn
else if cn = Object then arbitrary
else let sc = get_superclass CFS !! cn in dyn_class (CFS, ml, sc))
d_superclass_imp_class
(sc, cn) : d_superclass_rel CFS
==> is_class CFS cn & is_class CFS sc & cn ~= Object & get_superclass CFS !! cn = sc
in_superclass_rel_imp_is_class
(sc, cn) : (d_superclass_rel CFS)^+ ==> is_class CFS cn & is_class CFS sc
d_implements_imp_class_inter
d_implements CFS cn si ==> is_class CFS cn & is_inter CFS si