src/HOL/SetInterval.ML
author nipkow
Mon, 30 Sep 2002 15:44:21 +0200
changeset 13596 ee5f79b210c1
parent 9310 ab706fdb0842
child 13735 7de9342aca7a
permissions -rw-r--r--
modified induct method
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8956
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     1
(*  Title:      HOL/SetInterval.ML
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     2
    ID:         $Id$
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     3
    Author:     Tobias Nipkow
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     4
    Copyright   2000  TU Muenchen
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     5
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     6
Set Intervals: lessThan, greaterThan, atLeast, atMost
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     7
*)
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     8
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
     9
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    10
(*** lessThan ***)
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    11
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    12
Goalw [lessThan_def] "(i: lessThan k) = (i<k)";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    13
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    14
qed "lessThan_iff";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    15
AddIffs [lessThan_iff];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    16
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    17
Goalw [lessThan_def] "lessThan (0::nat) = {}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    18
by (Simp_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    19
qed "lessThan_0";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    20
Addsimps [lessThan_0];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    21
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    22
Goalw [lessThan_def] "lessThan (Suc k) = insert k (lessThan k)";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    23
by (simp_tac (simpset() addsimps [less_Suc_eq]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    24
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    25
qed "lessThan_Suc";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    26
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    27
Goalw [lessThan_def, atMost_def] "lessThan (Suc k) = atMost k";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    28
by (simp_tac (simpset() addsimps [less_Suc_eq_le]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    29
qed "lessThan_Suc_atMost";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    30
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    31
Goal "(UN m::nat. lessThan m) = UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    32
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    33
qed "UN_lessThan_UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    34
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    35
Goalw [lessThan_def, atLeast_def]
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    36
    "!!k:: 'a::linorder. -lessThan k = atLeast k";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    37
by Auto_tac;
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    38
by (blast_tac (claset() addIs [linorder_not_less RS iffD1]) 1);
13596
ee5f79b210c1 modified induct method
nipkow
parents: 9310
diff changeset
    39
by (blast_tac (claset() addDs [order_le_less_trans]) 1);
8956
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    40
qed "Compl_lessThan";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    41
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    42
Goal "!!k:: 'a::order. {k} - lessThan k = {k}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    43
by Auto_tac;
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    44
qed "single_Diff_lessThan";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    45
Addsimps [single_Diff_lessThan];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    46
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    47
(*** greaterThan ***)
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    48
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    49
Goalw [greaterThan_def] "(i: greaterThan k) = (k<i)";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    50
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    51
qed "greaterThan_iff";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    52
AddIffs [greaterThan_iff];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    53
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    54
Goalw [greaterThan_def] "greaterThan 0 = range Suc";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    55
by (blast_tac (claset() addDs [gr0_conv_Suc RS iffD1]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    56
qed "greaterThan_0";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    57
Addsimps [greaterThan_0];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    58
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    59
Goalw [greaterThan_def] "greaterThan (Suc k) = greaterThan k - {Suc k}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    60
by (auto_tac (claset() addEs [linorder_neqE], simpset()));
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    61
qed "greaterThan_Suc";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    62
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    63
Goal "(INT m::nat. greaterThan m) = {}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    64
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    65
qed "INT_greaterThan_UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    66
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    67
Goalw [greaterThan_def, atMost_def, le_def]
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    68
    "!!k:: 'a::linorder. -greaterThan k = atMost k";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    69
by Auto_tac;
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    70
by (blast_tac (claset() addIs [linorder_not_less RS iffD1]) 1);
13596
ee5f79b210c1 modified induct method
nipkow
parents: 9310
diff changeset
    71
by (blast_tac (claset() addDs [order_le_less_trans]) 1);
8956
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    72
qed "Compl_greaterThan";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    73
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    74
Goal "!!k:: 'a::linorder. -atMost k = greaterThan k";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    75
by (simp_tac (simpset() addsimps [Compl_greaterThan RS sym]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    76
qed "Compl_atMost";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    77
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    78
Addsimps [Compl_greaterThan, Compl_atMost];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    79
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    80
(*** atLeast ***)
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    81
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    82
Goalw [atLeast_def] "(i: atLeast k) = (k<=i)";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    83
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    84
qed "atLeast_iff";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    85
AddIffs [atLeast_iff];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    86
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    87
Goalw [atLeast_def, UNIV_def] "atLeast (0::nat) = UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    88
by (Simp_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    89
qed "atLeast_0";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    90
Addsimps [atLeast_0];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    91
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    92
Goalw [atLeast_def] "atLeast (Suc k) = atLeast k - {k}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    93
by (simp_tac (simpset() addsimps [Suc_le_eq]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    94
by (simp_tac (simpset() addsimps [order_le_less]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    95
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    96
qed "atLeast_Suc";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    97
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    98
Goal "(UN m::nat. atLeast m) = UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
    99
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   100
qed "UN_atLeast_UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   101
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   102
Goalw [lessThan_def, atLeast_def, le_def]
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   103
    "!!k:: 'a::linorder. -atLeast k = lessThan k";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   104
by Auto_tac;
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   105
by (blast_tac (claset() addIs [linorder_not_less RS iffD1]) 1);
13596
ee5f79b210c1 modified induct method
nipkow
parents: 9310
diff changeset
   106
by (blast_tac (claset() addDs [order_le_less_trans]) 1);
8956
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   107
qed "Compl_atLeast";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   108
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   109
Addsimps [Compl_lessThan, Compl_atLeast];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   110
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   111
(*** atMost ***)
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   112
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   113
Goalw [atMost_def] "(i: atMost k) = (i<=k)";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   114
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   115
qed "atMost_iff";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   116
AddIffs [atMost_iff];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   117
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   118
Goalw [atMost_def] "atMost (0::nat) = {0}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   119
by (Simp_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   120
qed "atMost_0";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   121
Addsimps [atMost_0];
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   122
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   123
Goalw [atMost_def] "atMost (Suc k) = insert (Suc k) (atMost k)";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   124
by (simp_tac (simpset() addsimps [less_Suc_eq, order_le_less]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   125
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   126
qed "atMost_Suc";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   127
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   128
Goal "(UN m::nat. atMost m) = UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   129
by (Blast_tac 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   130
qed "UN_atMost_UNIV";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   131
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   132
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   133
(*** Combined properties ***)
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   134
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   135
Goal "!!n:: 'a::order. atMost n Int atLeast n = {n}";
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   136
by (blast_tac (claset() addIs [order_antisym]) 1);
a7c3538fc2d2 facts about lessThan, etc., mostly from UNITY/LessThan
paulson
parents:
diff changeset
   137
qed "atMost_Int_atLeast";