Quot/Examples/FSet.thy
changeset 681 3c6419a5a7fc
parent 680 d003f9e00c29
child 683 0d9e8aa1bc7a
equal deleted inserted replaced
680:d003f9e00c29 681:3c6419a5a7fc
   159 
   159 
   160 lemma ho_cons_rsp[quot_respect]:
   160 lemma ho_cons_rsp[quot_respect]:
   161   "(op = ===> op \<approx> ===> op \<approx>) op # op #"
   161   "(op = ===> op \<approx> ===> op \<approx>) op # op #"
   162   by (simp add: cons_rsp)
   162   by (simp add: cons_rsp)
   163 
   163 
   164 lemma append_rsp_fst:
   164 lemma append_rsp_aux1:
   165   assumes a : "l1 \<approx> l2"
   165   assumes a : "l2 \<approx> r2 "
   166   shows "(l1 @ s) \<approx> (l2 @ s)"
   166   shows "(h @ l2) \<approx> (h @ r2)"
   167   using a
   167 using a
   168   by (induct) (auto intro: list_eq.intros list_eq_refl)
   168 apply(induct h)
   169 
   169 apply(auto intro: list_eq.intros(5))
   170 lemma append_end:
   170 done
   171   shows "(e # l) \<approx> (l @ [e])"
   171 
   172   apply (induct l)
   172 lemma append_rsp_aux2:
   173   apply (auto intro: list_eq.intros list_eq_refl)
   173   assumes a : "l1 \<approx> r1" "l2 \<approx> r2 "
   174   done
       
   175 
       
   176 lemma rev_rsp:
       
   177   shows "a \<approx> rev a"
       
   178   apply (induct a)
       
   179   apply simp
       
   180   apply (rule list_eq_refl)
       
   181   apply simp_all
       
   182   apply (rule list_eq.intros(6))
       
   183   prefer 2
       
   184   apply (rule append_rsp_fst)
       
   185   apply assumption
       
   186   apply (rule append_end)
       
   187   done
       
   188 
       
   189 lemma append_sym_rsp:
       
   190   shows "(a @ b) \<approx> (b @ a)"
       
   191   apply (rule list_eq.intros(6))
       
   192   apply (rule append_rsp_fst)
       
   193   apply (rule rev_rsp)
       
   194   apply (rule list_eq.intros(6))
       
   195   apply (rule rev_rsp)
       
   196   apply (simp)
       
   197   apply (rule append_rsp_fst)
       
   198   apply (rule list_eq.intros(3))
       
   199   apply (rule rev_rsp)
       
   200   done
       
   201 
       
   202 lemma append_rsp:
       
   203   assumes a : "l1 \<approx> r1"
       
   204   assumes b : "l2 \<approx> r2 "
       
   205   shows "(l1 @ l2) \<approx> (r1 @ r2)"
   174   shows "(l1 @ l2) \<approx> (r1 @ r2)"
   206   apply (rule list_eq.intros(6))
   175 using a
   207   apply (rule append_rsp_fst)
   176 apply(induct arbitrary: l2 r2)
   208   using a apply (assumption)
   177 apply(simp_all)
   209   apply (rule list_eq.intros(6))
   178 apply(blast intro: list_eq.intros append_rsp_aux1)+
   210   apply (rule append_sym_rsp)
   179 done
   211   apply (rule list_eq.intros(6))
   180 
   212   apply (rule append_rsp_fst)
   181 lemma append_rsp[quot_respect]:
   213   using b apply (assumption)
       
   214   apply (rule append_sym_rsp)
       
   215   done
       
   216 
       
   217 lemma ho_append_rsp[quot_respect]:
       
   218   "(op \<approx> ===> op \<approx> ===> op \<approx>) op @ op @"
   182   "(op \<approx> ===> op \<approx> ===> op \<approx>) op @ op @"
   219   by (simp add: append_rsp)
   183   by (auto simp add: append_rsp_aux2)
   220 
   184 
   221 lemma map_rsp:
   185 lemma map_rsp:
   222   assumes a: "a \<approx> b"
   186   assumes a: "a \<approx> b"
   223   shows "map f a \<approx> map f b"
   187   shows "map f a \<approx> map f b"
   224   using a
   188   using a