src/HOL/List.thy
changeset 58961 7c507e664047
parent 58956 a816aa3ff391
child 58969 5f179549c362
equal deleted inserted replaced
58960:4bee6d8c1500 58961:7c507e664047
  6447 
  6447 
  6448 context
  6448 context
  6449 begin
  6449 begin
  6450 interpretation lifting_syntax .
  6450 interpretation lifting_syntax .
  6451 
  6451 
  6452 lemma Nil_transfer [transfer_rule]: "(list_all2 A) [] []"
       
  6453   by simp
       
  6454 
       
  6455 lemma Cons_transfer [transfer_rule]:
       
  6456   "(A ===> list_all2 A ===> list_all2 A) Cons Cons"
       
  6457   unfolding rel_fun_def by simp
       
  6458 
       
  6459 lemma case_list_transfer [transfer_rule]:
       
  6460   "(B ===> (A ===> list_all2 A ===> B) ===> list_all2 A ===> B)
       
  6461     case_list case_list"
       
  6462   unfolding rel_fun_def by (simp split: list.split)
       
  6463 
       
  6464 lemma rec_list_transfer [transfer_rule]:
       
  6465   "(B ===> (A ===> list_all2 A ===> B ===> B) ===> list_all2 A ===> B)
       
  6466     rec_list rec_list"
       
  6467   unfolding rel_fun_def by (clarify, erule list_all2_induct, simp_all)
       
  6468 
       
  6469 lemma tl_transfer [transfer_rule]:
  6452 lemma tl_transfer [transfer_rule]:
  6470   "(list_all2 A ===> list_all2 A) tl tl"
  6453   "(list_all2 A ===> list_all2 A) tl tl"
  6471   unfolding tl_def[abs_def] by transfer_prover
  6454   unfolding tl_def[abs_def] by transfer_prover
  6472 
  6455 
  6473 lemma butlast_transfer [transfer_rule]:
  6456 lemma butlast_transfer [transfer_rule]:
  6474   "(list_all2 A ===> list_all2 A) butlast butlast"
  6457   "(list_all2 A ===> list_all2 A) butlast butlast"
  6475   by (rule rel_funI, erule list_all2_induct, auto)
  6458   by (rule rel_funI, erule list_all2_induct, auto)
  6476 
  6459 
  6477 lemma set_transfer [transfer_rule]:
       
  6478   "(list_all2 A ===> rel_set A) set set"
       
  6479   unfolding set_rec[abs_def] by transfer_prover
       
  6480 
       
  6481 lemma map_rec: "map f xs = rec_list Nil (%x _ y. Cons (f x) y) xs"
  6460 lemma map_rec: "map f xs = rec_list Nil (%x _ y. Cons (f x) y) xs"
  6482   by (induct xs) auto
  6461   by (induct xs) auto
  6483 
       
  6484 lemma map_transfer [transfer_rule]:
       
  6485   "((A ===> B) ===> list_all2 A ===> list_all2 B) map map"
       
  6486   unfolding map_rec[abs_def] by transfer_prover
       
  6487 
  6462 
  6488 lemma append_transfer [transfer_rule]:
  6463 lemma append_transfer [transfer_rule]:
  6489   "(list_all2 A ===> list_all2 A ===> list_all2 A) append append"
  6464   "(list_all2 A ===> list_all2 A ===> list_all2 A) append append"
  6490   unfolding List.append_def by transfer_prover
  6465   unfolding List.append_def by transfer_prover
  6491 
  6466 
  6593   unfolding rotate1_def by transfer_prover
  6568   unfolding rotate1_def by transfer_prover
  6594 
  6569 
  6595 lemma rotate_transfer [transfer_rule]:
  6570 lemma rotate_transfer [transfer_rule]:
  6596   "(op = ===> list_all2 A ===> list_all2 A) rotate rotate"
  6571   "(op = ===> list_all2 A ===> list_all2 A) rotate rotate"
  6597   unfolding rotate_def [abs_def] by transfer_prover
  6572   unfolding rotate_def [abs_def] by transfer_prover
  6598 
       
  6599 lemma list_all2_transfer [transfer_rule]:
       
  6600   "((A ===> B ===> op =) ===> list_all2 A ===> list_all2 B ===> op =)
       
  6601     list_all2 list_all2"
       
  6602   apply (subst (4) list_all2_iff [abs_def])
       
  6603   apply (subst (3) list_all2_iff [abs_def])
       
  6604   apply transfer_prover
       
  6605   done
       
  6606 
  6573 
  6607 lemma sublist_transfer [transfer_rule]:
  6574 lemma sublist_transfer [transfer_rule]:
  6608   "(list_all2 A ===> rel_set (op =) ===> list_all2 A) sublist sublist"
  6575   "(list_all2 A ===> rel_set (op =) ===> list_all2 A) sublist sublist"
  6609   unfolding sublist_def [abs_def] by transfer_prover
  6576   unfolding sublist_def [abs_def] by transfer_prover
  6610 
  6577