src/HOL/Library/Sublist_Order.thy
author wenzelm
Wed, 08 Mar 2017 10:50:59 +0100
changeset 65151 a7394aa4d21c
parent 63465 d7610beb98bc
child 65869 a6ed757b8585
permissions -rw-r--r--
tuned proofs;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
     1
(*  Title:      HOL/Library/Sublist_Order.thy
63465
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
     2
    Author:     Peter Lammich, Uni Muenster <peter.lammich@uni-muenster.de>
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
     3
    Author:     Florian Haftmann, , TU Muenchen
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
     4
    Author:     Tobias Nipkow, TU Muenchen
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
     5
*)
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
     6
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 58881
diff changeset
     7
section \<open>Sublist Ordering\<close>
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
     8
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
     9
theory Sublist_Order
49088
5cd8b4426a57 Main is implicitly imported via Sublist
Christian Sternagel
parents: 49085
diff changeset
    10
imports Sublist
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    11
begin
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    12
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 58881
diff changeset
    13
text \<open>
63465
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    14
  This theory defines sublist ordering on lists. A list \<open>ys\<close> is a sublist of a
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    15
  list \<open>xs\<close>, iff one obtains \<open>ys\<close> by erasing some elements from \<open>xs\<close>.
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 58881
diff changeset
    16
\<close>
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    17
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 58881
diff changeset
    18
subsection \<open>Definitions and basic lemmas\<close>
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    19
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    20
instantiation list :: (type) ord
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    21
begin
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    22
63465
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    23
definition "xs \<le> ys \<longleftrightarrow> sublisteq xs ys" for xs ys :: "'a list"
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    24
definition "xs < ys \<longleftrightarrow> xs \<le> ys \<and> \<not> ys \<le> xs" for xs ys :: "'a list"
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    25
49085
4eef5c2ff5ad introduced "sub" as abbreviation for "emb (op =)";
Christian Sternagel
parents: 49084
diff changeset
    26
instance ..
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    27
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    28
end
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    29
49085
4eef5c2ff5ad introduced "sub" as abbreviation for "emb (op =)";
Christian Sternagel
parents: 49084
diff changeset
    30
instance list :: (type) order
4eef5c2ff5ad introduced "sub" as abbreviation for "emb (op =)";
Christian Sternagel
parents: 49084
diff changeset
    31
proof
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    32
  fix xs ys zs :: "'a list"
63465
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    33
  show "xs < ys \<longleftrightarrow> xs \<le> ys \<and> \<not> ys \<le> xs"
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    34
    unfolding less_list_def ..
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    35
  show "xs \<le> xs"
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    36
    by (simp add: less_eq_list_def)
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    37
  show "xs = ys" if "xs \<le> ys" and "ys \<le> xs"
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    38
    using that unfolding less_eq_list_def by (rule sublisteq_antisym)
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    39
  show "xs \<le> zs" if "xs \<le> ys" and "ys \<le> zs"
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    40
    using that unfolding less_eq_list_def by (rule sublisteq_trans)
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    41
qed
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    42
49093
fdc301f592c4 forgot to add lemmas
Christian Sternagel
parents: 49088
diff changeset
    43
lemmas less_eq_list_induct [consumes 1, case_names empty drop take] =
57497
4106a2bc066a renamed "list_hembeq" into slightly shorter "list_emb"
Christian Sternagel
parents: 50516
diff changeset
    44
  list_emb.induct [of "op =", folded less_eq_list_def]
4106a2bc066a renamed "list_hembeq" into slightly shorter "list_emb"
Christian Sternagel
parents: 50516
diff changeset
    45
lemmas less_eq_list_drop = list_emb.list_emb_Cons [of "op =", folded less_eq_list_def]
50516
ed6b40d15d1c renamed "emb" to "list_hembeq";
Christian Sternagel
parents: 49093
diff changeset
    46
lemmas le_list_Cons2_iff [simp, code] = sublisteq_Cons2_iff [folded less_eq_list_def]
ed6b40d15d1c renamed "emb" to "list_hembeq";
Christian Sternagel
parents: 49093
diff changeset
    47
lemmas le_list_map = sublisteq_map [folded less_eq_list_def]
ed6b40d15d1c renamed "emb" to "list_hembeq";
Christian Sternagel
parents: 49093
diff changeset
    48
lemmas le_list_filter = sublisteq_filter [folded less_eq_list_def]
57497
4106a2bc066a renamed "list_hembeq" into slightly shorter "list_emb"
Christian Sternagel
parents: 50516
diff changeset
    49
lemmas le_list_length = list_emb_length [of "op =", folded less_eq_list_def]
49093
fdc301f592c4 forgot to add lemmas
Christian Sternagel
parents: 49088
diff changeset
    50
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    51
lemma less_list_length: "xs < ys \<Longrightarrow> length xs < length ys"
57497
4106a2bc066a renamed "list_hembeq" into slightly shorter "list_emb"
Christian Sternagel
parents: 50516
diff changeset
    52
  by (metis list_emb_length sublisteq_same_length le_neq_implies_less less_list_def less_eq_list_def)
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    53
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    54
lemma less_list_empty [simp]: "[] < xs \<longleftrightarrow> xs \<noteq> []"
57497
4106a2bc066a renamed "list_hembeq" into slightly shorter "list_emb"
Christian Sternagel
parents: 50516
diff changeset
    55
  by (metis less_eq_list_def list_emb_Nil order_less_le)
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    56
49085
4eef5c2ff5ad introduced "sub" as abbreviation for "emb (op =)";
Christian Sternagel
parents: 49084
diff changeset
    57
lemma less_list_below_empty [simp]: "xs < [] \<longleftrightarrow> False"
57497
4106a2bc066a renamed "list_hembeq" into slightly shorter "list_emb"
Christian Sternagel
parents: 50516
diff changeset
    58
  by (metis list_emb_Nil less_eq_list_def less_list_def)
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    59
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    60
lemma less_list_drop: "xs < ys \<Longrightarrow> xs < x # ys"
49085
4eef5c2ff5ad introduced "sub" as abbreviation for "emb (op =)";
Christian Sternagel
parents: 49084
diff changeset
    61
  by (unfold less_le less_eq_list_def) (auto)
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    62
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    63
lemma less_list_take_iff: "x # xs < x # ys \<longleftrightarrow> xs < ys"
50516
ed6b40d15d1c renamed "emb" to "list_hembeq";
Christian Sternagel
parents: 49093
diff changeset
    64
  by (metis sublisteq_Cons2_iff less_list_def less_eq_list_def)
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    65
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    66
lemma less_list_drop_many: "xs < ys \<Longrightarrow> xs < zs @ ys"
63465
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    67
  by (metis sublisteq_append_le_same_iff sublisteq_drop_many order_less_le
d7610beb98bc misc tuning and modernization;
wenzelm
parents: 61585
diff changeset
    68
      self_append_conv2 less_eq_list_def)
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    69
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    70
lemma less_list_take_many_iff: "zs @ xs < zs @ ys \<longleftrightarrow> xs < ys"
50516
ed6b40d15d1c renamed "emb" to "list_hembeq";
Christian Sternagel
parents: 49093
diff changeset
    71
  by (metis less_list_def less_eq_list_def sublisteq_append')
33431
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    72
af516ed40e72 Completely overhauled
nipkow
parents: 30738
diff changeset
    73
lemma less_list_rev_take: "xs @ zs < ys @ zs \<longleftrightarrow> xs < ys"
49085
4eef5c2ff5ad introduced "sub" as abbreviation for "emb (op =)";
Christian Sternagel
parents: 49084
diff changeset
    74
  by (unfold less_le less_eq_list_def) auto
26735
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    75
39be3c7e643a added theory Sublist_Order
haftmann
parents:
diff changeset
    76
end