src/HOL/IMP/Abs_Int2_ivl.thy
author nipkow
Sun, 24 Feb 2013 18:30:35 +0100
changeset 51261 d301ba7da9b6
parent 51245 311fe56541ea
child 51359 00b45c7e831f
permissions -rw-r--r--
improved orderings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     1
(* Author: Tobias Nipkow *)
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     2
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     3
theory Abs_Int2_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     4
imports Abs_Int2
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     5
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     6
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     7
subsection "Interval Analysis"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     8
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
     9
datatype lb = Minf | Lb int
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    10
datatype ub = Pinf | Ub int
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    11
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    12
datatype ivl = Ivl lb ub
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    13
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    14
definition "\<gamma>_ivl i = (case i of
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    15
  Ivl (Lb l) (Ub h) \<Rightarrow> {l..h} |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    16
  Ivl (Lb l) Pinf \<Rightarrow> {l..} |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    17
  Ivl Minf (Ub h) \<Rightarrow> {..h} |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    18
  Ivl Minf Pinf \<Rightarrow> UNIV)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    19
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    20
abbreviation Ivl_Lb_Ub :: "int \<Rightarrow> int \<Rightarrow> ivl"  ("{_\<dots>_}") where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    21
"{lo\<dots>hi} == Ivl (Lb lo) (Ub hi)"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    22
abbreviation Ivl_Lb_Pinf :: "int \<Rightarrow> ivl"  ("{_\<dots>}") where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    23
"{lo\<dots>} == Ivl (Lb lo) Pinf"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    24
abbreviation Ivl_Minf_Ub :: "int \<Rightarrow> ivl"  ("{\<dots>_}") where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    25
"{\<dots>hi} == Ivl Minf (Ub hi)"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    26
abbreviation Ivl_Minf_Pinf :: "ivl"  ("{\<dots>}") where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    27
"{\<dots>} == Ivl Minf Pinf"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    28
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    29
lemmas lub_splits = lb.splits ub.splits
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    30
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    31
definition "num_ivl n = {n\<dots>n}"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    32
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    33
fun in_ivl :: "int \<Rightarrow> ivl \<Rightarrow> bool" where
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    34
"in_ivl k (Ivl (Lb l) (Ub h)) \<longleftrightarrow> l \<le> k \<and> k \<le> h" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    35
"in_ivl k (Ivl (Lb l) Pinf) \<longleftrightarrow> l \<le> k" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    36
"in_ivl k (Ivl Minf (Ub h)) \<longleftrightarrow> k \<le> h" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    37
"in_ivl k (Ivl Minf Pinf) \<longleftrightarrow> True"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    38
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    39
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    40
instantiation lb :: linorder
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    41
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    42
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    43
definition less_eq_lb where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    44
"l1 \<le> l2 = (case l1 of Minf \<Rightarrow> True | Lb i1 \<Rightarrow> (case l2 of Minf \<Rightarrow> False | Lb i2 \<Rightarrow> i1 \<le> i2))"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    45
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    46
definition less_lb :: "lb \<Rightarrow> lb \<Rightarrow> bool" where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    47
"((l1::lb) < l2) = (l1 \<le> l2 & ~ l1 \<ge> l2)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    48
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    49
instance
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    50
proof
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    51
  case goal1 show ?case by(rule less_lb_def)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    52
next
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    53
  case goal2 show ?case by(auto simp: less_eq_lb_def split:lub_splits)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    54
next
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    55
  case goal3 thus ?case by(auto simp: less_eq_lb_def split:lub_splits)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    56
next
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    57
  case goal4 thus ?case by(auto simp: less_eq_lb_def split:lub_splits)
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    58
next
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    59
  case goal5 thus ?case by(auto simp: less_eq_lb_def split:lub_splits)
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    60
qed
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    61
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    62
end
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    63
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    64
instantiation ub :: linorder
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    65
begin
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    66
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    67
definition less_eq_ub where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    68
"u1 \<le> u2 = (case u2 of Pinf \<Rightarrow> True | Ub i2 \<Rightarrow> (case u1 of Pinf \<Rightarrow> False | Ub i1 \<Rightarrow> i1 \<le> i2))"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    69
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    70
definition less_ub :: "ub \<Rightarrow> ub \<Rightarrow> bool" where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    71
"((u1::ub) < u2) = (u1 \<le> u2 & ~ u1 \<ge> u2)"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    72
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    73
instance
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    74
proof
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    75
  case goal1 show ?case by(rule less_ub_def)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    76
next
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    77
  case goal2 show ?case by(auto simp: less_eq_ub_def split:lub_splits)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    78
next
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    79
  case goal3 thus ?case by(auto simp: less_eq_ub_def split:lub_splits)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    80
next
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    81
  case goal4 thus ?case by(auto simp: less_eq_ub_def split:lub_splits)
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    82
next
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    83
  case goal5 thus ?case by(auto simp: less_eq_ub_def split:lub_splits)
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    84
qed
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    85
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    86
end
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    87
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    88
lemmas le_lub_defs = less_eq_lb_def less_eq_ub_def
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
    89
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    90
lemma le_lub_simps[simp]:
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    91
  "Minf \<le> l" "Lb i \<le> Lb j = (i \<le> j)" "~ Lb i \<le> Minf"
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    92
  "h \<le> Pinf" "Ub i \<le> Ub j = (i \<le> j)" "~ Pinf \<le> Ub j"
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    93
by(auto simp: le_lub_defs split: lub_splits)
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
    94
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    95
definition empty where "empty = {1\<dots>0}"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    96
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    97
fun is_empty where
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    98
"is_empty {l\<dots>h} = (h<l)" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    99
"is_empty _ = False"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   100
49579
nipkow
parents: 49399
diff changeset
   101
lemma [simp]: "is_empty(Ivl l h) =
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   102
  (case l of Lb l \<Rightarrow> (case h of Ub h \<Rightarrow> h<l | Pinf \<Rightarrow> False) | Minf \<Rightarrow> False)"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   103
by(auto split: lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   104
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   105
lemma [simp]: "is_empty i \<Longrightarrow> \<gamma>_ivl i = {}"
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   106
by(auto simp add: \<gamma>_ivl_def split: ivl.split lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   107
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   108
49396
73fb17ed2e08 converted wt into a set, tuned names
nipkow
parents: 49188
diff changeset
   109
instantiation ivl :: semilattice
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   110
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   111
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   112
fun le_aux where
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   113
"le_aux (Ivl l1 h1) (Ivl l2 h2) = (l2 \<le> l1 & h1 \<le> h2)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   114
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   115
definition le_ivl where
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   116
"i1 \<sqsubseteq> i2 =
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   117
 (if is_empty i1 then True else
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   118
  if is_empty i2 then False else le_aux i1 i2)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   119
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   120
definition "i1 \<squnion> i2 =
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   121
 (if is_empty i1 then i2 else if is_empty i2 then i1
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   122
  else case (i1,i2) of (Ivl l1 h1, Ivl l2 h2) \<Rightarrow> Ivl (min l1 l2) (max h1 h2))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   123
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   124
definition "\<top> = {\<dots>}"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   125
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   126
instance
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   127
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   128
  case goal1 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   129
    by(cases x, simp add: le_ivl_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   130
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   131
  case goal2 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   132
    by(cases x, cases y, cases z, auto simp: le_ivl_def split: if_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   133
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   134
  case goal3 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   135
    by(cases x, cases y, simp add: le_ivl_def join_ivl_def le_lub_defs min_def max_def split: lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   136
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   137
  case goal4 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   138
    by(cases x, cases y, simp add: le_ivl_def join_ivl_def le_lub_defs min_def max_def split: lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   139
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   140
  case goal5 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   141
    by(cases x, cases y, cases z, auto simp add: le_ivl_def join_ivl_def le_lub_defs min_def max_def split: lub_splits if_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   142
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   143
  case goal6 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   144
    by(cases x, simp add: Top_ivl_def le_ivl_def le_lub_defs split: lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   145
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   146
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   147
end
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   148
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   149
49396
73fb17ed2e08 converted wt into a set, tuned names
nipkow
parents: 49188
diff changeset
   150
instantiation ivl :: lattice
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   151
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   152
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   153
definition "i1 \<sqinter> i2 = (if is_empty i1 \<or> is_empty i2 then empty else
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   154
  case (i1,i2) of (Ivl l1 h1, Ivl l2 h2) \<Rightarrow> Ivl (max l1 l2) (min h1 h2))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   155
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   156
definition "\<bottom> = empty"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   157
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   158
instance
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   159
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   160
  case goal2 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   161
    by (simp add:meet_ivl_def empty_def le_ivl_def le_lub_defs max_def min_def split: ivl.splits lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   162
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   163
  case goal3 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   164
    by (simp add: empty_def meet_ivl_def le_ivl_def le_lub_defs max_def min_def split: ivl.splits lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   165
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   166
  case goal4 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   167
    by (cases x, cases y, cases z, auto simp add: le_ivl_def meet_ivl_def empty_def le_lub_defs max_def min_def split: lub_splits if_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   168
next
49396
73fb17ed2e08 converted wt into a set, tuned names
nipkow
parents: 49188
diff changeset
   169
  case goal1 show ?case by(cases x, simp add: bot_ivl_def empty_def le_ivl_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   170
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   171
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   172
end
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   173
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   174
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   175
instantiation lb :: plus
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   176
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   177
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   178
fun plus_lb where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   179
"Lb x + Lb y = Lb(x+y)" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   180
"_ + _ = Minf"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   181
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   182
instance ..
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   183
end
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   184
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   185
instantiation ub :: plus
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   186
begin
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   187
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   188
fun plus_ub where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   189
"Ub x + Ub y = Ub(x+y)" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   190
"_ + _ = Pinf"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   191
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   192
instance ..
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   193
end
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   194
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   195
instantiation ivl :: plus
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   196
begin
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   197
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   198
definition "i1+i2 = (if is_empty i1 | is_empty i2 then empty else
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   199
  case (i1,i2) of (Ivl l1 h1, Ivl l2 h2) \<Rightarrow> Ivl (l1+l2) (h1+h2))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   200
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   201
instance ..
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   202
end
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   203
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   204
fun uminus_ub :: "ub \<Rightarrow> lb" where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   205
"uminus_ub(Ub( x)) = Lb(-x)" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   206
"uminus_ub Pinf = Minf"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   207
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   208
fun uminus_lb :: "lb \<Rightarrow> ub" where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   209
"uminus_lb(Lb( x)) = Ub(-x)" |
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   210
"uminus_lb Minf = Pinf"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   211
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   212
instantiation ivl :: uminus
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   213
begin
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   214
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   215
fun uminus_ivl where
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   216
"-(Ivl l h) = Ivl (uminus_ub h) (uminus_lb l)"
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   217
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   218
instance ..
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   219
end
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   220
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   221
instantiation ivl :: minus
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   222
begin
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   223
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   224
definition minus_ivl :: "ivl \<Rightarrow> ivl \<Rightarrow> ivl" where
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   225
"(i1::ivl) - i2 = i1 + -i2"
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   226
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   227
instance ..
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   228
end
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   229
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   230
lemma minus_ivl_cases: "i1 - i2 = (if is_empty i1 | is_empty i2 then empty else
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   231
  case (i1,i2) of (Ivl l1 h1, Ivl l2 h2) \<Rightarrow> Ivl (l1 + uminus_ub h2) (h1 + uminus_lb l2))"
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   232
by(auto simp: plus_ivl_def minus_ivl_def split: ivl.split lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   233
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   234
lemma gamma_minus_ivl:
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   235
  "n1 : \<gamma>_ivl i1 \<Longrightarrow> n2 : \<gamma>_ivl i2 \<Longrightarrow> n1-n2 : \<gamma>_ivl(i1 - i2)"
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   236
by(auto simp add: minus_ivl_def plus_ivl_def \<gamma>_ivl_def split: ivl.splits lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   237
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   238
definition "filter_plus_ivl i i1 i2 = ((*if is_empty i then empty else*)
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   239
  i1 \<sqinter> (i - i2), i2 \<sqinter> (i - i1))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   240
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   241
fun filter_less_ivl :: "bool \<Rightarrow> ivl \<Rightarrow> ivl \<Rightarrow> ivl * ivl" where
49579
nipkow
parents: 49399
diff changeset
   242
"filter_less_ivl res (Ivl l1 h1) (Ivl l2 h2) =
nipkow
parents: 49399
diff changeset
   243
  (if is_empty(Ivl l1 h1) \<or> is_empty(Ivl l2 h2) then (empty, empty) else
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   244
   if res
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   245
   then (Ivl l1 (min h1 (h2 + Ub -1)), Ivl (max (l1 + Lb 1) l2) h2)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   246
   else (Ivl (max l1 l2) h1, Ivl l2 (min h1 h2)))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   247
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   248
interpretation Val_abs
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   249
where \<gamma> = \<gamma>_ivl and num' = num_ivl and plus' = "op +"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   250
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   251
  case goal1 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   252
    by(auto simp: \<gamma>_ivl_def le_ivl_def le_lub_defs split: ivl.split lub_splits if_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   253
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   254
  case goal2 show ?case by(simp add: \<gamma>_ivl_def Top_ivl_def)
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   255
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   256
  case goal3 thus ?case by(simp add: \<gamma>_ivl_def num_ivl_def)
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   257
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   258
  case goal4 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   259
    by(auto simp add: \<gamma>_ivl_def plus_ivl_def split: ivl.split lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   260
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   261
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   262
interpretation Val_abs1_gamma
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   263
where \<gamma> = \<gamma>_ivl and num' = num_ivl and plus' = "op +"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   264
defines aval_ivl is aval'
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   265
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   266
  case goal1 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   267
    by(auto simp add: \<gamma>_ivl_def meet_ivl_def empty_def min_def max_def split: ivl.split lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   268
next
49396
73fb17ed2e08 converted wt into a set, tuned names
nipkow
parents: 49188
diff changeset
   269
  case goal2 show ?case by(auto simp add: bot_ivl_def \<gamma>_ivl_def empty_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   270
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   271
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   272
lemma mono_minus_ivl: fixes i1 :: ivl
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   273
shows "i1 \<sqsubseteq> i1' \<Longrightarrow> i2 \<sqsubseteq> i2' \<Longrightarrow> i1 - i2 \<sqsubseteq> i1' - i2'"
51261
d301ba7da9b6 improved orderings
nipkow
parents: 51245
diff changeset
   274
apply(auto simp add: minus_ivl_cases empty_def le_ivl_def le_lub_defs split: ivl.splits)
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   275
  apply(simp split: lub_splits)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   276
 apply(simp split: lub_splits)
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   277
apply(simp split: lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   278
done
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   279
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   280
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   281
interpretation Val_abs1
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   282
where \<gamma> = \<gamma>_ivl and num' = num_ivl and plus' = "op +"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   283
and test_num' = in_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   284
and filter_plus' = filter_plus_ivl and filter_less' = filter_less_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   285
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   286
  case goal1 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   287
    by (simp add: \<gamma>_ivl_def split: ivl.split lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   288
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   289
  case goal2 thus ?case
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   290
    by(auto simp add: filter_plus_ivl_def)
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   291
      (metis gamma_minus_ivl add_diff_cancel add_commute)+
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   292
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   293
  case goal3 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   294
    by(cases a1, cases a2, auto simp: \<gamma>_ivl_def min_def max_def split: if_splits lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   295
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   296
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   297
interpretation Abs_Int1
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   298
where \<gamma> = \<gamma>_ivl and num' = num_ivl and plus' = "op +"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   299
and test_num' = in_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   300
and filter_plus' = filter_plus_ivl and filter_less' = filter_less_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   301
defines afilter_ivl is afilter
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   302
and bfilter_ivl is bfilter
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   303
and step_ivl is step'
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   304
and AI_ivl is AI
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   305
and aval_ivl' is aval''
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   306
..
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   307
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   308
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   309
text{* Monotonicity: *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   310
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   311
interpretation Abs_Int1_mono
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   312
where \<gamma> = \<gamma>_ivl and num' = num_ivl and plus' = "op +"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   313
and test_num' = in_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   314
and filter_plus' = filter_plus_ivl and filter_less' = filter_less_ivl
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   315
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   316
  case goal1 thus ?case
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   317
    by(auto simp: plus_ivl_def le_ivl_def le_lub_defs empty_def split: if_splits ivl.splits lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   318
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   319
  case goal2 thus ?case
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   320
    by(auto simp: filter_plus_ivl_def le_prod_def mono_meet mono_minus_ivl)
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   321
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   322
  case goal3 thus ?case
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   323
    apply(cases a1, cases b1, cases a2, cases b2, auto simp: le_prod_def)
51245
311fe56541ea more abstract intervals
nipkow
parents: 51036
diff changeset
   324
    by(auto simp add: empty_def le_ivl_def le_lub_defs min_def max_def split: lub_splits)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   325
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   326
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   327
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   328
subsubsection "Tests"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   329
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   330
value "show_acom_opt (AI_ivl test1_ivl)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   331
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   332
text{* Better than @{text AI_const}: *}
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   333
value "show_acom_opt (AI_ivl test3_const)"
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   334
value "show_acom_opt (AI_ivl test4_const)"
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   335
value "show_acom_opt (AI_ivl test6_const)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   336
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   337
definition "steps c i = (step_ivl(top(vars c)) ^^ i) (bot c)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   338
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   339
value "show_acom_opt (AI_ivl test2_ivl)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   340
value "show_acom (steps test2_ivl 0)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   341
value "show_acom (steps test2_ivl 1)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   342
value "show_acom (steps test2_ivl 2)"
49188
22f7e7b68f50 adjusted examples
nipkow
parents: 47613
diff changeset
   343
value "show_acom (steps test2_ivl 3)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   344
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   345
text{* Fixed point reached in 2 steps.
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   346
 Not so if the start value of x is known: *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   347
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   348
value "show_acom_opt (AI_ivl test3_ivl)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   349
value "show_acom (steps test3_ivl 0)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   350
value "show_acom (steps test3_ivl 1)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   351
value "show_acom (steps test3_ivl 2)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   352
value "show_acom (steps test3_ivl 3)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   353
value "show_acom (steps test3_ivl 4)"
49188
22f7e7b68f50 adjusted examples
nipkow
parents: 47613
diff changeset
   354
value "show_acom (steps test3_ivl 5)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   355
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   356
text{* Takes as many iterations as the actual execution. Would diverge if
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   357
loop did not terminate. Worse still, as the following example shows: even if
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   358
the actual execution terminates, the analysis may not. The value of y keeps
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   359
decreasing as the analysis is iterated, no matter how long: *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   360
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   361
value "show_acom (steps test4_ivl 50)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   362
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   363
text{* Relationships between variables are NOT captured: *}
51036
e7b54119c436 tuned top
nipkow
parents: 50995
diff changeset
   364
value "show_acom_opt (AI_ivl test5_ivl)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   365
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   366
text{* Again, the analysis would not terminate: *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   367
value "show_acom (steps test6_ivl 50)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   368
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   369
end