diff -r e44d86131648 -r 0c18df79b1c8 src/ZF/List.thy --- a/src/ZF/List.thy Tue Sep 27 16:51:35 2022 +0100 +++ b/src/ZF/List.thy Tue Sep 27 17:03:23 2022 +0100 @@ -136,11 +136,11 @@ (*An elimination rule, for type-checking*) inductive_cases ConsE: "Cons(a,l) \ list(A)" -lemma Cons_type_iff [simp]: "Cons(a,l) \ list(A) \ a \ A & l \ list(A)" +lemma Cons_type_iff [simp]: "Cons(a,l) \ list(A) \ a \ A \ l \ list(A)" by (blast elim: ConsE) (*Proving freeness results*) -lemma Cons_iff: "Cons(a,l)=Cons(a',l') \ a=a' & l=l'" +lemma Cons_iff: "Cons(a,l)=Cons(a',l') \ a=a' \ l=l'" by auto lemma Nil_Cons_iff: "\ Nil=Cons(a,l)" @@ -480,7 +480,7 @@ apply (auto dest: not_lt_imp_le) done -lemma lt_min_iff: "\i \ nat; j \ nat; k \ nat\ \ i ii \ nat; j \ nat; k \ nat\ \ i i i 0 xs \ Nil" by (erule list.induct, auto) -lemma length_succ_iff: "xs:list(A) \ length(xs)=succ(n) \ (\y ys. xs=Cons(y, ys) & length(ys)=n)" +lemma length_succ_iff: "xs:list(A) \ length(xs)=succ(n) \ (\y ys. xs=Cons(y, ys) \ length(ys)=n)" by (erule list.induct, auto) (** more theorems about append **) lemma append_is_Nil_iff [simp]: - "xs:list(A) \ (xs@ys = Nil) \ (xs=Nil & ys = Nil)" + "xs:list(A) \ (xs@ys = Nil) \ (xs=Nil \ ys = Nil)" by (erule list.induct, auto) lemma append_is_Nil_iff2 [simp]: - "xs:list(A) \ (Nil = xs@ys) \ (xs=Nil & ys = Nil)" + "xs:list(A) \ (Nil = xs@ys) \ (xs=Nil \ ys = Nil)" by (erule list.induct, auto) lemma append_left_is_self_iff [simp]: @@ -554,7 +554,7 @@ (*TOO SLOW as a default simprule!*) lemma append_left_is_Nil_iff [rule_format]: "\xs:list(A); ys:list(A); zs:list(A)\ \ - length(ys)=length(zs) \ (xs@ys=zs \ (xs=Nil & ys=zs))" + length(ys)=length(zs) \ (xs@ys=zs \ (xs=Nil \ ys=zs))" apply (erule list.induct) apply (auto simp add: length_app) done @@ -562,14 +562,14 @@ (*TOO SLOW as a default simprule!*) lemma append_left_is_Nil_iff2 [rule_format]: "\xs:list(A); ys:list(A); zs:list(A)\ \ - length(ys)=length(zs) \ (zs=ys@xs \ (xs=Nil & ys=zs))" + length(ys)=length(zs) \ (zs=ys@xs \ (xs=Nil \ ys=zs))" apply (erule list.induct) apply (auto simp add: length_app) done lemma append_eq_append_iff [rule_format]: "xs:list(A) \ \ys \ list(A). - length(xs)=length(ys) \ (xs@us = ys@vs) \ (xs=ys & us=vs)" + length(xs)=length(ys) \ (xs@us = ys@vs) \ (xs=ys \ us=vs)" apply (erule list.induct) apply (simp (no_asm_simp)) apply clarify @@ -580,7 +580,7 @@ lemma append_eq_append [rule_format]: "xs:list(A) \ \ys \ list(A). \us \ list(A). \vs \ list(A). - length(us) = length(vs) \ (xs@us = ys@vs) \ (xs=ys & us=vs)" + length(us) = length(vs) \ (xs@us = ys@vs) \ (xs=ys \ us=vs)" apply (induct_tac "xs") apply (force simp add: length_app, clarify) apply (erule_tac a = ys in list.cases, simp) @@ -590,7 +590,7 @@ lemma append_eq_append_iff2 [simp]: "\xs:list(A); ys:list(A); us:list(A); vs:list(A); length(us)=length(vs)\ - \ xs@us = ys@vs \ (xs=ys & us=vs)" + \ xs@us = ys@vs \ (xs=ys \ us=vs)" apply (rule iffI) apply (rule append_eq_append, auto) done @@ -606,7 +606,7 @@ (* Can also be proved from append_eq_append_iff2, but the proof requires two more hypotheses: x \ A and y \ A *) lemma append1_eq_iff [rule_format]: - "xs:list(A) \ \ys \ list(A). xs@[x] = ys@[y] \ (xs = ys & x=y)" + "xs:list(A) \ \ys \ list(A). xs@[x] = ys@[y] \ (xs = ys \ x=y)" apply (erule list.induct) apply clarify apply (erule list.cases) @@ -769,7 +769,7 @@ lemma set_of_list_conv_nth: "xs:list(A) - \ set_of_list(xs) = {x \ A. \i\nat. i set_of_list(xs) = {x \ A. \i\nat. i x = nth(i,xs)}" apply (induct_tac "xs", simp_all) apply (rule equalityI, auto) apply (rule_tac x = 0 in bexI, auto) @@ -968,7 +968,7 @@ "\xs:list(A); ys:list(B); i \ nat\ \ set_of_list(zip(xs, ys)) = {:A*B. \i\nat. i < min(length(xs), length(ys)) - & x = nth(i, xs) & y = nth(i, ys)}" + \ x = nth(i, xs) \ y = nth(i, ys)}" by (force intro!: Collect_cong simp add: lt_min_iff set_of_list_conv_nth) (** list_update **) @@ -1192,7 +1192,7 @@ lemma sublist_shift_lemma: "\xs:list(B); i \ nat\ \ map(fst, filter(%p. snd(p):A, zip(xs, upt(i,i #+ length(xs))))) = - map(fst, filter(%p. snd(p):nat & snd(p) #+ i \ A, zip(xs,upt(0,length(xs)))))" + map(fst, filter(%p. snd(p):nat \ snd(p) #+ i \ A, zip(xs,upt(0,length(xs)))))" apply (erule list_append_induct) apply (simp (no_asm_simp)) apply (auto simp add: add_commute length_app filter_append map_app_distrib)