src/HOL/IMP/AbsInt0_fun.thy
changeset 44890 22f665a2e91c
parent 44656 22bbd0d1b943
child 44923 b80108b346a9
equal deleted inserted replaced
44889:340df9f3491f 44890:22f665a2e91c
    69 and "f p \<sqsubseteq> p" and "x0 \<sqsubseteq> p" shows "pfp_above f x0 \<sqsubseteq> p"
    69 and "f p \<sqsubseteq> p" and "x0 \<sqsubseteq> p" shows "pfp_above f x0 \<sqsubseteq> p"
    70 proof-
    70 proof-
    71   let ?F = "lift f x0"
    71   let ?F = "lift f x0"
    72   obtain k where "pfp_above f x0 = (?F^^k) x0"
    72   obtain k where "pfp_above f x0 = (?F^^k) x0"
    73     using pfp_funpow `pfp_above f x0 \<noteq> Top`
    73     using pfp_funpow `pfp_above f x0 \<noteq> Top`
    74     by(fastsimp simp add: pfp_above_def)
    74     by(fastforce simp add: pfp_above_def)
    75   moreover
    75   moreover
    76   { fix n have "(?F^^n) x0 \<sqsubseteq> p"
    76   { fix n have "(?F^^n) x0 \<sqsubseteq> p"
    77     proof(induct n)
    77     proof(induct n)
    78       case 0 show ?case by(simp add: `x0 \<sqsubseteq> p`)
    78       case 0 show ?case by(simp add: `x0 \<sqsubseteq> p`)
    79     next
    79     next
    95 shows "pfp_above f x0 \<sqsubseteq> x0 \<squnion> f(pfp_above f x0)"
    95 shows "pfp_above f x0 \<sqsubseteq> x0 \<squnion> f(pfp_above f x0)"
    96 proof-
    96 proof-
    97   let ?p = "pfp_above f x0"
    97   let ?p = "pfp_above f x0"
    98   obtain k where 1: "?p = ((f\<up>x0)^^k) x0"
    98   obtain k where 1: "?p = ((f\<up>x0)^^k) x0"
    99     using pfp_funpow `?p \<noteq> Top`
    99     using pfp_funpow `?p \<noteq> Top`
   100     by(fastsimp simp add: pfp_above_def)
   100     by(fastforce simp add: pfp_above_def)
   101   thus ?thesis using chain mono by simp
   101   thus ?thesis using chain mono by simp
   102 qed
   102 qed
   103 
   103 
   104 end
   104 end
   105 
   105 
   172 "AI (IF b THEN c1 ELSE c2) S = (AI c1 S) \<squnion> (AI c2 S)" |
   172 "AI (IF b THEN c1 ELSE c2) S = (AI c1 S) \<squnion> (AI c2 S)" |
   173 "AI (WHILE b DO c) S = pfp_above (AI c) S"
   173 "AI (WHILE b DO c) S = pfp_above (AI c) S"
   174 
   174 
   175 lemma AI_sound: "(c,s) \<Rightarrow> t \<Longrightarrow> s <: S0 \<Longrightarrow> t <: AI c S0"
   175 lemma AI_sound: "(c,s) \<Rightarrow> t \<Longrightarrow> s <: S0 \<Longrightarrow> t <: AI c S0"
   176 proof(induct c arbitrary: s t S0)
   176 proof(induct c arbitrary: s t S0)
   177   case SKIP thus ?case by fastsimp
   177   case SKIP thus ?case by fastforce
   178 next
   178 next
   179   case Assign thus ?case by (auto simp: aval'_sound)
   179   case Assign thus ?case by (auto simp: aval'_sound)
   180 next
   180 next
   181   case Semi thus ?case by auto
   181   case Semi thus ?case by auto
   182 next
   182 next