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