src/HOL/Datatype_Examples/Free_Idempotent_Monoid.thy
changeset 73398 180981b87929
parent 71469 d7ef73df3d15
equal deleted inserted replaced
73397:d47c8a89c6a5 73398:180981b87929
   221 lemma semiconfluentp_cancel1: "semiconfluentp cancel1\<inverse>\<inverse>"
   221 lemma semiconfluentp_cancel1: "semiconfluentp cancel1\<inverse>\<inverse>"
   222   by(auto simp add: semiconfluentp_def rtranclp_conversep dest: cancel1_semiconfluent)
   222   by(auto simp add: semiconfluentp_def rtranclp_conversep dest: cancel1_semiconfluent)
   223 
   223 
   224 lemma retract_cancel1_aux:
   224 lemma retract_cancel1_aux:
   225   assumes "cancel1 ys (map f xs)"
   225   assumes "cancel1 ys (map f xs)"
   226   shows "\<exists>zs. cancel1 zs xs \<and> ys = map f zs"
   226   shows "\<exists>zs. cancel1 zs xs \<and> ys = map f zs \<and> set zs \<subseteq> set xs"
   227   using assms
   227   using assms
   228   by cases(fastforce simp add: map_eq_append_conv append_eq_map_conv intro: cancel1.intros)
   228   by cases(fastforce simp add: map_eq_append_conv append_eq_map_conv intro: cancel1.intros)
   229 
   229 
   230 lemma retract_cancel1:
   230 lemma retract_cancel1:
   231   assumes "cancel1 ys (map f xs)"
   231   assumes "cancel1 ys (map f xs)"
   232   shows "\<exists>zs. eq xs zs \<and> ys = map f zs"
   232   shows "\<exists>zs. eq xs zs \<and> ys = map f zs \<and> set zs \<subseteq> set xs"
   233   using retract_cancel1_aux[OF assms] by(blast intro: symclpI)
   233   using retract_cancel1_aux[OF assms] by(blast intro: symclpI)
   234 
   234 
   235 lemma cancel1_set_eq:
   235 lemma cancel1_set_eq:
   236   assumes "cancel1 ys xs"
   236   assumes "cancel1 ys xs"
   237   shows "set ys = set xs"
   237   shows "set ys = set xs"