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 |