equal
deleted
inserted
replaced
533 "bin_cat x m (bin_cat y n z) = bin_cat (bin_cat x (m - n) y) (min m n) z" |
533 "bin_cat x m (bin_cat y n z) = bin_cat (bin_cat x (m - n) y) (min m n) z" |
534 apply (induct n arbitrary: z m, clarsimp) |
534 apply (induct n arbitrary: z m, clarsimp) |
535 apply (case_tac m, auto) |
535 apply (case_tac m, auto) |
536 done |
536 done |
537 |
537 |
|
538 lemma bin_cat_zero [simp]: "bin_cat 0 n w = bintrunc n w" |
|
539 by (induct n arbitrary: w) (auto simp: Int.Pls_def) |
|
540 |
538 lemma bin_cat_Pls [simp]: "bin_cat Int.Pls n w = bintrunc n w" |
541 lemma bin_cat_Pls [simp]: "bin_cat Int.Pls n w = bintrunc n w" |
539 by (induct n arbitrary: w) auto |
542 unfolding Pls_def by (rule bin_cat_zero) |
540 |
543 |
541 lemma bintr_cat1: |
544 lemma bintr_cat1: |
542 "bintrunc (k + n) (bin_cat a n b) = bin_cat (bintrunc k a) n b" |
545 "bintrunc (k + n) (bin_cat a n b) = bin_cat (bintrunc k a) n b" |
543 by (induct n arbitrary: b) auto |
546 by (induct n arbitrary: b) auto |
544 |
547 |
564 |
567 |
565 lemma bin_split_cat: |
568 lemma bin_split_cat: |
566 "bin_split n (bin_cat v n w) = (v, bintrunc n w)" |
569 "bin_split n (bin_cat v n w) = (v, bintrunc n w)" |
567 by (induct n arbitrary: w) auto |
570 by (induct n arbitrary: w) auto |
568 |
571 |
|
572 lemma bin_split_zero [simp]: "bin_split n 0 = (0, 0)" |
|
573 by (induct n) (auto simp: Int.Pls_def) |
|
574 |
569 lemma bin_split_Pls [simp]: |
575 lemma bin_split_Pls [simp]: |
570 "bin_split n Int.Pls = (Int.Pls, Int.Pls)" |
576 "bin_split n Int.Pls = (Int.Pls, Int.Pls)" |
571 by (induct n) (auto simp: Let_def BIT_simps split: ls_splits) |
577 unfolding Pls_def by (rule bin_split_zero) |
572 |
578 |
573 lemma bin_split_Min [simp]: |
579 lemma bin_split_Min [simp]: |
574 "bin_split n Int.Min = (Int.Min, bintrunc n Int.Min)" |
580 "bin_split n Int.Min = (Int.Min, bintrunc n Int.Min)" |
575 by (induct n) (auto simp: Let_def split: ls_splits) |
581 by (induct n) (auto simp: Let_def split: ls_splits) |
576 |
582 |