src/HOL/List.thy
changeset 53689 705f0b728b1b
parent 53412 01b804df0a30
child 53721 ccaceea6c768
equal deleted inserted replaced
53688:63892cfef47f 53689:705f0b728b1b
   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)"