src/HOL/List.thy
changeset 30198 922f944f03b2
parent 30128 365ee7319b86
child 30242 aea5d7fa7ef5
equal deleted inserted replaced
30193:391e10b42889 30198:922f944f03b2
  3224 by (unfold lenlex_def) blast
  3224 by (unfold lenlex_def) blast
  3225 
  3225 
  3226 lemma lenlex_conv:
  3226 lemma lenlex_conv:
  3227     "lenlex r = {(xs,ys). length xs < length ys |
  3227     "lenlex r = {(xs,ys). length xs < length ys |
  3228                  length xs = length ys \<and> (xs, ys) : lex r}"
  3228                  length xs = length ys \<and> (xs, ys) : lex r}"
  3229 by (simp add: lenlex_def diag_def lex_prod_def inv_image_def)
  3229 by (simp add: lenlex_def Id_on_def lex_prod_def inv_image_def)
  3230 
  3230 
  3231 lemma Nil_notin_lex [iff]: "([], ys) \<notin> lex r"
  3231 lemma Nil_notin_lex [iff]: "([], ys) \<notin> lex r"
  3232 by (simp add: lex_conv)
  3232 by (simp add: lex_conv)
  3233 
  3233 
  3234 lemma Nil2_notin_lex [iff]: "(xs, []) \<notin> lex r"
  3234 lemma Nil2_notin_lex [iff]: "(xs, []) \<notin> lex r"
  3390 lemma listrel_subset: "r \<subseteq> A \<times> A \<Longrightarrow> listrel r \<subseteq> lists A \<times> lists A"
  3390 lemma listrel_subset: "r \<subseteq> A \<times> A \<Longrightarrow> listrel r \<subseteq> lists A \<times> lists A"
  3391 apply clarify 
  3391 apply clarify 
  3392 apply (erule listrel.induct, auto) 
  3392 apply (erule listrel.induct, auto) 
  3393 done
  3393 done
  3394 
  3394 
  3395 lemma listrel_refl: "refl A r \<Longrightarrow> refl (lists A) (listrel r)" 
  3395 lemma listrel_refl_on: "refl_on A r \<Longrightarrow> refl_on (lists A) (listrel r)" 
  3396 apply (simp add: refl_def listrel_subset Ball_def)
  3396 apply (simp add: refl_on_def listrel_subset Ball_def)
  3397 apply (rule allI) 
  3397 apply (rule allI) 
  3398 apply (induct_tac x) 
  3398 apply (induct_tac x) 
  3399 apply (auto intro: listrel.intros)
  3399 apply (auto intro: listrel.intros)
  3400 done
  3400 done
  3401 
  3401 
  3412 apply (erule listrel.induct) 
  3412 apply (erule listrel.induct) 
  3413 apply (blast intro: listrel.intros)+
  3413 apply (blast intro: listrel.intros)+
  3414 done
  3414 done
  3415 
  3415 
  3416 theorem equiv_listrel: "equiv A r \<Longrightarrow> equiv (lists A) (listrel r)"
  3416 theorem equiv_listrel: "equiv A r \<Longrightarrow> equiv (lists A) (listrel r)"
  3417 by (simp add: equiv_def listrel_refl listrel_sym listrel_trans) 
  3417 by (simp add: equiv_def listrel_refl_on listrel_sym listrel_trans) 
  3418 
  3418 
  3419 lemma listrel_Nil [simp]: "listrel r `` {[]} = {[]}"
  3419 lemma listrel_Nil [simp]: "listrel r `` {[]} = {[]}"
  3420 by (blast intro: listrel.intros)
  3420 by (blast intro: listrel.intros)
  3421 
  3421 
  3422 lemma listrel_Cons:
  3422 lemma listrel_Cons: