equal
deleted
inserted
replaced
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: |