src/HOL/NanoJava/AxSem.thy
changeset 11508 168dbdaedb71
parent 11507 4b32a46ffd29
child 11558 6539627881e8
equal deleted inserted replaced
11507:4b32a46ffd29 11508:168dbdaedb71
    86                   Impl (D,m) {Q} ==>
    86                   Impl (D,m) {Q} ==>
    87              A |- {P} Meth (C,m) {Q}"
    87              A |- {P} Meth (C,m) {Q}"
    88 
    88 
    89   (*\<Union>z instead of \<forall>z in the conclusion and
    89   (*\<Union>z instead of \<forall>z in the conclusion and
    90       z restricted to type state due to limitations of the inductive package *)
    90       z restricted to type state due to limitations of the inductive package *)
    91   Impl: "\<forall>z::state. A\<union> (\<Union>z. (\<lambda>M. (P z M, Impl M, Q z M))`Ms) ||- 
    91   Impl: "\<forall>z::state. A\<union> (\<Union>z. (\<lambda>Cm. (P z Cm, Impl Cm, Q z Cm))`Ms) ||- 
    92                             (\<lambda>M. (P z M, body M, Q z M))`Ms ==>
    92                             (\<lambda>Cm. (P z Cm, body Cm, Q z Cm))`Ms ==>
    93                       A ||- (\<lambda>M. (P z M, Impl M, Q z M))`Ms"
    93                       A ||- (\<lambda>Cm. (P z Cm, Impl Cm, Q z Cm))`Ms"
    94 
    94 
    95 (* structural rules *)
    95 (* structural rules *)
    96 
    96 
    97   Asm:  "   a \<in> A ==> A ||- {a}"
    97   Asm:  "   a \<in> A ==> A ||- {a}"
    98 
    98 
   146 
   146 
   147 lemma Union: "A |\<turnstile> (\<Union>z. C z) = (\<forall>z. A |\<turnstile> C z)"
   147 lemma Union: "A |\<turnstile> (\<Union>z. C z) = (\<forall>z. A |\<turnstile> C z)"
   148 by (auto intro: hoare_ehoare.ConjI hoare_ehoare.ConjE)
   148 by (auto intro: hoare_ehoare.ConjI hoare_ehoare.ConjE)
   149 
   149 
   150 lemma Impl1: 
   150 lemma Impl1: 
   151    "\<lbrakk>\<forall>z::state. A\<union> (\<Union>z. (\<lambda>M. (P z M, Impl M, Q z M))`Ms) |\<turnstile> 
   151    "\<lbrakk>\<forall>z::state. A\<union> (\<Union>z. (\<lambda>Cm. (P z Cm, Impl Cm, Q z Cm))`Ms) |\<turnstile> 
   152                         (\<lambda>M. (P z M, body M, Q z M))`Ms; 
   152                         (\<lambda>Cm. (P z Cm, body Cm, Q z Cm))`Ms; 
   153     M \<in> Ms\<rbrakk> \<Longrightarrow> 
   153     Cm \<in> Ms\<rbrakk> \<Longrightarrow> 
   154                 A         \<turnstile>  {P z M} Impl M {Q z M}"
   154                 A         \<turnstile>  {P z Cm} Impl Cm {Q z Cm}"
   155 apply (drule hoare_ehoare.Impl)
   155 apply (drule hoare_ehoare.Impl)
   156 apply (erule Weaken)
   156 apply (erule Weaken)
   157 apply (auto del: image_eqI intro: rev_image_eqI)
   157 apply (auto del: image_eqI intro: rev_image_eqI)
   158 done
   158 done
   159 
   159