equal
deleted
inserted
replaced
58 section "subclass and subinterface relations" |
58 section "subclass and subinterface relations" |
59 |
59 |
60 (* direct subinterface in Decl.thy, cf. 9.1.3 *) |
60 (* direct subinterface in Decl.thy, cf. 9.1.3 *) |
61 (* direct subclass in Decl.thy, cf. 8.1.3 *) |
61 (* direct subclass in Decl.thy, cf. 8.1.3 *) |
62 |
62 |
63 lemmas subcls_direct = subcls1I [THEN r_into_rtrancl, standard] |
63 lemmas subcls_direct = subcls1I [THEN r_into_rtrancl] |
64 |
64 |
65 lemma subcls_direct1: |
65 lemma subcls_direct1: |
66 "\<lbrakk>class G C = Some c; C \<noteq> Object;D=super c\<rbrakk> \<Longrightarrow> G\<turnstile>C\<preceq>\<^sub>C D" |
66 "\<lbrakk>class G C = Some c; C \<noteq> Object;D=super c\<rbrakk> \<Longrightarrow> G\<turnstile>C\<preceq>\<^sub>C D" |
67 apply (auto dest: subcls_direct) |
67 apply (auto dest: subcls_direct) |
68 done |
68 done |
552 apply (erule widen.induct) |
552 apply (erule widen.induct) |
553 apply (auto dest: widen_Iface widen_NT2 widen_Class) |
553 apply (auto dest: widen_Iface widen_NT2 widen_Class) |
554 done |
554 done |
555 |
555 |
556 lemmas subint_antisym = |
556 lemmas subint_antisym = |
557 subint1_acyclic [THEN acyclic_impl_antisym_rtrancl, standard] |
557 subint1_acyclic [THEN acyclic_impl_antisym_rtrancl] |
558 lemmas subcls_antisym = |
558 lemmas subcls_antisym = |
559 subcls1_acyclic [THEN acyclic_impl_antisym_rtrancl, standard] |
559 subcls1_acyclic [THEN acyclic_impl_antisym_rtrancl] |
560 |
560 |
561 lemma widen_antisym: "\<lbrakk>G\<turnstile>S\<preceq>T; G\<turnstile>T\<preceq>S; ws_prog G\<rbrakk> \<Longrightarrow> S=T" |
561 lemma widen_antisym: "\<lbrakk>G\<turnstile>S\<preceq>T; G\<turnstile>T\<preceq>S; ws_prog G\<rbrakk> \<Longrightarrow> S=T" |
562 by (fast elim: widen_antisym_lemma subint_antisym [THEN antisymD] |
562 by (fast elim: widen_antisym_lemma subint_antisym [THEN antisymD] |
563 subcls_antisym [THEN antisymD]) |
563 subcls_antisym [THEN antisymD]) |
564 |
564 |