diff -r 6c52b1d71f8b -r d8fb621fea02 src/HOL/List.thy --- a/src/HOL/List.thy Mon Feb 10 23:04:45 2020 +0100 +++ b/src/HOL/List.thy Tue Feb 11 12:55:35 2020 +0000 @@ -6031,7 +6031,7 @@ done text\By Mathias Fleury:\ -lemma lexn_transI: +proposition lexn_transI: assumes "trans r" shows "trans (lexn r n)" unfolding trans_def proof (intro allI impI) @@ -6096,6 +6096,11 @@ qed qed +corollary lex_transI: + assumes "trans r" shows "trans (lex r)" + using lexn_transI [OF assms] + by (clarsimp simp add: lex_def trans_def) (metis lexn_length) + lemma lex_conv: "lex r = {(xs,ys). length xs = length ys \ @@ -6128,6 +6133,10 @@ by (fastforce simp: lenlex_def total_on_def lex_def) qed +lemma lenlex_transI [intro]: "trans r \ trans (lenlex r)" + unfolding lenlex_def + by (meson lex_transI trans_inv_image trans_less_than trans_lex_prod) + lemma Nil_notin_lex [iff]: "([], ys) \ lex r" by (simp add: lex_conv) @@ -6142,6 +6151,20 @@ prefer 2 apply (blast intro: Cons_eq_appendI, clarify) by (metis hd_append append_Nil list.sel(1) list.sel(3) tl_append2) +lemma Nil_lenlex_iff1 [simp]: "([], ns) \ lenlex r \ ns \ []" + and Nil_lenlex_iff2 [simp]: "(ns,[]) \ lenlex r" + by (auto simp: lenlex_def) + +lemma Cons_lenlex_iff: + "((m # ms, n # ns) \ lenlex r) \ + length ms < length ns + \ length ms = length ns \ (m,n) \ r + \ (m = n \ (ms,ns) \ lenlex r)" + by (auto simp: lenlex_def) + +lemma lenlex_length: "(ms, ns) \ lenlex r \ length ms \ length ns" + by (auto simp: lenlex_def) + lemma lex_append_rightI: "(xs, ys) \ lex r \ length vs = length us \ (xs @ us, ys @ vs) \ lex r" by (fastforce simp: lex_def lexn_conv)