src/HOL/Library/Extended.thy
author nipkow
Wed, 13 Feb 2019 07:48:42 +0100
changeset 69801 a99a0f5474c5
parent 67091 1393c2340eec
permissions -rw-r--r--
too agressive
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     1
(*  Author:     Tobias Nipkow, TU München
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     2
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     3
A theory of types extended with a greatest and a least element.
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     4
Oriented towards numeric types, hence "\<infinity>" and "-\<infinity>".
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     5
*)
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     6
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     7
theory Extended
65366
10ca63a18e56 proper imports;
wenzelm
parents: 60500
diff changeset
     8
  imports Simps_Case_Conv
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
     9
begin
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    10
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    11
datatype 'a extended = Fin 'a | Pinf ("\<infinity>") | Minf ("-\<infinity>")
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    12
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    13
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    14
instantiation extended :: (order)order
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    15
begin
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    16
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    17
fun less_eq_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> bool" where
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    18
"Fin x \<le> Fin y = (x \<le> y)" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    19
"_     \<le> Pinf  = True" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    20
"Minf  \<le> _     = True" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    21
"(_::'a extended) \<le> _     = False"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    22
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
    23
case_of_simps less_eq_extended_case: less_eq_extended.simps
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    24
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    25
definition less_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> bool" where
67091
1393c2340eec more symbols;
wenzelm
parents: 65366
diff changeset
    26
"((x::'a extended) < y) = (x \<le> y \<and> \<not> y \<le> x)"
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    27
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    28
instance
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
    29
  by intro_classes (auto simp: less_extended_def less_eq_extended_case split: extended.splits)
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    30
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    31
end
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    32
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    33
instance extended :: (linorder)linorder
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
    34
  by intro_classes (auto simp: less_eq_extended_case split:extended.splits)
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    35
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    36
lemma Minf_le[simp]: "Minf \<le> y"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    37
by(cases y) auto
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    38
lemma le_Pinf[simp]: "x \<le> Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    39
by(cases x) auto
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    40
lemma le_Minf[simp]: "x \<le> Minf \<longleftrightarrow> x = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    41
by(cases x) auto
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    42
lemma Pinf_le[simp]: "Pinf \<le> x \<longleftrightarrow> x = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    43
by(cases x) auto
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    44
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    45
lemma less_extended_simps[simp]:
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    46
  "Fin x < Fin y = (x < y)"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    47
  "Fin x < Pinf  = True"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    48
  "Fin x < Minf  = False"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    49
  "Pinf < h      = False"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    50
  "Minf < Fin x  = True"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    51
  "Minf < Pinf   = True"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    52
  "l    < Minf   = False"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    53
by (auto simp add: less_extended_def)
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    54
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    55
lemma min_extended_simps[simp]:
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    56
  "min (Fin x) (Fin y) = Fin(min x y)"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    57
  "min xx      Pinf    = xx"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    58
  "min xx      Minf    = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    59
  "min Pinf    yy      = yy"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    60
  "min Minf    yy      = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    61
by (auto simp add: min_def)
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    62
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    63
lemma max_extended_simps[simp]:
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    64
  "max (Fin x) (Fin y) = Fin(max x y)"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    65
  "max xx      Pinf    = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    66
  "max xx      Minf    = xx"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    67
  "max Pinf    yy      = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    68
  "max Minf    yy      = yy"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    69
by (auto simp add: max_def)
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    70
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    71
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    72
instantiation extended :: (zero)zero
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    73
begin
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    74
definition "0 = Fin(0::'a)"
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    75
instance ..
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    76
end
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    77
55124
ffabc0a5853e hide extended.Fin in code generator output
hoelzl
parents: 54489
diff changeset
    78
declare zero_extended_def[symmetric, code_post]
ffabc0a5853e hide extended.Fin in code generator output
hoelzl
parents: 54489
diff changeset
    79
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    80
instantiation extended :: (one)one
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    81
begin
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    82
definition "1 = Fin(1::'a)"
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    83
instance ..
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    84
end
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
    85
55124
ffabc0a5853e hide extended.Fin in code generator output
hoelzl
parents: 54489
diff changeset
    86
declare one_extended_def[symmetric, code_post]
ffabc0a5853e hide extended.Fin in code generator output
hoelzl
parents: 54489
diff changeset
    87
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    88
instantiation extended :: (plus)plus
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    89
begin
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    90
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 60343
diff changeset
    91
text \<open>The following definition of of addition is totalized
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 60343
diff changeset
    92
to make it asociative and commutative. Normally the sum of plus and minus infinity is undefined.\<close>
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    93
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    94
fun plus_extended where
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    95
"Fin x + Fin y = Fin(x+y)" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    96
"Fin x + Pinf  = Pinf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    97
"Pinf  + Fin x = Pinf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    98
"Pinf  + Pinf  = Pinf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
    99
"Minf  + Fin y = Minf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   100
"Fin x + Minf  = Minf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   101
"Minf  + Minf  = Minf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   102
"Minf  + Pinf  = Pinf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   103
"Pinf  + Minf  = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   104
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   105
case_of_simps plus_case: plus_extended.simps
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   106
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   107
instance ..
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   108
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   109
end
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   110
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   111
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   112
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   113
instance extended :: (ab_semigroup_add)ab_semigroup_add
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   114
  by intro_classes (simp_all add: ac_simps plus_case split: extended.splits)
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   115
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   116
instance extended :: (ordered_ab_semigroup_add)ordered_ab_semigroup_add
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   117
  by intro_classes (auto simp: add_left_mono plus_case split: extended.splits)
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   118
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   119
instance extended :: (comm_monoid_add)comm_monoid_add
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   120
proof
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   121
  fix x :: "'a extended" show "0 + x = x" unfolding zero_extended_def by(cases x)auto
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   122
qed
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   123
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   124
instantiation extended :: (uminus)uminus
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   125
begin
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   126
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   127
fun uminus_extended where
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   128
"- (Fin x) = Fin (- x)" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   129
"- Pinf    = Minf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   130
"- Minf    = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   131
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   132
instance ..
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   133
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   134
end
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   135
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   136
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   137
instantiation extended :: (ab_group_add)minus
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   138
begin
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   139
definition "x - y = x + -(y::'a extended)"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   140
instance ..
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   141
end
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   142
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   143
lemma minus_extended_simps[simp]:
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   144
  "Fin x - Fin y = Fin(x - y)"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   145
  "Fin x - Pinf  = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   146
  "Fin x - Minf  = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   147
  "Pinf  - Fin y = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   148
  "Pinf  - Minf  = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   149
  "Minf  - Fin y = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   150
  "Minf  - Pinf  = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   151
  "Minf  - Minf  = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   152
  "Pinf  - Pinf  = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   153
by (simp_all add: minus_extended_def)
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   154
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   155
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 60343
diff changeset
   156
text\<open>Numerals:\<close>
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   157
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   158
instance extended :: ("{ab_semigroup_add,one}")numeral ..
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   159
55124
ffabc0a5853e hide extended.Fin in code generator output
hoelzl
parents: 54489
diff changeset
   160
lemma Fin_numeral[code_post]: "Fin(numeral w) = numeral w"
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   161
  apply (induct w rule: num_induct)
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   162
  apply (simp only: numeral_One one_extended_def)
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   163
  apply (simp only: numeral_inc one_extended_def plus_extended.simps(1)[symmetric])
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   164
  done
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   165
55124
ffabc0a5853e hide extended.Fin in code generator output
hoelzl
parents: 54489
diff changeset
   166
lemma Fin_neg_numeral[code_post]: "Fin (- numeral w) = - numeral w"
54489
03ff4d1e6784 eliminiated neg_numeral in favour of - (numeral _)
haftmann
parents: 53427
diff changeset
   167
by (simp only: Fin_numeral uminus_extended.simps[symmetric])
51358
0c376ef98559 added lemma
nipkow
parents: 51357
diff changeset
   168
51357
ac4c1cf1b001 extended numerals
nipkow
parents: 51338
diff changeset
   169
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   170
instantiation extended :: (lattice)bounded_lattice
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   171
begin
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   172
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   173
definition "bot = Minf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   174
definition "top = Pinf"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   175
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   176
fun inf_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> 'a extended" where
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   177
"inf_extended (Fin i) (Fin j) = Fin (inf i j)" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   178
"inf_extended a Minf = Minf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   179
"inf_extended Minf a = Minf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   180
"inf_extended Pinf a = a" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   181
"inf_extended a Pinf = a"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   182
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   183
fun sup_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> 'a extended" where
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   184
"sup_extended (Fin i) (Fin j) = Fin (sup i j)" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   185
"sup_extended a Pinf = Pinf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   186
"sup_extended Pinf a = Pinf" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   187
"sup_extended Minf a = a" |
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   188
"sup_extended a Minf = a"
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   189
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   190
case_of_simps inf_extended_case: inf_extended.simps
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   191
case_of_simps sup_extended_case: sup_extended.simps
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   192
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   193
instance
53427
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   194
  by (intro_classes) (auto simp: inf_extended_case sup_extended_case less_eq_extended_case
415354b68f0c use case_of_simps
noschinl
parents: 51358
diff changeset
   195
    bot_extended_def top_extended_def split: extended.splits)
51338
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   196
end
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   197
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   198
end
054d1653950f New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff changeset
   199