src/HOL/MicroJava/BV/Semilat.thy
changeset 10797 028d22926a41
parent 10496 f2d304bdf3cc
child 10918 9679326489cd
equal deleted inserted replaced
10796:c0bcea781b3a 10797:028d22926a41
   191 apply blast 
   191 apply blast 
   192 done 
   192 done 
   193 
   193 
   194 
   194 
   195 lemma extend_lub:
   195 lemma extend_lub:
   196   "[| univalent r; is_lub (r^* ) x y u; (x',x) : r |] 
   196   "[| single_valued r; is_lub (r^* ) x y u; (x',x) : r |] 
   197   ==> EX v. is_lub (r^* ) x' y v"
   197   ==> EX v. is_lub (r^* ) x' y v"
   198 apply (unfold is_lub_def is_ub_def)
   198 apply (unfold is_lub_def is_ub_def)
   199 apply (case_tac "(y,x) : r^*")
   199 apply (case_tac "(y,x) : r^*")
   200  apply (case_tac "(y,x') : r^*")
   200  apply (case_tac "(y,x') : r^*")
   201   apply blast
   201   apply blast
   202  apply (blast intro: r_into_rtrancl elim: converse_rtranclE
   202  apply (blast intro: r_into_rtrancl elim: converse_rtranclE
   203                dest: univalentD)
   203                dest: single_valuedD)
   204 apply (rule exI)
   204 apply (rule exI)
   205 apply (rule conjI)
   205 apply (rule conjI)
   206  apply (blast intro: rtrancl_into_rtrancl2 dest: univalentD)
   206  apply (blast intro: rtrancl_into_rtrancl2 dest: single_valuedD)
   207 apply (blast intro: rtrancl_into_rtrancl rtrancl_into_rtrancl2 
   207 apply (blast intro: rtrancl_into_rtrancl rtrancl_into_rtrancl2 
   208              elim: converse_rtranclE dest: univalentD)
   208              elim: converse_rtranclE dest: single_valuedD)
   209 done 
   209 done 
   210 
   210 
   211 lemma univalent_has_lubs [rule_format]:
   211 lemma single_valued_has_lubs [rule_format]:
   212   "[| univalent r; (x,u) : r^* |] ==> (!y. (y,u) : r^* --> 
   212   "[| single_valued r; (x,u) : r^* |] ==> (!y. (y,u) : r^* --> 
   213   (EX z. is_lub (r^* ) x y z))"
   213   (EX z. is_lub (r^* ) x y z))"
   214 apply (erule converse_rtrancl_induct)
   214 apply (erule converse_rtrancl_induct)
   215  apply clarify
   215  apply clarify
   216  apply (erule converse_rtrancl_induct)
   216  apply (erule converse_rtrancl_induct)
   217   apply blast
   217   apply blast
   226  apply assumption
   226  apply assumption
   227 apply (blast intro: antisymD dest!: acyclic_impl_antisym_rtrancl)
   227 apply (blast intro: antisymD dest!: acyclic_impl_antisym_rtrancl)
   228 done 
   228 done 
   229 
   229 
   230 lemma is_lub_some_lub:
   230 lemma is_lub_some_lub:
   231   "[| univalent r; acyclic r; (x,u):r^*; (y,u):r^* |] 
   231   "[| single_valued r; acyclic r; (x,u):r^*; (y,u):r^* |] 
   232   ==> is_lub (r^* ) x y (some_lub (r^* ) x y)";
   232   ==> is_lub (r^* ) x y (some_lub (r^* ) x y)";
   233   by (fastsimp dest: univalent_has_lubs simp add: some_lub_conv)
   233   by (fastsimp dest: single_valued_has_lubs simp add: some_lub_conv)
   234 
   234 
   235 end
   235 end