equal
deleted
inserted
replaced
36 Nil: "rbl_mult Nil x = Nil" |
36 Nil: "rbl_mult Nil x = Nil" |
37 | Cons: "rbl_mult (y # ys) x = (let ws = False # rbl_mult ys x in |
37 | Cons: "rbl_mult (y # ys) x = (let ws = False # rbl_mult ys x in |
38 if y then rbl_add ws x else ws)" |
38 if y then rbl_add ws x else ws)" |
39 |
39 |
40 lemma butlast_power: |
40 lemma butlast_power: |
41 "(butlast ^ n) bl = take (length bl - n) bl" |
41 "(butlast o^ n) bl = take (length bl - n) bl" |
42 by (induct n) (auto simp: butlast_take) |
42 by (induct n) (auto simp: butlast_take) |
43 |
43 |
44 lemma bin_to_bl_aux_Pls_minus_simp [simp]: |
44 lemma bin_to_bl_aux_Pls_minus_simp [simp]: |
45 "0 < n ==> bin_to_bl_aux n Int.Pls bl = |
45 "0 < n ==> bin_to_bl_aux n Int.Pls bl = |
46 bin_to_bl_aux (n - 1) Int.Pls (False # bl)" |
46 bin_to_bl_aux (n - 1) Int.Pls (False # bl)" |
368 apply (cases "k <= length bl") |
368 apply (cases "k <= length bl") |
369 apply auto |
369 apply auto |
370 done |
370 done |
371 |
371 |
372 lemma nth_rest_power_bin [rule_format] : |
372 lemma nth_rest_power_bin [rule_format] : |
373 "ALL n. bin_nth ((bin_rest ^ k) w) n = bin_nth w (n + k)" |
373 "ALL n. bin_nth ((bin_rest o^ k) w) n = bin_nth w (n + k)" |
374 apply (induct k, clarsimp) |
374 apply (induct k, clarsimp) |
375 apply clarsimp |
375 apply clarsimp |
376 apply (simp only: bin_nth.Suc [symmetric] add_Suc) |
376 apply (simp only: bin_nth.Suc [symmetric] add_Suc) |
377 done |
377 done |
378 |
378 |
379 lemma take_rest_power_bin: |
379 lemma take_rest_power_bin: |
380 "m <= n ==> take m (bin_to_bl n w) = bin_to_bl m ((bin_rest ^ (n - m)) w)" |
380 "m <= n ==> take m (bin_to_bl n w) = bin_to_bl m ((bin_rest o^ (n - m)) w)" |
381 apply (rule nth_equalityI) |
381 apply (rule nth_equalityI) |
382 apply simp |
382 apply simp |
383 apply (clarsimp simp add: nth_bin_to_bl nth_rest_power_bin) |
383 apply (clarsimp simp add: nth_bin_to_bl nth_rest_power_bin) |
384 done |
384 done |
385 |
385 |