src/HOL/Library/List_Prefix.thy
changeset 25764 878c37886eed
parent 25692 eda4958ab0d2
child 26445 17223cf843d8
equal deleted inserted replaced
25763:474f8ba9dfa9 25764:878c37886eed
     9 imports List
     9 imports List
    10 begin
    10 begin
    11 
    11 
    12 subsection {* Prefix order on lists *}
    12 subsection {* Prefix order on lists *}
    13 
    13 
    14 instance list :: (type) ord ..
    14 instantiation list :: (type) order
    15 
    15 begin
    16 defs (overloaded)
    16 
    17   prefix_def: "xs \<le> ys == \<exists>zs. ys = xs @ zs"
    17 definition
    18   strict_prefix_def: "xs < ys == xs \<le> ys \<and> xs \<noteq> (ys::'a list)"
    18   prefix_def [code func del]: "xs \<le> ys = (\<exists>zs. ys = xs @ zs)"
    19 
    19 
    20 instance list :: (type) order
    20 definition
       
    21   strict_prefix_def [code func del]: "xs < ys = (xs \<le> ys \<and> xs \<noteq> (ys::'a list))"
       
    22 
       
    23 instance
    21   by intro_classes (auto simp add: prefix_def strict_prefix_def)
    24   by intro_classes (auto simp add: prefix_def strict_prefix_def)
       
    25 
       
    26 end
    22 
    27 
    23 lemma prefixI [intro?]: "ys = xs @ zs ==> xs \<le> ys"
    28 lemma prefixI [intro?]: "ys = xs @ zs ==> xs \<le> ys"
    24   unfolding prefix_def by blast
    29   unfolding prefix_def by blast
    25 
    30 
    26 lemma prefixE [elim?]:
    31 lemma prefixE [elim?]: