src/HOL/List.thy
changeset 16397 c047008f88d4
parent 15870 4320bce5873f
child 16634 f19d58cfb47a
equal deleted inserted replaced
16396:d9d2a0cadd5e 16397:c047008f88d4
  1648 done
  1648 done
  1649 
  1649 
  1650 lemma replicate_add: "replicate (n + m) x = replicate n x @ replicate m x"
  1650 lemma replicate_add: "replicate (n + m) x = replicate n x @ replicate m x"
  1651 by (induct n) auto
  1651 by (induct n) auto
  1652 
  1652 
       
  1653 text{* Courtesy of Matthias Daum: *}
       
  1654 lemma append_replicate_commute:
       
  1655   "replicate n x @ replicate k x = replicate k x @ replicate n x"
       
  1656 apply (simp add: replicate_add [THEN sym])
       
  1657 apply (simp add: add_commute)
       
  1658 done
       
  1659 
  1653 lemma hd_replicate [simp]: "n \<noteq> 0 ==> hd (replicate n x) = x"
  1660 lemma hd_replicate [simp]: "n \<noteq> 0 ==> hd (replicate n x) = x"
  1654 by (induct n) auto
  1661 by (induct n) auto
  1655 
  1662 
  1656 lemma tl_replicate [simp]: "n \<noteq> 0 ==> tl (replicate n x) = replicate (n - 1) x"
  1663 lemma tl_replicate [simp]: "n \<noteq> 0 ==> tl (replicate n x) = replicate (n - 1) x"
  1657 by (induct n) auto
  1664 by (induct n) auto
  1661 
  1668 
  1662 lemma nth_replicate[simp]: "!!i. i < n ==> (replicate n x)!i = x"
  1669 lemma nth_replicate[simp]: "!!i. i < n ==> (replicate n x)!i = x"
  1663 apply (induct n, simp)
  1670 apply (induct n, simp)
  1664 apply (simp add: nth_Cons split: nat.split)
  1671 apply (simp add: nth_Cons split: nat.split)
  1665 done
  1672 done
       
  1673 
       
  1674 text{* Courtesy of Matthias Daum (2 lemmas): *}
       
  1675 lemma take_replicate[simp]: "take i (replicate k x) = replicate (min i k) x"
       
  1676 apply (case_tac "k \<le> i")
       
  1677  apply  (simp add: min_def)
       
  1678 apply (drule not_leE)
       
  1679 apply (simp add: min_def)
       
  1680 apply (subgoal_tac "replicate k x = replicate i x @ replicate (k - i) x")
       
  1681  apply  simp
       
  1682 apply (simp add: replicate_add [symmetric])
       
  1683 done
       
  1684 
       
  1685 lemma drop_replicate[simp]: "!!i. drop i (replicate k x) = replicate (k-i) x"
       
  1686 apply (induct k)
       
  1687  apply simp
       
  1688 apply clarsimp
       
  1689 apply (case_tac i)
       
  1690  apply simp
       
  1691 apply clarsimp
       
  1692 done
       
  1693 
  1666 
  1694 
  1667 lemma set_replicate_Suc: "set (replicate (Suc n) x) = {x}"
  1695 lemma set_replicate_Suc: "set (replicate (Suc n) x) = {x}"
  1668 by (induct n) auto
  1696 by (induct n) auto
  1669 
  1697 
  1670 lemma set_replicate [simp]: "n \<noteq> 0 ==> set (replicate n x) = {x}"
  1698 lemma set_replicate [simp]: "n \<noteq> 0 ==> set (replicate n x) = {x}"