# HG changeset patch # User kleing # Date 1392859671 -39600 # Node ID da35747597bdfa1d578db5e9938532069577c124 # Parent 25d7b485df816bdc639076ab2942826140ea1739 move stronger rules into exercise diff -r 25d7b485df81 -r da35747597bd src/HOL/IMP/Sem_Equiv.thy --- a/src/HOL/IMP/Sem_Equiv.thy Wed Feb 19 15:57:02 2014 +0000 +++ b/src/HOL/IMP/Sem_Equiv.thy Thu Feb 20 12:27:51 2014 +1100 @@ -75,10 +75,10 @@ P \ (c;; d) \ (c';; d')" by (clarsimp simp: equiv_up_to_def) blast -lemma equiv_up_to_while_lemma: +lemma equiv_up_to_while_lemma_weak: shows "(d,s) \ s' \ P \ b <\> b' \ - (\s. P s \ bval b s) \ c \ c' \ + P \ c \ c' \ (\s s'. (c, s) \ s' \ P s \ bval b s \ P s') \ P s \ d = WHILE b DO c \ @@ -92,7 +92,7 @@ have "bval b' s1" by (simp add: bequiv_up_to_def) moreover from WhileTrue.prems - have "(\s. P s \ bval b s) \ c \ c'" by simp + have "P \ c \ c'" by simp with `bval b s1` `P s1` `(c, s1) \ s2` have "(c', s1) \ s2" by (simp add: equiv_up_to_def) moreover @@ -108,45 +108,29 @@ thus ?case by (auto simp: bequiv_up_to_def) qed (fastforce simp: equiv_up_to_def bequiv_up_to_def)+ -lemma bequiv_context_subst: - "P \ b <\> b' \ (P s \ bval b s) = (P s \ bval b' s)" - by (auto simp: bequiv_up_to_def) - -lemma equiv_up_to_while: +lemma equiv_up_to_while_weak: assumes b: "P \ b <\> b'" - assumes c: "(\s. P s \ bval b s) \ c \ c'" + assumes c: "P \ c \ c'" assumes I: "\s s'. (c, s) \ s' \ P s \ bval b s \ P s'" shows "P \ WHILE b DO c \ WHILE b' DO c'" proof - from b have b': "P \ b' <\> b" by (simp add: bequiv_up_to_sym) - from c b have c': "(\s. P s \ bval b' s) \ c' \ c" - by (simp add: equiv_up_to_sym bequiv_context_subst) + from c b have c': "P \ c' \ c" by (simp add: equiv_up_to_sym) from I have I': "\s s'. (c', s) \ s' \ P s \ bval b' s \ P s'" by (auto dest!: equiv_up_toD1 [OF c'] simp: bequiv_up_to_subst [OF b']) - note equiv_up_to_while_lemma [OF _ b c] - equiv_up_to_while_lemma [OF _ b' c'] + note equiv_up_to_while_lemma_weak [OF _ b c] + equiv_up_to_while_lemma_weak [OF _ b' c'] thus ?thesis using I I' by (auto intro!: equiv_up_toI) qed -lemma equiv_up_to_while_weak: - "P \ b <\> b' \ P \ c \ c' \ - (\s s'. (c, s) \ s' \ P s \ bval b s \ P s') \ - P \ WHILE b DO c \ WHILE b' DO c'" - by (fastforce elim!: equiv_up_to_while equiv_up_to_weaken) - -lemma equiv_up_to_if: - "P \ b <\> b' \ (\s. P s \ bval b s) \ c \ c' \ (\s. P s \ \bval b s) \ d \ d' \ - P \ IF b THEN c ELSE d \ IF b' THEN c' ELSE d'" - by (auto simp: bequiv_up_to_def equiv_up_to_def) - lemma equiv_up_to_if_weak: "P \ b <\> b' \ P \ c \ c' \ P \ d \ d' \ P \ IF b THEN c ELSE d \ IF b' THEN c' ELSE d'" - by (fastforce elim!: equiv_up_to_if equiv_up_to_weaken) + by (auto simp: bequiv_up_to_def equiv_up_to_def) lemma equiv_up_to_if_True [intro!]: "(\s. P s \ bval b s) \ P \ IF b THEN c1 ELSE c2 \ c1"