src/HOL/IMP/Abs_Int1_parity.thy
author nipkow
Tue, 30 Apr 2013 03:18:07 +0200
changeset 51826 054a40461449
parent 51711 df3426139651
child 52046 bc01725d7918
permissions -rw-r--r--
canonical names of classes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
     1
(* Author: Tobias Nipkow *)
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
     2
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     3
theory Abs_Int1_parity
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     4
imports Abs_Int1
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 "Parity Analysis"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     8
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
     9
datatype parity = Even | Odd | Either
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    10
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    11
text{* Instantiation of class @{class order} with type @{typ parity}: *}
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    12
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    13
instantiation parity :: order
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    14
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    15
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    16
text{* First the definition of the interface function @{text"\<le>"}. Note that
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    17
the header of the definition must refer to the ascii name @{const less_eq} of the
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    18
constants as @{text less_eq_parity} and the definition is named @{text
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    19
less_eq_parity_def}.  Inside the definition the symbolic names can be used. *}
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    20
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    21
definition less_eq_parity where
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    22
"x \<le> y = (y = Either \<or> x=y)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    23
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    24
text{* We also need @{text"<"}, which is defined canonically: *}
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    25
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    26
definition less_parity where
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    27
"x < y = (x \<le> y \<and> \<not> y \<le> (x::parity))"
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    28
51625
bd3358aac5d2 tuned document
nipkow
parents: 51624
diff changeset
    29
text{*\noindent(The type annotation is necessary to fix the type of the polymorphic predicates.)
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    30
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    31
Now the instance proof, i.e.\ the proof that the definition fulfills
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    32
the axioms (assumptions) of the class. The initial proof-step generates the
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    33
necessary proof obligations. *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    34
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    35
instance
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    36
proof
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    37
  fix x::parity show "x \<le> x" by(auto simp: less_eq_parity_def)
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    38
next
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    39
  fix x y z :: parity assume "x \<le> y" "y \<le> z" thus "x \<le> z"
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    40
    by(auto simp: less_eq_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    41
next
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    42
  fix x y :: parity assume "x \<le> y" "y \<le> x" thus "x = y"
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    43
    by(auto simp: less_eq_parity_def)
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    44
next
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    45
  fix x y :: parity show "(x < y) = (x \<le> y \<and> \<not> y \<le> x)" by(rule less_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    46
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    47
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    48
end
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    49
51826
054a40461449 canonical names of classes
nipkow
parents: 51711
diff changeset
    50
text{* Instantiation of class @{class semilattice_sup_top} with type @{typ parity}: *}
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    51
51826
054a40461449 canonical names of classes
nipkow
parents: 51711
diff changeset
    52
instantiation parity :: semilattice_sup_top
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    53
begin
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    54
51389
8a9f0503b1c0 factored out Step
nipkow
parents: 51372
diff changeset
    55
definition sup_parity where
51624
nipkow
parents: 51389
diff changeset
    56
"x \<squnion> y = (if x = y then x else Either)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    57
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
    58
definition top_parity where
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    59
"\<top> = Either"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    60
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    61
text{* Now the instance proof. This time we take a lazy shortcut: we do not
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    62
write out the proof obligations but use the @{text goali} primitive to refer
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    63
to the assumptions of subgoal i and @{text "case?"} to refer to the
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    64
conclusion of subgoal i. The class axioms are presented in the same order as
51625
bd3358aac5d2 tuned document
nipkow
parents: 51624
diff changeset
    65
in the class definition. Warning: this is brittle! *}
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    66
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    67
instance
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    68
proof
51389
8a9f0503b1c0 factored out Step
nipkow
parents: 51372
diff changeset
    69
  case goal1 (*sup1*) show ?case by(auto simp: less_eq_parity_def sup_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    70
next
51389
8a9f0503b1c0 factored out Step
nipkow
parents: 51372
diff changeset
    71
  case goal2 (*sup2*) show ?case by(auto simp: less_eq_parity_def sup_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    72
next
51389
8a9f0503b1c0 factored out Step
nipkow
parents: 51372
diff changeset
    73
  case goal3 (*sup least*) thus ?case by(auto simp: less_eq_parity_def sup_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    74
next
51389
8a9f0503b1c0 factored out Step
nipkow
parents: 51372
diff changeset
    75
  case goal4 (*top*) show ?case by(auto simp: less_eq_parity_def top_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    76
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    77
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    78
end
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    79
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    80
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    81
text{* Now we define the functions used for instantiating the abstract
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    82
interpretation locales. Note that the Isabelle terminology is
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    83
\emph{interpretation}, not \emph{instantiation} of locales, but we use
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    84
instantiation to avoid confusion with abstract interpretation.  *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    85
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    86
fun \<gamma>_parity :: "parity \<Rightarrow> val set" where
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    87
"\<gamma>_parity Even = {i. i mod 2 = 0}" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    88
"\<gamma>_parity Odd  = {i. i mod 2 = 1}" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    89
"\<gamma>_parity Either = UNIV"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    90
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    91
fun num_parity :: "val \<Rightarrow> parity" where
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    92
"num_parity i = (if i mod 2 = 0 then Even else Odd)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    93
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    94
fun plus_parity :: "parity \<Rightarrow> parity \<Rightarrow> parity" where
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    95
"plus_parity Even Even = Even" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    96
"plus_parity Odd  Odd  = Even" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    97
"plus_parity Even Odd  = Odd" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    98
"plus_parity Odd  Even = Odd" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
    99
"plus_parity Either y  = Either" |
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   100
"plus_parity x Either  = Either"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   101
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   102
text{* First we instantiate the abstract value interface and prove that the
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   103
functions on type @{typ parity} have all the necessary properties: *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   104
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   105
interpretation Val_abs
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   106
where \<gamma> = \<gamma>_parity and num' = num_parity and plus' = plus_parity
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   107
proof txt{* of the locale axioms *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   108
  fix a b :: parity
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
   109
  assume "a \<le> b" thus "\<gamma>_parity a \<subseteq> \<gamma>_parity b"
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
   110
    by(auto simp: less_eq_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   111
next txt{* The rest in the lazy, implicit way *}
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
   112
  case goal2 show ?case by(auto simp: top_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   113
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   114
  case goal3 show ?case by auto
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   115
next
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   116
  txt{* Warning: this subproof refers to the names @{text a1} and @{text a2}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   117
  from the statement of the axiom. *}
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   118
  case goal4 thus ?case
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   119
  proof(cases a1 a2 rule: parity.exhaust[case_product parity.exhaust])
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   120
  qed (auto simp add:mod_add_eq)
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   121
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   122
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   123
text{* Instantiating the abstract interpretation locale requires no more
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   124
proofs (they happened in the instatiation above) but delivers the
49344
nipkow
parents: 49188
diff changeset
   125
instantiated abstract interpreter which we call @{text AI_parity}: *}
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   126
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   127
interpretation Abs_Int
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   128
where \<gamma> = \<gamma>_parity and num' = num_parity and plus' = plus_parity
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   129
defines aval_parity is aval' and step_parity is step' and AI_parity is AI
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   130
..
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   131
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   132
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   133
subsubsection "Tests"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   134
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   135
definition "test1_parity =
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   136
  ''x'' ::= N 1;
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   137
  WHILE Less (V ''x'') (N 100) DO ''x'' ::= Plus (V ''x'') (N 2)"
50995
nipkow
parents: 49433
diff changeset
   138
value [code] "show_acom (the(AI_parity test1_parity))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   139
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   140
definition "test2_parity =
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   141
  ''x'' ::= N 1;
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   142
  WHILE Less (V ''x'') (N 100) DO ''x'' ::= Plus (V ''x'') (N 3)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   143
51711
df3426139651 complete revision: finally got rid of annoying L-predicate
nipkow
parents: 51625
diff changeset
   144
definition "steps c i = ((step_parity \<top>) ^^ i) (bot c)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   145
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   146
value "show_acom (steps test2_parity 0)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   147
value "show_acom (steps test2_parity 1)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   148
value "show_acom (steps test2_parity 2)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   149
value "show_acom (steps test2_parity 3)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   150
value "show_acom (steps test2_parity 4)"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   151
value "show_acom (steps test2_parity 5)"
49188
22f7e7b68f50 adjusted examples
nipkow
parents: 47613
diff changeset
   152
value "show_acom (steps test2_parity 6)"
50995
nipkow
parents: 49433
diff changeset
   153
value "show_acom (the(AI_parity test2_parity))"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   154
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   155
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   156
subsubsection "Termination"
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   157
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   158
interpretation Abs_Int_mono
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   159
where \<gamma> = \<gamma>_parity and num' = num_parity and plus' = plus_parity
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   160
proof
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   161
  case goal1 thus ?case
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   162
  proof(cases a1 a2 b1 b2
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   163
   rule: parity.exhaust[case_product parity.exhaust[case_product parity.exhaust[case_product parity.exhaust]]]) (* FIXME - UGLY! *)
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
   164
  qed (auto simp add:less_eq_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   165
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   166
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   167
definition m_parity :: "parity \<Rightarrow> nat" where
51389
8a9f0503b1c0 factored out Step
nipkow
parents: 51372
diff changeset
   168
"m_parity x = (if x = Either then 0 else 1)"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   169
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   170
interpretation Abs_Int_measure
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   171
where \<gamma> = \<gamma>_parity and num' = num_parity and plus' = plus_parity
49433
nipkow
parents: 49399
diff changeset
   172
and m = m_parity and h = "1"
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   173
proof
51359
00b45c7e831f major redesign: order instead of preorder, new definition of intervals as quotients
nipkow
parents: 51036
diff changeset
   174
  case goal1 thus ?case by(auto simp add: m_parity_def less_eq_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   175
next
51372
d315e9a9ee72 simplified basic termination proof
nipkow
parents: 51359
diff changeset
   176
  case goal2 thus ?case by(auto simp add: m_parity_def less_eq_parity_def less_parity_def)
47613
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   177
qed
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   178
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   179
thm AI_Some_measure
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   180
e72e44cee6f2 added revised version of Abs_Int
nipkow
parents:
diff changeset
   181
end