src/HOL/MicroJava/BV/LBVSpec.thy
changeset 13074 96bf406fd3e5
parent 13071 f538a1dba7ee
child 13078 1dd711c6b93c
equal deleted inserted replaced
13073:cc9d7f403a4b 13074:96bf406fd3e5
   103 
   103 
   104 lemma err_semilatDorderI [simp, intro]:
   104 lemma err_semilatDorderI [simp, intro]:
   105   "err_semilat (A,r,f) \<Longrightarrow> order r"
   105   "err_semilat (A,r,f) \<Longrightarrow> order r"
   106   apply (simp add: Err.sl_def)
   106   apply (simp add: Err.sl_def)
   107   apply (rule order_le_err [THEN iffD1])
   107   apply (rule order_le_err [THEN iffD1])
   108   apply (rule semilatDorderI)
   108   apply (rule semilat.orderI)
   109   apply assumption
   109   apply assumption
   110   done
   110   done
   111 
   111 
   112 lemma err_opt_semilat [simp,elim]:
   112 lemma err_opt_semilat [simp,elim]:
   113   "err_semilat (A,r,f) \<Longrightarrow> semilat (err (opt A), Err.le (Opt.le r), lift2 (Opt.sup f))"
   113   "err_semilat (A,r,f) \<Longrightarrow> semilat (err (opt A), Err.le (Opt.le r), lift2 (Opt.sup f))"
   173     (is "?merge (l#ls) x = ?merge ls ?if'")
   173     (is "?merge (l#ls) x = ?merge ls ?if'")
   174     by simp 
   174     by simp 
   175   also have "\<dots> = ?if ls ?if'" 
   175   also have "\<dots> = ?if ls ?if'" 
   176   proof -
   176   proof -
   177     from l have "s' \<in> err (opt A)" by simp
   177     from l have "s' \<in> err (opt A)" by simp
   178     with x semi have "(s' +|f x) \<in> err (opt A)" by (fast intro: closedD)
   178     with x semi have "(s' +|f x) \<in> err (opt A)"
       
   179       by (fast intro: semilat.closedI closedD)
   179     with x have "?if' \<in> err (opt A)" by auto
   180     with x have "?if' \<in> err (opt A)" by auto
   180     hence "?P ls ?if'" by (rule IH) thus ?thesis by simp
   181     hence "?P ls ?if'" by (rule IH) thus ?thesis by simp
   181   qed
   182   qed
   182   also have "\<dots> = ?if (l#ls) x"
   183   also have "\<dots> = ?if (l#ls) x"
   183     proof (cases "\<forall>(pc', s')\<in>set (l#ls). pc' \<noteq> pc + 1 \<longrightarrow> s' \<le>|r OK (cert ! pc')")
   184     proof (cases "\<forall>(pc', s')\<in>set (l#ls). pc' \<noteq> pc + 1 \<longrightarrow> s' \<le>|r OK (cert ! pc')")