equal
deleted
inserted
replaced
708 by (rule not_Cons_self [symmetric]) |
708 by (rule not_Cons_self [symmetric]) |
709 |
709 |
710 lemma neq_Nil_conv: "(xs \<noteq> []) = (\<exists>y ys. xs = y # ys)" |
710 lemma neq_Nil_conv: "(xs \<noteq> []) = (\<exists>y ys. xs = y # ys)" |
711 by (induct xs) auto |
711 by (induct xs) auto |
712 |
712 |
|
713 lemma tl_Nil: "tl xs = [] \<longleftrightarrow> xs = [] \<or> (EX x. xs = [x])" |
|
714 by (cases xs) auto |
|
715 |
|
716 lemma Nil_tl: "[] = tl xs \<longleftrightarrow> xs = [] \<or> (EX x. xs = [x])" |
|
717 by (cases xs) auto |
|
718 |
713 lemma length_induct: |
719 lemma length_induct: |
714 "(\<And>xs. \<forall>ys. length ys < length xs \<longrightarrow> P ys \<Longrightarrow> P xs) \<Longrightarrow> P xs" |
720 "(\<And>xs. \<forall>ys. length ys < length xs \<longrightarrow> P ys \<Longrightarrow> P xs) \<Longrightarrow> P xs" |
715 by (rule measure_induct [of length]) iprover |
721 by (fact measure_induct) |
716 |
722 |
717 lemma list_nonempty_induct [consumes 1, case_names single cons]: |
723 lemma list_nonempty_induct [consumes 1, case_names single cons]: |
718 assumes "xs \<noteq> []" |
724 assumes "xs \<noteq> []" |
719 assumes single: "\<And>x. P [x]" |
725 assumes single: "\<And>x. P [x]" |
720 assumes cons: "\<And>x xs. xs \<noteq> [] \<Longrightarrow> P xs \<Longrightarrow> P (x # xs)" |
726 assumes cons: "\<And>x xs. xs \<noteq> [] \<Longrightarrow> P xs \<Longrightarrow> P (x # xs)" |