src/HOL/Tools/Qelim/cooper_procedure.ML
author wenzelm
Mon, 11 Sep 2023 19:30:48 +0200
changeset 78659 b5f3d1051b13
parent 75362 4b8da5eef9d0
child 82801 c8d92d4ced73
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36798
3981db162131 less complex organization of cooper source code
haftmann
parents: 36528
diff changeset
     1
structure Cooper_Procedure : sig
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
     2
  datatype inta = Int_of_integer of int
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
     3
  val integer_of_int : inta -> int
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
     4
  type nat
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
     5
  val integer_of_nat : nat -> int
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
     6
  datatype numa = C of inta | Bound of nat | CN of nat * inta * numa |
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
     7
    Neg of numa | Add of numa * numa | Sub of numa * numa | Mul of inta * numa
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
     8
  datatype fm = T | F | Lt of numa | Le of numa | Gt of numa | Ge of numa |
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
     9
    Eq of numa | NEq of numa | Dvd of inta * numa | NDvd of inta * numa |
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
    10
    Not of fm | And of fm * fm | Or of fm * fm | Imp of fm * fm | Iff of fm * fm
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
    11
    | E of fm | A of fm | Closed of nat | NClosed of nat
36528
48c35032d060 updated generated file
haftmann
parents: 29939
diff changeset
    12
  val pa : fm -> fm
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    13
  val nat_of_integer : int -> nat
36528
48c35032d060 updated generated file
haftmann
parents: 29939
diff changeset
    14
end = struct
23466
886655a150f6 moved quantifier elimination tools to Tools/Qelim/;
wenzelm
parents:
diff changeset
    15
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    16
datatype inta = Int_of_integer of int;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    17
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    18
fun integer_of_int (Int_of_integer k) = k;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    19
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    20
fun equal_inta k l = integer_of_int k = integer_of_int l;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
    21
44930
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
    22
type 'a equal = {equal : 'a -> 'a -> bool};
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
    23
val equal = #equal : 'a equal -> 'a -> 'a -> bool;
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
    24
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    25
val equal_int = {equal = equal_inta} : inta equal;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    26
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    27
fun times_inta k l = Int_of_integer (integer_of_int k * integer_of_int l);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    28
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    29
type 'a times = {times : 'a -> 'a -> 'a};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    30
val times = #times : 'a times -> 'a -> 'a -> 'a;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    31
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    32
type 'a dvd = {times_dvd : 'a times};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    33
val times_dvd = #times_dvd : 'a dvd -> 'a times;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    34
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    35
val times_int = {times = times_inta} : inta times;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    36
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    37
val dvd_int = {times_dvd = times_int} : inta dvd;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    38
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    39
datatype num = One | Bit0 of num | Bit1 of num;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    40
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    41
val one_inta : inta = Int_of_integer (1 : IntInf.int);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    42
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    43
type 'a one = {one : 'a};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    44
val one = #one : 'a one -> 'a;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    45
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    46
val one_int = {one = one_inta} : inta one;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    47
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    48
fun plus_inta k l = Int_of_integer (integer_of_int k + integer_of_int l);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    49
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    50
type 'a plus = {plus : 'a -> 'a -> 'a};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    51
val plus = #plus : 'a plus -> 'a -> 'a -> 'a;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    52
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    53
val plus_int = {plus = plus_inta} : inta plus;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    54
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    55
val zero_inta : inta = Int_of_integer (0 : IntInf.int);
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    56
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    57
type 'a zero = {zero : 'a};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    58
val zero = #zero : 'a zero -> 'a;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    59
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    60
val zero_int = {zero = zero_inta} : inta zero;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    61
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    62
type 'a semigroup_add = {plus_semigroup_add : 'a plus};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    63
val plus_semigroup_add = #plus_semigroup_add : 'a semigroup_add -> 'a plus;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    64
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    65
type 'a numeral =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    66
  {one_numeral : 'a one, semigroup_add_numeral : 'a semigroup_add};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    67
val one_numeral = #one_numeral : 'a numeral -> 'a one;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    68
val semigroup_add_numeral = #semigroup_add_numeral :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    69
  'a numeral -> 'a semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    70
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    71
val semigroup_add_int = {plus_semigroup_add = plus_int} : inta semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    72
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    73
val numeral_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    74
  {one_numeral = one_int, semigroup_add_numeral = semigroup_add_int} :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    75
  inta numeral;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    76
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    77
type 'a power = {one_power : 'a one, times_power : 'a times};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    78
val one_power = #one_power : 'a power -> 'a one;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    79
val times_power = #times_power : 'a power -> 'a times;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    80
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    81
val power_int = {one_power = one_int, times_power = times_int} : inta power;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
    82
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    83
fun minus_inta k l = Int_of_integer (integer_of_int k - integer_of_int l);
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    84
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    85
type 'a minus = {minus : 'a -> 'a -> 'a};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    86
val minus = #minus : 'a minus -> 'a -> 'a -> 'a;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    87
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    88
val minus_int = {minus = minus_inta} : inta minus;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
    89
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
    90
fun apsnd f (x, y) = (x, f y);
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
    91
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
    92
fun divmod_integer k l =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
    93
  (if k = (0 : IntInf.int) then ((0 : IntInf.int), (0 : IntInf.int))
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
    94
    else (if (0 : IntInf.int) < l
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
    95
           then (if (0 : IntInf.int) < k then Integer.div_mod (abs k) (abs l)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
    96
                  else let
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
    97
                         val (r, s) = Integer.div_mod (abs k) (abs l);
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
    98
                       in
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
    99
                         (if s = (0 : IntInf.int) then (~ r, (0 : IntInf.int))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   100
                           else (~ r - (1 : IntInf.int), l - s))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   101
                       end)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   102
           else (if l = (0 : IntInf.int) then ((0 : IntInf.int), k)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   103
                  else apsnd (fn a => ~ a)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   104
                         (if k < (0 : IntInf.int)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   105
                           then Integer.div_mod (abs k) (abs l)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   106
                           else let
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   107
                                  val (r, s) = Integer.div_mod (abs k) (abs l);
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   108
                                in
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   109
                                  (if s = (0 : IntInf.int)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   110
                                    then (~ r, (0 : IntInf.int))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   111
                                    else (~ r - (1 : IntInf.int), ~ l - s))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   112
                                end))));
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   113
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   114
fun fst (x1, x2) = x1;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   115
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   116
fun divide_integer k l = fst (divmod_integer k l);
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   117
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   118
fun divide_inta k l =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   119
  Int_of_integer (divide_integer (integer_of_int k) (integer_of_int l));
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   120
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   121
type 'a divide = {divide : 'a -> 'a -> 'a};
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   122
val divide = #divide : 'a divide -> 'a -> 'a -> 'a;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   123
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   124
val divide_int = {divide = divide_inta} : inta divide;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   125
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   126
fun snd (x1, x2) = x2;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   127
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   128
fun modulo_integer k l = snd (divmod_integer k l);
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   129
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   130
fun modulo_inta k l =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   131
  Int_of_integer (modulo_integer (integer_of_int k) (integer_of_int l));
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   132
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   133
type 'a modulo =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   134
  {divide_modulo : 'a divide, dvd_modulo : 'a dvd, modulo : 'a -> 'a -> 'a};
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   135
val divide_modulo = #divide_modulo : 'a modulo -> 'a divide;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   136
val dvd_modulo = #dvd_modulo : 'a modulo -> 'a dvd;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   137
val modulo = #modulo : 'a modulo -> 'a -> 'a -> 'a;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   138
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   139
val modulo_int =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   140
  {divide_modulo = divide_int, dvd_modulo = dvd_int, modulo = modulo_inta} :
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   141
  inta modulo;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   142
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   143
type 'a ab_semigroup_add = {semigroup_add_ab_semigroup_add : 'a semigroup_add};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   144
val semigroup_add_ab_semigroup_add = #semigroup_add_ab_semigroup_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   145
  'a ab_semigroup_add -> 'a semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   146
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   147
type 'a monoid_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   148
  {semigroup_add_monoid_add : 'a semigroup_add, zero_monoid_add : 'a zero};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   149
val semigroup_add_monoid_add = #semigroup_add_monoid_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   150
  'a monoid_add -> 'a semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   151
val zero_monoid_add = #zero_monoid_add : 'a monoid_add -> 'a zero;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   152
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   153
type 'a comm_monoid_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   154
  {ab_semigroup_add_comm_monoid_add : 'a ab_semigroup_add,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   155
    monoid_add_comm_monoid_add : 'a monoid_add};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   156
val ab_semigroup_add_comm_monoid_add = #ab_semigroup_add_comm_monoid_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   157
  'a comm_monoid_add -> 'a ab_semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   158
val monoid_add_comm_monoid_add = #monoid_add_comm_monoid_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   159
  'a comm_monoid_add -> 'a monoid_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   160
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   161
type 'a mult_zero = {times_mult_zero : 'a times, zero_mult_zero : 'a zero};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   162
val times_mult_zero = #times_mult_zero : 'a mult_zero -> 'a times;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   163
val zero_mult_zero = #zero_mult_zero : 'a mult_zero -> 'a zero;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   164
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   165
type 'a semigroup_mult = {times_semigroup_mult : 'a times};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   166
val times_semigroup_mult = #times_semigroup_mult :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   167
  'a semigroup_mult -> 'a times;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   168
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   169
type 'a semiring =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   170
  {ab_semigroup_add_semiring : 'a ab_semigroup_add,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   171
    semigroup_mult_semiring : 'a semigroup_mult};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   172
val ab_semigroup_add_semiring = #ab_semigroup_add_semiring :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   173
  'a semiring -> 'a ab_semigroup_add;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   174
val semigroup_mult_semiring = #semigroup_mult_semiring :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   175
  'a semiring -> 'a semigroup_mult;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   176
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   177
type 'a semiring_0 =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   178
  {comm_monoid_add_semiring_0 : 'a comm_monoid_add,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   179
    mult_zero_semiring_0 : 'a mult_zero, semiring_semiring_0 : 'a semiring};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   180
val comm_monoid_add_semiring_0 = #comm_monoid_add_semiring_0 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   181
  'a semiring_0 -> 'a comm_monoid_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   182
val mult_zero_semiring_0 = #mult_zero_semiring_0 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   183
  'a semiring_0 -> 'a mult_zero;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   184
val semiring_semiring_0 = #semiring_semiring_0 : 'a semiring_0 -> 'a semiring;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   185
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   186
type 'a semiring_no_zero_divisors =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   187
  {semiring_0_semiring_no_zero_divisors : 'a semiring_0};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   188
val semiring_0_semiring_no_zero_divisors = #semiring_0_semiring_no_zero_divisors
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   189
  : 'a semiring_no_zero_divisors -> 'a semiring_0;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   190
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   191
type 'a monoid_mult =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   192
  {semigroup_mult_monoid_mult : 'a semigroup_mult,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   193
    power_monoid_mult : 'a power};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   194
val semigroup_mult_monoid_mult = #semigroup_mult_monoid_mult :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   195
  'a monoid_mult -> 'a semigroup_mult;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   196
val power_monoid_mult = #power_monoid_mult : 'a monoid_mult -> 'a power;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   197
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   198
type 'a semiring_numeral =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   199
  {monoid_mult_semiring_numeral : 'a monoid_mult,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   200
    numeral_semiring_numeral : 'a numeral,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   201
    semiring_semiring_numeral : 'a semiring};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   202
val monoid_mult_semiring_numeral = #monoid_mult_semiring_numeral :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   203
  'a semiring_numeral -> 'a monoid_mult;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   204
val numeral_semiring_numeral = #numeral_semiring_numeral :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   205
  'a semiring_numeral -> 'a numeral;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   206
val semiring_semiring_numeral = #semiring_semiring_numeral :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   207
  'a semiring_numeral -> 'a semiring;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   208
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   209
type 'a zero_neq_one = {one_zero_neq_one : 'a one, zero_zero_neq_one : 'a zero};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   210
val one_zero_neq_one = #one_zero_neq_one : 'a zero_neq_one -> 'a one;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   211
val zero_zero_neq_one = #zero_zero_neq_one : 'a zero_neq_one -> 'a zero;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   212
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   213
type 'a semiring_1 =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   214
  {semiring_numeral_semiring_1 : 'a semiring_numeral,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   215
    semiring_0_semiring_1 : 'a semiring_0,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   216
    zero_neq_one_semiring_1 : 'a zero_neq_one};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   217
val semiring_numeral_semiring_1 = #semiring_numeral_semiring_1 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   218
  'a semiring_1 -> 'a semiring_numeral;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   219
val semiring_0_semiring_1 = #semiring_0_semiring_1 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   220
  'a semiring_1 -> 'a semiring_0;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   221
val zero_neq_one_semiring_1 = #zero_neq_one_semiring_1 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   222
  'a semiring_1 -> 'a zero_neq_one;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   223
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   224
type 'a semiring_1_no_zero_divisors =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   225
  {semiring_1_semiring_1_no_zero_divisors : 'a semiring_1,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   226
    semiring_no_zero_divisors_semiring_1_no_zero_divisors :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   227
      'a semiring_no_zero_divisors};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   228
val semiring_1_semiring_1_no_zero_divisors =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   229
  #semiring_1_semiring_1_no_zero_divisors :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   230
  'a semiring_1_no_zero_divisors -> 'a semiring_1;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   231
val semiring_no_zero_divisors_semiring_1_no_zero_divisors =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   232
  #semiring_no_zero_divisors_semiring_1_no_zero_divisors :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   233
  'a semiring_1_no_zero_divisors -> 'a semiring_no_zero_divisors;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   234
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   235
type 'a cancel_semigroup_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   236
  {semigroup_add_cancel_semigroup_add : 'a semigroup_add};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   237
val semigroup_add_cancel_semigroup_add = #semigroup_add_cancel_semigroup_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   238
  'a cancel_semigroup_add -> 'a semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   239
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   240
type 'a cancel_ab_semigroup_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   241
  {ab_semigroup_add_cancel_ab_semigroup_add : 'a ab_semigroup_add,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   242
    cancel_semigroup_add_cancel_ab_semigroup_add : 'a cancel_semigroup_add,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   243
    minus_cancel_ab_semigroup_add : 'a minus};
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   244
val ab_semigroup_add_cancel_ab_semigroup_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   245
  #ab_semigroup_add_cancel_ab_semigroup_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   246
  'a cancel_ab_semigroup_add -> 'a ab_semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   247
val cancel_semigroup_add_cancel_ab_semigroup_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   248
  #cancel_semigroup_add_cancel_ab_semigroup_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   249
  'a cancel_ab_semigroup_add -> 'a cancel_semigroup_add;
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   250
val minus_cancel_ab_semigroup_add = #minus_cancel_ab_semigroup_add :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   251
  'a cancel_ab_semigroup_add -> 'a minus;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   252
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   253
type 'a cancel_comm_monoid_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   254
  {cancel_ab_semigroup_add_cancel_comm_monoid_add : 'a cancel_ab_semigroup_add,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   255
    comm_monoid_add_cancel_comm_monoid_add : 'a comm_monoid_add};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   256
val cancel_ab_semigroup_add_cancel_comm_monoid_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   257
  #cancel_ab_semigroup_add_cancel_comm_monoid_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   258
  'a cancel_comm_monoid_add -> 'a cancel_ab_semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   259
val comm_monoid_add_cancel_comm_monoid_add =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   260
  #comm_monoid_add_cancel_comm_monoid_add :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   261
  'a cancel_comm_monoid_add -> 'a comm_monoid_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   262
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   263
type 'a semiring_0_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   264
  {cancel_comm_monoid_add_semiring_0_cancel : 'a cancel_comm_monoid_add,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   265
    semiring_0_semiring_0_cancel : 'a semiring_0};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   266
val cancel_comm_monoid_add_semiring_0_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   267
  #cancel_comm_monoid_add_semiring_0_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   268
  'a semiring_0_cancel -> 'a cancel_comm_monoid_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   269
val semiring_0_semiring_0_cancel = #semiring_0_semiring_0_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   270
  'a semiring_0_cancel -> 'a semiring_0;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   271
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   272
type 'a ab_semigroup_mult =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   273
  {semigroup_mult_ab_semigroup_mult : 'a semigroup_mult};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   274
val semigroup_mult_ab_semigroup_mult = #semigroup_mult_ab_semigroup_mult :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   275
  'a ab_semigroup_mult -> 'a semigroup_mult;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   276
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   277
type 'a comm_semiring =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   278
  {ab_semigroup_mult_comm_semiring : 'a ab_semigroup_mult,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   279
    semiring_comm_semiring : 'a semiring};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   280
val ab_semigroup_mult_comm_semiring = #ab_semigroup_mult_comm_semiring :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   281
  'a comm_semiring -> 'a ab_semigroup_mult;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   282
val semiring_comm_semiring = #semiring_comm_semiring :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   283
  'a comm_semiring -> 'a semiring;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   284
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   285
type 'a comm_semiring_0 =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   286
  {comm_semiring_comm_semiring_0 : 'a comm_semiring,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   287
    semiring_0_comm_semiring_0 : 'a semiring_0};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   288
val comm_semiring_comm_semiring_0 = #comm_semiring_comm_semiring_0 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   289
  'a comm_semiring_0 -> 'a comm_semiring;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   290
val semiring_0_comm_semiring_0 = #semiring_0_comm_semiring_0 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   291
  'a comm_semiring_0 -> 'a semiring_0;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   292
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   293
type 'a comm_semiring_0_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   294
  {comm_semiring_0_comm_semiring_0_cancel : 'a comm_semiring_0,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   295
    semiring_0_cancel_comm_semiring_0_cancel : 'a semiring_0_cancel};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   296
val comm_semiring_0_comm_semiring_0_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   297
  #comm_semiring_0_comm_semiring_0_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   298
  'a comm_semiring_0_cancel -> 'a comm_semiring_0;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   299
val semiring_0_cancel_comm_semiring_0_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   300
  #semiring_0_cancel_comm_semiring_0_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   301
  'a comm_semiring_0_cancel -> 'a semiring_0_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   302
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   303
type 'a semiring_1_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   304
  {semiring_0_cancel_semiring_1_cancel : 'a semiring_0_cancel,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   305
    semiring_1_semiring_1_cancel : 'a semiring_1};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   306
val semiring_0_cancel_semiring_1_cancel = #semiring_0_cancel_semiring_1_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   307
  'a semiring_1_cancel -> 'a semiring_0_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   308
val semiring_1_semiring_1_cancel = #semiring_1_semiring_1_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   309
  'a semiring_1_cancel -> 'a semiring_1;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   310
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   311
type 'a comm_monoid_mult =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   312
  {ab_semigroup_mult_comm_monoid_mult : 'a ab_semigroup_mult,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   313
    monoid_mult_comm_monoid_mult : 'a monoid_mult,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   314
    dvd_comm_monoid_mult : 'a dvd};
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   315
val ab_semigroup_mult_comm_monoid_mult = #ab_semigroup_mult_comm_monoid_mult :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   316
  'a comm_monoid_mult -> 'a ab_semigroup_mult;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   317
val monoid_mult_comm_monoid_mult = #monoid_mult_comm_monoid_mult :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   318
  'a comm_monoid_mult -> 'a monoid_mult;
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   319
val dvd_comm_monoid_mult = #dvd_comm_monoid_mult :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   320
  'a comm_monoid_mult -> 'a dvd;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   321
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   322
type 'a comm_semiring_1 =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   323
  {comm_monoid_mult_comm_semiring_1 : 'a comm_monoid_mult,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   324
    comm_semiring_0_comm_semiring_1 : 'a comm_semiring_0,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   325
    semiring_1_comm_semiring_1 : 'a semiring_1};
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   326
val comm_monoid_mult_comm_semiring_1 = #comm_monoid_mult_comm_semiring_1 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   327
  'a comm_semiring_1 -> 'a comm_monoid_mult;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   328
val comm_semiring_0_comm_semiring_1 = #comm_semiring_0_comm_semiring_1 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   329
  'a comm_semiring_1 -> 'a comm_semiring_0;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   330
val semiring_1_comm_semiring_1 = #semiring_1_comm_semiring_1 :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   331
  'a comm_semiring_1 -> 'a semiring_1;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   332
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   333
type 'a comm_semiring_1_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   334
  {comm_semiring_0_cancel_comm_semiring_1_cancel : 'a comm_semiring_0_cancel,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   335
    comm_semiring_1_comm_semiring_1_cancel : 'a comm_semiring_1,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   336
    semiring_1_cancel_comm_semiring_1_cancel : 'a semiring_1_cancel};
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   337
val comm_semiring_0_cancel_comm_semiring_1_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   338
  #comm_semiring_0_cancel_comm_semiring_1_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   339
  'a comm_semiring_1_cancel -> 'a comm_semiring_0_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   340
val comm_semiring_1_comm_semiring_1_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   341
  #comm_semiring_1_comm_semiring_1_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   342
  'a comm_semiring_1_cancel -> 'a comm_semiring_1;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   343
val semiring_1_cancel_comm_semiring_1_cancel =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   344
  #semiring_1_cancel_comm_semiring_1_cancel :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   345
  'a comm_semiring_1_cancel -> 'a semiring_1_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   346
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   347
type 'a semidom =
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   348
  {comm_semiring_1_cancel_semidom : 'a comm_semiring_1_cancel,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   349
    semiring_1_no_zero_divisors_semidom : 'a semiring_1_no_zero_divisors};
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   350
val comm_semiring_1_cancel_semidom = #comm_semiring_1_cancel_semidom :
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   351
  'a semidom -> 'a comm_semiring_1_cancel;
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   352
val semiring_1_no_zero_divisors_semidom = #semiring_1_no_zero_divisors_semidom :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   353
  'a semidom -> 'a semiring_1_no_zero_divisors;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   354
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   355
val ab_semigroup_add_int = {semigroup_add_ab_semigroup_add = semigroup_add_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   356
  : inta ab_semigroup_add;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   357
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   358
val monoid_add_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   359
  {semigroup_add_monoid_add = semigroup_add_int, zero_monoid_add = zero_int} :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   360
  inta monoid_add;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   361
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   362
val comm_monoid_add_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   363
  {ab_semigroup_add_comm_monoid_add = ab_semigroup_add_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   364
    monoid_add_comm_monoid_add = monoid_add_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   365
  : inta comm_monoid_add;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   366
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   367
val mult_zero_int = {times_mult_zero = times_int, zero_mult_zero = zero_int} :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   368
  inta mult_zero;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   369
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   370
val semigroup_mult_int = {times_semigroup_mult = times_int} :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   371
  inta semigroup_mult;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   372
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   373
val semiring_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   374
  {ab_semigroup_add_semiring = ab_semigroup_add_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   375
    semigroup_mult_semiring = semigroup_mult_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   376
  : inta semiring;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   377
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   378
val semiring_0_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   379
  {comm_monoid_add_semiring_0 = comm_monoid_add_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   380
    mult_zero_semiring_0 = mult_zero_int, semiring_semiring_0 = semiring_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   381
  : inta semiring_0;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   382
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   383
val semiring_no_zero_divisors_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   384
  {semiring_0_semiring_no_zero_divisors = semiring_0_int} :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   385
  inta semiring_no_zero_divisors;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   386
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   387
val monoid_mult_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   388
  {semigroup_mult_monoid_mult = semigroup_mult_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   389
    power_monoid_mult = power_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   390
  : inta monoid_mult;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   391
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   392
val semiring_numeral_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   393
  {monoid_mult_semiring_numeral = monoid_mult_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   394
    numeral_semiring_numeral = numeral_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   395
    semiring_semiring_numeral = semiring_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   396
  : inta semiring_numeral;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   397
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   398
val zero_neq_one_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   399
  {one_zero_neq_one = one_int, zero_zero_neq_one = zero_int} :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   400
  inta zero_neq_one;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   401
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   402
val semiring_1_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   403
  {semiring_numeral_semiring_1 = semiring_numeral_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   404
    semiring_0_semiring_1 = semiring_0_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   405
    zero_neq_one_semiring_1 = zero_neq_one_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   406
  : inta semiring_1;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   407
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   408
val semiring_1_no_zero_divisors_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   409
  {semiring_1_semiring_1_no_zero_divisors = semiring_1_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   410
    semiring_no_zero_divisors_semiring_1_no_zero_divisors =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   411
      semiring_no_zero_divisors_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   412
  : inta semiring_1_no_zero_divisors;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   413
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   414
val cancel_semigroup_add_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   415
  {semigroup_add_cancel_semigroup_add = semigroup_add_int} :
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   416
  inta cancel_semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   417
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   418
val cancel_ab_semigroup_add_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   419
  {ab_semigroup_add_cancel_ab_semigroup_add = ab_semigroup_add_int,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   420
    cancel_semigroup_add_cancel_ab_semigroup_add = cancel_semigroup_add_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   421
    minus_cancel_ab_semigroup_add = minus_int}
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   422
  : inta cancel_ab_semigroup_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   423
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   424
val cancel_comm_monoid_add_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   425
  {cancel_ab_semigroup_add_cancel_comm_monoid_add = cancel_ab_semigroup_add_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   426
    comm_monoid_add_cancel_comm_monoid_add = comm_monoid_add_int}
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   427
  : inta cancel_comm_monoid_add;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   428
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   429
val semiring_0_cancel_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   430
  {cancel_comm_monoid_add_semiring_0_cancel = cancel_comm_monoid_add_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   431
    semiring_0_semiring_0_cancel = semiring_0_int}
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   432
  : inta semiring_0_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   433
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   434
val ab_semigroup_mult_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   435
  {semigroup_mult_ab_semigroup_mult = semigroup_mult_int} :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   436
  inta ab_semigroup_mult;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   437
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   438
val comm_semiring_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   439
  {ab_semigroup_mult_comm_semiring = ab_semigroup_mult_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   440
    semiring_comm_semiring = semiring_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   441
  : inta comm_semiring;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   442
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   443
val comm_semiring_0_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   444
  {comm_semiring_comm_semiring_0 = comm_semiring_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   445
    semiring_0_comm_semiring_0 = semiring_0_int}
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   446
  : inta comm_semiring_0;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   447
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   448
val comm_semiring_0_cancel_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   449
  {comm_semiring_0_comm_semiring_0_cancel = comm_semiring_0_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   450
    semiring_0_cancel_comm_semiring_0_cancel = semiring_0_cancel_int}
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   451
  : inta comm_semiring_0_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   452
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   453
val semiring_1_cancel_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   454
  {semiring_0_cancel_semiring_1_cancel = semiring_0_cancel_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   455
    semiring_1_semiring_1_cancel = semiring_1_int}
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   456
  : inta semiring_1_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   457
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   458
val comm_monoid_mult_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   459
  {ab_semigroup_mult_comm_monoid_mult = ab_semigroup_mult_int,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   460
    monoid_mult_comm_monoid_mult = monoid_mult_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   461
    dvd_comm_monoid_mult = dvd_int}
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   462
  : inta comm_monoid_mult;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   463
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   464
val comm_semiring_1_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   465
  {comm_monoid_mult_comm_semiring_1 = comm_monoid_mult_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   466
    comm_semiring_0_comm_semiring_1 = comm_semiring_0_int,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   467
    semiring_1_comm_semiring_1 = semiring_1_int}
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   468
  : inta comm_semiring_1;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   469
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   470
val comm_semiring_1_cancel_int =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   471
  {comm_semiring_0_cancel_comm_semiring_1_cancel = comm_semiring_0_cancel_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   472
    comm_semiring_1_comm_semiring_1_cancel = comm_semiring_1_int,
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   473
    semiring_1_cancel_comm_semiring_1_cancel = semiring_1_cancel_int}
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   474
  : inta comm_semiring_1_cancel;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   475
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   476
val semidom_int =
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   477
  {comm_semiring_1_cancel_semidom = comm_semiring_1_cancel_int,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   478
    semiring_1_no_zero_divisors_semidom = semiring_1_no_zero_divisors_int}
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   479
  : inta semidom;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   480
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   481
type 'a semiring_no_zero_divisors_cancel =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   482
  {semiring_no_zero_divisors_semiring_no_zero_divisors_cancel :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   483
     'a semiring_no_zero_divisors};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   484
val semiring_no_zero_divisors_semiring_no_zero_divisors_cancel =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   485
  #semiring_no_zero_divisors_semiring_no_zero_divisors_cancel :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   486
  'a semiring_no_zero_divisors_cancel -> 'a semiring_no_zero_divisors;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   487
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   488
type 'a semidom_divide =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   489
  {divide_semidom_divide : 'a divide, semidom_semidom_divide : 'a semidom,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   490
    semiring_no_zero_divisors_cancel_semidom_divide :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   491
      'a semiring_no_zero_divisors_cancel};
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   492
val divide_semidom_divide = #divide_semidom_divide :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   493
  'a semidom_divide -> 'a divide;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   494
val semidom_semidom_divide = #semidom_semidom_divide :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   495
  'a semidom_divide -> 'a semidom;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   496
val semiring_no_zero_divisors_cancel_semidom_divide =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   497
  #semiring_no_zero_divisors_cancel_semidom_divide :
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   498
  'a semidom_divide -> 'a semiring_no_zero_divisors_cancel;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   499
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   500
val semiring_no_zero_divisors_cancel_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   501
  {semiring_no_zero_divisors_semiring_no_zero_divisors_cancel =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   502
     semiring_no_zero_divisors_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   503
  : inta semiring_no_zero_divisors_cancel;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   504
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   505
val semidom_divide_int =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   506
  {divide_semidom_divide = divide_int, semidom_semidom_divide = semidom_int,
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   507
    semiring_no_zero_divisors_cancel_semidom_divide =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   508
      semiring_no_zero_divisors_cancel_int}
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   509
  : inta semidom_divide;
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   510
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   511
type 'a algebraic_semidom =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   512
  {semidom_divide_algebraic_semidom : 'a semidom_divide};
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   513
val semidom_divide_algebraic_semidom = #semidom_divide_algebraic_semidom :
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   514
  'a algebraic_semidom -> 'a semidom_divide;
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   515
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   516
type 'a semiring_modulo =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   517
  {comm_semiring_1_cancel_semiring_modulo : 'a comm_semiring_1_cancel,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   518
    modulo_semiring_modulo : 'a modulo};
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   519
val comm_semiring_1_cancel_semiring_modulo =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   520
  #comm_semiring_1_cancel_semiring_modulo :
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   521
  'a semiring_modulo -> 'a comm_semiring_1_cancel;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   522
val modulo_semiring_modulo = #modulo_semiring_modulo :
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   523
  'a semiring_modulo -> 'a modulo;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   524
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   525
type 'a semidom_modulo =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   526
  {algebraic_semidom_semidom_modulo : 'a algebraic_semidom,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   527
    semiring_modulo_semidom_modulo : 'a semiring_modulo};
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   528
val algebraic_semidom_semidom_modulo = #algebraic_semidom_semidom_modulo :
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   529
  'a semidom_modulo -> 'a algebraic_semidom;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   530
val semiring_modulo_semidom_modulo = #semiring_modulo_semidom_modulo :
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   531
  'a semidom_modulo -> 'a semiring_modulo;
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   532
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   533
val algebraic_semidom_int =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   534
  {semidom_divide_algebraic_semidom = semidom_divide_int} :
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   535
  inta algebraic_semidom;
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   536
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   537
val semiring_modulo_int =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   538
  {comm_semiring_1_cancel_semiring_modulo = comm_semiring_1_cancel_int,
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   539
    modulo_semiring_modulo = modulo_int}
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   540
  : inta semiring_modulo;
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
   541
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   542
val semidom_modulo_int =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   543
  {algebraic_semidom_semidom_modulo = algebraic_semidom_int,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   544
    semiring_modulo_semidom_modulo = semiring_modulo_int}
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
   545
  : inta semidom_modulo;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   546
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   547
datatype nat = Nat of int;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   548
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   549
fun integer_of_nat (Nat x) = x;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   550
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   551
fun equal_nat m n = integer_of_nat m = integer_of_nat n;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   552
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   553
datatype numa = C of inta | Bound of nat | CN of nat * inta * numa | Neg of numa
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   554
  | Add of numa * numa | Sub of numa * numa | Mul of inta * numa;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   555
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   556
fun equal_numa (Sub (x61, x62)) (Mul (x71, x72)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   557
  | equal_numa (Mul (x71, x72)) (Sub (x61, x62)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   558
  | equal_numa (Add (x51, x52)) (Mul (x71, x72)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   559
  | equal_numa (Mul (x71, x72)) (Add (x51, x52)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   560
  | equal_numa (Add (x51, x52)) (Sub (x61, x62)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   561
  | equal_numa (Sub (x61, x62)) (Add (x51, x52)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   562
  | equal_numa (Neg x4) (Mul (x71, x72)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   563
  | equal_numa (Mul (x71, x72)) (Neg x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   564
  | equal_numa (Neg x4) (Sub (x61, x62)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   565
  | equal_numa (Sub (x61, x62)) (Neg x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   566
  | equal_numa (Neg x4) (Add (x51, x52)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   567
  | equal_numa (Add (x51, x52)) (Neg x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   568
  | equal_numa (CN (x31, x32, x33)) (Mul (x71, x72)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   569
  | equal_numa (Mul (x71, x72)) (CN (x31, x32, x33)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   570
  | equal_numa (CN (x31, x32, x33)) (Sub (x61, x62)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   571
  | equal_numa (Sub (x61, x62)) (CN (x31, x32, x33)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   572
  | equal_numa (CN (x31, x32, x33)) (Add (x51, x52)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   573
  | equal_numa (Add (x51, x52)) (CN (x31, x32, x33)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   574
  | equal_numa (CN (x31, x32, x33)) (Neg x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   575
  | equal_numa (Neg x4) (CN (x31, x32, x33)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   576
  | equal_numa (Bound x2) (Mul (x71, x72)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   577
  | equal_numa (Mul (x71, x72)) (Bound x2) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   578
  | equal_numa (Bound x2) (Sub (x61, x62)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   579
  | equal_numa (Sub (x61, x62)) (Bound x2) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   580
  | equal_numa (Bound x2) (Add (x51, x52)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   581
  | equal_numa (Add (x51, x52)) (Bound x2) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   582
  | equal_numa (Bound x2) (Neg x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   583
  | equal_numa (Neg x4) (Bound x2) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   584
  | equal_numa (Bound x2) (CN (x31, x32, x33)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   585
  | equal_numa (CN (x31, x32, x33)) (Bound x2) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   586
  | equal_numa (C x1) (Mul (x71, x72)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   587
  | equal_numa (Mul (x71, x72)) (C x1) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   588
  | equal_numa (C x1) (Sub (x61, x62)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   589
  | equal_numa (Sub (x61, x62)) (C x1) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   590
  | equal_numa (C x1) (Add (x51, x52)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   591
  | equal_numa (Add (x51, x52)) (C x1) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   592
  | equal_numa (C x1) (Neg x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   593
  | equal_numa (Neg x4) (C x1) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   594
  | equal_numa (C x1) (CN (x31, x32, x33)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   595
  | equal_numa (CN (x31, x32, x33)) (C x1) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   596
  | equal_numa (C x1) (Bound x2) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   597
  | equal_numa (Bound x2) (C x1) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   598
  | equal_numa (Mul (x71, x72)) (Mul (y71, y72)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   599
    equal_inta x71 y71 andalso equal_numa x72 y72
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   600
  | equal_numa (Sub (x61, x62)) (Sub (y61, y62)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   601
    equal_numa x61 y61 andalso equal_numa x62 y62
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   602
  | equal_numa (Add (x51, x52)) (Add (y51, y52)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   603
    equal_numa x51 y51 andalso equal_numa x52 y52
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   604
  | equal_numa (Neg x4) (Neg y4) = equal_numa x4 y4
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   605
  | equal_numa (CN (x31, x32, x33)) (CN (y31, y32, y33)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   606
    equal_nat x31 y31 andalso (equal_inta x32 y32 andalso equal_numa x33 y33)
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   607
  | equal_numa (Bound x2) (Bound y2) = equal_nat x2 y2
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   608
  | equal_numa (C x1) (C y1) = equal_inta x1 y1;
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   609
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   610
val equal_num = {equal = equal_numa} : numa equal;
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
   611
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   612
type 'a ord = {less_eq : 'a -> 'a -> bool, less : 'a -> 'a -> bool};
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   613
val less_eq = #less_eq : 'a ord -> 'a -> 'a -> bool;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   614
val less = #less : 'a ord -> 'a -> 'a -> bool;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   615
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   616
val ord_integer =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   617
  {less_eq = (fn a => fn b => a <= b), less = (fn a => fn b => a < b)} :
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   618
  int ord;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   619
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   620
datatype fm = T | F | Lt of numa | Le of numa | Gt of numa | Ge of numa |
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   621
  Eq of numa | NEq of numa | Dvd of inta * numa | NDvd of inta * numa |
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   622
  Not of fm | And of fm * fm | Or of fm * fm | Imp of fm * fm | Iff of fm * fm |
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   623
  E of fm | A of fm | Closed of nat | NClosed of nat;
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
   624
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   625
fun id x = (fn xa => xa) x;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   626
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   627
fun eq A_ a b = equal A_ a b;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   628
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   629
fun plus_nat m n = Nat (integer_of_nat m + integer_of_nat n);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   630
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   631
val one_nat : nat = Nat (1 : IntInf.int);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   632
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   633
fun suc n = plus_nat n one_nat;
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
   634
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   635
fun disjuncts (Or (p, q)) = disjuncts p @ disjuncts q
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   636
  | disjuncts F = []
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   637
  | disjuncts T = [T]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   638
  | disjuncts (Lt v) = [Lt v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   639
  | disjuncts (Le v) = [Le v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   640
  | disjuncts (Gt v) = [Gt v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   641
  | disjuncts (Ge v) = [Ge v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   642
  | disjuncts (Eq v) = [Eq v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   643
  | disjuncts (NEq v) = [NEq v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   644
  | disjuncts (Dvd (v, va)) = [Dvd (v, va)]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   645
  | disjuncts (NDvd (v, va)) = [NDvd (v, va)]
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   646
  | disjuncts (Not v) = [Not v]
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   647
  | disjuncts (And (v, va)) = [And (v, va)]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   648
  | disjuncts (Imp (v, va)) = [Imp (v, va)]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   649
  | disjuncts (Iff (v, va)) = [Iff (v, va)]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   650
  | disjuncts (E v) = [E v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   651
  | disjuncts (A v) = [A v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   652
  | disjuncts (Closed v) = [Closed v]
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   653
  | disjuncts (NClosed v) = [NClosed v];
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   654
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   655
fun foldr f [] = id
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   656
  | foldr f (x :: xs) = f x o foldr f xs;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
   657
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   658
fun equal_fm (Closed x18) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   659
  | equal_fm (NClosed x19) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   660
  | equal_fm (A x17) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   661
  | equal_fm (NClosed x19) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   662
  | equal_fm (A x17) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   663
  | equal_fm (Closed x18) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   664
  | equal_fm (E x16) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   665
  | equal_fm (NClosed x19) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   666
  | equal_fm (E x16) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   667
  | equal_fm (Closed x18) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   668
  | equal_fm (E x16) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   669
  | equal_fm (A x17) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   670
  | equal_fm (Iff (x151, x152)) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   671
  | equal_fm (NClosed x19) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   672
  | equal_fm (Iff (x151, x152)) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   673
  | equal_fm (Closed x18) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   674
  | equal_fm (Iff (x151, x152)) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   675
  | equal_fm (A x17) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   676
  | equal_fm (Iff (x151, x152)) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   677
  | equal_fm (E x16) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   678
  | equal_fm (Imp (x141, x142)) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   679
  | equal_fm (NClosed x19) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   680
  | equal_fm (Imp (x141, x142)) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   681
  | equal_fm (Closed x18) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   682
  | equal_fm (Imp (x141, x142)) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   683
  | equal_fm (A x17) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   684
  | equal_fm (Imp (x141, x142)) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   685
  | equal_fm (E x16) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   686
  | equal_fm (Imp (x141, x142)) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   687
  | equal_fm (Iff (x151, x152)) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   688
  | equal_fm (Or (x131, x132)) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   689
  | equal_fm (NClosed x19) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   690
  | equal_fm (Or (x131, x132)) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   691
  | equal_fm (Closed x18) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   692
  | equal_fm (Or (x131, x132)) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   693
  | equal_fm (A x17) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   694
  | equal_fm (Or (x131, x132)) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   695
  | equal_fm (E x16) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   696
  | equal_fm (Or (x131, x132)) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   697
  | equal_fm (Iff (x151, x152)) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   698
  | equal_fm (Or (x131, x132)) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   699
  | equal_fm (Imp (x141, x142)) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   700
  | equal_fm (And (x121, x122)) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   701
  | equal_fm (NClosed x19) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   702
  | equal_fm (And (x121, x122)) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   703
  | equal_fm (Closed x18) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   704
  | equal_fm (And (x121, x122)) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   705
  | equal_fm (A x17) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   706
  | equal_fm (And (x121, x122)) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   707
  | equal_fm (E x16) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   708
  | equal_fm (And (x121, x122)) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   709
  | equal_fm (Iff (x151, x152)) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   710
  | equal_fm (And (x121, x122)) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   711
  | equal_fm (Imp (x141, x142)) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   712
  | equal_fm (And (x121, x122)) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   713
  | equal_fm (Or (x131, x132)) (And (x121, x122)) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   714
  | equal_fm (Not x11) (NClosed x19) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   715
  | equal_fm (NClosed x19) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   716
  | equal_fm (Not x11) (Closed x18) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   717
  | equal_fm (Closed x18) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   718
  | equal_fm (Not x11) (A x17) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   719
  | equal_fm (A x17) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   720
  | equal_fm (Not x11) (E x16) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   721
  | equal_fm (E x16) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   722
  | equal_fm (Not x11) (Iff (x151, x152)) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   723
  | equal_fm (Iff (x151, x152)) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   724
  | equal_fm (Not x11) (Imp (x141, x142)) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   725
  | equal_fm (Imp (x141, x142)) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   726
  | equal_fm (Not x11) (Or (x131, x132)) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   727
  | equal_fm (Or (x131, x132)) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   728
  | equal_fm (Not x11) (And (x121, x122)) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   729
  | equal_fm (And (x121, x122)) (Not x11) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   730
  | equal_fm (NDvd (x101, x102)) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   731
  | equal_fm (NClosed x19) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   732
  | equal_fm (NDvd (x101, x102)) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   733
  | equal_fm (Closed x18) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   734
  | equal_fm (NDvd (x101, x102)) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   735
  | equal_fm (A x17) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   736
  | equal_fm (NDvd (x101, x102)) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   737
  | equal_fm (E x16) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   738
  | equal_fm (NDvd (x101, x102)) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   739
  | equal_fm (Iff (x151, x152)) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   740
  | equal_fm (NDvd (x101, x102)) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   741
  | equal_fm (Imp (x141, x142)) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   742
  | equal_fm (NDvd (x101, x102)) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   743
  | equal_fm (Or (x131, x132)) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   744
  | equal_fm (NDvd (x101, x102)) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   745
  | equal_fm (And (x121, x122)) (NDvd (x101, x102)) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   746
  | equal_fm (NDvd (x101, x102)) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   747
  | equal_fm (Not x11) (NDvd (x101, x102)) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   748
  | equal_fm (Dvd (x91, x92)) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   749
  | equal_fm (NClosed x19) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   750
  | equal_fm (Dvd (x91, x92)) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   751
  | equal_fm (Closed x18) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   752
  | equal_fm (Dvd (x91, x92)) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   753
  | equal_fm (A x17) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   754
  | equal_fm (Dvd (x91, x92)) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   755
  | equal_fm (E x16) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   756
  | equal_fm (Dvd (x91, x92)) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   757
  | equal_fm (Iff (x151, x152)) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   758
  | equal_fm (Dvd (x91, x92)) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   759
  | equal_fm (Imp (x141, x142)) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   760
  | equal_fm (Dvd (x91, x92)) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   761
  | equal_fm (Or (x131, x132)) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   762
  | equal_fm (Dvd (x91, x92)) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   763
  | equal_fm (And (x121, x122)) (Dvd (x91, x92)) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   764
  | equal_fm (Dvd (x91, x92)) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   765
  | equal_fm (Not x11) (Dvd (x91, x92)) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   766
  | equal_fm (Dvd (x91, x92)) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   767
  | equal_fm (NDvd (x101, x102)) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   768
  | equal_fm (NEq x8) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   769
  | equal_fm (NClosed x19) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   770
  | equal_fm (NEq x8) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   771
  | equal_fm (Closed x18) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   772
  | equal_fm (NEq x8) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   773
  | equal_fm (A x17) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   774
  | equal_fm (NEq x8) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   775
  | equal_fm (E x16) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   776
  | equal_fm (NEq x8) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   777
  | equal_fm (Iff (x151, x152)) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   778
  | equal_fm (NEq x8) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   779
  | equal_fm (Imp (x141, x142)) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   780
  | equal_fm (NEq x8) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   781
  | equal_fm (Or (x131, x132)) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   782
  | equal_fm (NEq x8) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   783
  | equal_fm (And (x121, x122)) (NEq x8) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   784
  | equal_fm (NEq x8) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   785
  | equal_fm (Not x11) (NEq x8) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   786
  | equal_fm (NEq x8) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   787
  | equal_fm (NDvd (x101, x102)) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   788
  | equal_fm (NEq x8) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   789
  | equal_fm (Dvd (x91, x92)) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   790
  | equal_fm (Eq x7) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   791
  | equal_fm (NClosed x19) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   792
  | equal_fm (Eq x7) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   793
  | equal_fm (Closed x18) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   794
  | equal_fm (Eq x7) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   795
  | equal_fm (A x17) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   796
  | equal_fm (Eq x7) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   797
  | equal_fm (E x16) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   798
  | equal_fm (Eq x7) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   799
  | equal_fm (Iff (x151, x152)) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   800
  | equal_fm (Eq x7) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   801
  | equal_fm (Imp (x141, x142)) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   802
  | equal_fm (Eq x7) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   803
  | equal_fm (Or (x131, x132)) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   804
  | equal_fm (Eq x7) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   805
  | equal_fm (And (x121, x122)) (Eq x7) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   806
  | equal_fm (Eq x7) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   807
  | equal_fm (Not x11) (Eq x7) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   808
  | equal_fm (Eq x7) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   809
  | equal_fm (NDvd (x101, x102)) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   810
  | equal_fm (Eq x7) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   811
  | equal_fm (Dvd (x91, x92)) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   812
  | equal_fm (Eq x7) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   813
  | equal_fm (NEq x8) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   814
  | equal_fm (Ge x6) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   815
  | equal_fm (NClosed x19) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   816
  | equal_fm (Ge x6) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   817
  | equal_fm (Closed x18) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   818
  | equal_fm (Ge x6) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   819
  | equal_fm (A x17) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   820
  | equal_fm (Ge x6) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   821
  | equal_fm (E x16) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   822
  | equal_fm (Ge x6) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   823
  | equal_fm (Iff (x151, x152)) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   824
  | equal_fm (Ge x6) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   825
  | equal_fm (Imp (x141, x142)) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   826
  | equal_fm (Ge x6) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   827
  | equal_fm (Or (x131, x132)) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   828
  | equal_fm (Ge x6) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   829
  | equal_fm (And (x121, x122)) (Ge x6) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   830
  | equal_fm (Ge x6) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   831
  | equal_fm (Not x11) (Ge x6) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   832
  | equal_fm (Ge x6) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   833
  | equal_fm (NDvd (x101, x102)) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   834
  | equal_fm (Ge x6) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   835
  | equal_fm (Dvd (x91, x92)) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   836
  | equal_fm (Ge x6) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   837
  | equal_fm (NEq x8) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   838
  | equal_fm (Ge x6) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   839
  | equal_fm (Eq x7) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   840
  | equal_fm (Gt x5) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   841
  | equal_fm (NClosed x19) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   842
  | equal_fm (Gt x5) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   843
  | equal_fm (Closed x18) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   844
  | equal_fm (Gt x5) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   845
  | equal_fm (A x17) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   846
  | equal_fm (Gt x5) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   847
  | equal_fm (E x16) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   848
  | equal_fm (Gt x5) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   849
  | equal_fm (Iff (x151, x152)) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   850
  | equal_fm (Gt x5) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   851
  | equal_fm (Imp (x141, x142)) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   852
  | equal_fm (Gt x5) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   853
  | equal_fm (Or (x131, x132)) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   854
  | equal_fm (Gt x5) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   855
  | equal_fm (And (x121, x122)) (Gt x5) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   856
  | equal_fm (Gt x5) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   857
  | equal_fm (Not x11) (Gt x5) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   858
  | equal_fm (Gt x5) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   859
  | equal_fm (NDvd (x101, x102)) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   860
  | equal_fm (Gt x5) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   861
  | equal_fm (Dvd (x91, x92)) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   862
  | equal_fm (Gt x5) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   863
  | equal_fm (NEq x8) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   864
  | equal_fm (Gt x5) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   865
  | equal_fm (Eq x7) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   866
  | equal_fm (Gt x5) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   867
  | equal_fm (Ge x6) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   868
  | equal_fm (Le x4) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   869
  | equal_fm (NClosed x19) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   870
  | equal_fm (Le x4) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   871
  | equal_fm (Closed x18) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   872
  | equal_fm (Le x4) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   873
  | equal_fm (A x17) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   874
  | equal_fm (Le x4) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   875
  | equal_fm (E x16) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   876
  | equal_fm (Le x4) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   877
  | equal_fm (Iff (x151, x152)) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   878
  | equal_fm (Le x4) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   879
  | equal_fm (Imp (x141, x142)) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   880
  | equal_fm (Le x4) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   881
  | equal_fm (Or (x131, x132)) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   882
  | equal_fm (Le x4) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   883
  | equal_fm (And (x121, x122)) (Le x4) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   884
  | equal_fm (Le x4) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   885
  | equal_fm (Not x11) (Le x4) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   886
  | equal_fm (Le x4) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   887
  | equal_fm (NDvd (x101, x102)) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   888
  | equal_fm (Le x4) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   889
  | equal_fm (Dvd (x91, x92)) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   890
  | equal_fm (Le x4) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   891
  | equal_fm (NEq x8) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   892
  | equal_fm (Le x4) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   893
  | equal_fm (Eq x7) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   894
  | equal_fm (Le x4) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   895
  | equal_fm (Ge x6) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   896
  | equal_fm (Le x4) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   897
  | equal_fm (Gt x5) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   898
  | equal_fm (Lt x3) (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   899
  | equal_fm (NClosed x19) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   900
  | equal_fm (Lt x3) (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   901
  | equal_fm (Closed x18) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   902
  | equal_fm (Lt x3) (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   903
  | equal_fm (A x17) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   904
  | equal_fm (Lt x3) (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   905
  | equal_fm (E x16) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   906
  | equal_fm (Lt x3) (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   907
  | equal_fm (Iff (x151, x152)) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   908
  | equal_fm (Lt x3) (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   909
  | equal_fm (Imp (x141, x142)) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   910
  | equal_fm (Lt x3) (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   911
  | equal_fm (Or (x131, x132)) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   912
  | equal_fm (Lt x3) (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   913
  | equal_fm (And (x121, x122)) (Lt x3) = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   914
  | equal_fm (Lt x3) (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   915
  | equal_fm (Not x11) (Lt x3) = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   916
  | equal_fm (Lt x3) (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   917
  | equal_fm (NDvd (x101, x102)) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   918
  | equal_fm (Lt x3) (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   919
  | equal_fm (Dvd (x91, x92)) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   920
  | equal_fm (Lt x3) (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   921
  | equal_fm (NEq x8) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   922
  | equal_fm (Lt x3) (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   923
  | equal_fm (Eq x7) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   924
  | equal_fm (Lt x3) (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   925
  | equal_fm (Ge x6) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   926
  | equal_fm (Lt x3) (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   927
  | equal_fm (Gt x5) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   928
  | equal_fm (Lt x3) (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   929
  | equal_fm (Le x4) (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   930
  | equal_fm F (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   931
  | equal_fm (NClosed x19) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   932
  | equal_fm F (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   933
  | equal_fm (Closed x18) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   934
  | equal_fm F (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   935
  | equal_fm (A x17) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   936
  | equal_fm F (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   937
  | equal_fm (E x16) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   938
  | equal_fm F (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   939
  | equal_fm (Iff (x151, x152)) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   940
  | equal_fm F (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   941
  | equal_fm (Imp (x141, x142)) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   942
  | equal_fm F (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   943
  | equal_fm (Or (x131, x132)) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   944
  | equal_fm F (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   945
  | equal_fm (And (x121, x122)) F = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   946
  | equal_fm F (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   947
  | equal_fm (Not x11) F = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   948
  | equal_fm F (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   949
  | equal_fm (NDvd (x101, x102)) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   950
  | equal_fm F (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   951
  | equal_fm (Dvd (x91, x92)) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   952
  | equal_fm F (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   953
  | equal_fm (NEq x8) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   954
  | equal_fm F (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   955
  | equal_fm (Eq x7) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   956
  | equal_fm F (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   957
  | equal_fm (Ge x6) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   958
  | equal_fm F (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   959
  | equal_fm (Gt x5) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   960
  | equal_fm F (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   961
  | equal_fm (Le x4) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   962
  | equal_fm F (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   963
  | equal_fm (Lt x3) F = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   964
  | equal_fm T (NClosed x19) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   965
  | equal_fm (NClosed x19) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   966
  | equal_fm T (Closed x18) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   967
  | equal_fm (Closed x18) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   968
  | equal_fm T (A x17) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   969
  | equal_fm (A x17) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   970
  | equal_fm T (E x16) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   971
  | equal_fm (E x16) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   972
  | equal_fm T (Iff (x151, x152)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   973
  | equal_fm (Iff (x151, x152)) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   974
  | equal_fm T (Imp (x141, x142)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   975
  | equal_fm (Imp (x141, x142)) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   976
  | equal_fm T (Or (x131, x132)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   977
  | equal_fm (Or (x131, x132)) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   978
  | equal_fm T (And (x121, x122)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   979
  | equal_fm (And (x121, x122)) T = false
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   980
  | equal_fm T (Not x11) = false
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
   981
  | equal_fm (Not x11) T = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   982
  | equal_fm T (NDvd (x101, x102)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   983
  | equal_fm (NDvd (x101, x102)) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   984
  | equal_fm T (Dvd (x91, x92)) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   985
  | equal_fm (Dvd (x91, x92)) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   986
  | equal_fm T (NEq x8) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   987
  | equal_fm (NEq x8) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   988
  | equal_fm T (Eq x7) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   989
  | equal_fm (Eq x7) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   990
  | equal_fm T (Ge x6) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   991
  | equal_fm (Ge x6) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   992
  | equal_fm T (Gt x5) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   993
  | equal_fm (Gt x5) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   994
  | equal_fm T (Le x4) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   995
  | equal_fm (Le x4) T = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   996
  | equal_fm T (Lt x3) = false
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
   997
  | equal_fm (Lt x3) T = false
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
   998
  | equal_fm T F = false
44930
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
   999
  | equal_fm F T = false
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1000
  | equal_fm (NClosed x19) (NClosed y19) = equal_nat x19 y19
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1001
  | equal_fm (Closed x18) (Closed y18) = equal_nat x18 y18
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1002
  | equal_fm (A x17) (A y17) = equal_fm x17 y17
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1003
  | equal_fm (E x16) (E y16) = equal_fm x16 y16
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1004
  | equal_fm (Iff (x151, x152)) (Iff (y151, y152)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1005
    equal_fm x151 y151 andalso equal_fm x152 y152
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1006
  | equal_fm (Imp (x141, x142)) (Imp (y141, y142)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1007
    equal_fm x141 y141 andalso equal_fm x142 y142
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1008
  | equal_fm (Or (x131, x132)) (Or (y131, y132)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1009
    equal_fm x131 y131 andalso equal_fm x132 y132
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1010
  | equal_fm (And (x121, x122)) (And (y121, y122)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1011
    equal_fm x121 y121 andalso equal_fm x122 y122
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1012
  | equal_fm (Not x11) (Not y11) = equal_fm x11 y11
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1013
  | equal_fm (NDvd (x101, x102)) (NDvd (y101, y102)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1014
    equal_inta x101 y101 andalso equal_numa x102 y102
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1015
  | equal_fm (Dvd (x91, x92)) (Dvd (y91, y92)) =
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1016
    equal_inta x91 y91 andalso equal_numa x92 y92
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1017
  | equal_fm (NEq x8) (NEq y8) = equal_numa x8 y8
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1018
  | equal_fm (Eq x7) (Eq y7) = equal_numa x7 y7
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1019
  | equal_fm (Ge x6) (Ge y6) = equal_numa x6 y6
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1020
  | equal_fm (Gt x5) (Gt y5) = equal_numa x5 y5
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1021
  | equal_fm (Le x4) (Le y4) = equal_numa x4 y4
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1022
  | equal_fm (Lt x3) (Lt y3) = equal_numa x3 y3
44930
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
  1023
  | equal_fm F F = true
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
  1024
  | equal_fm T T = true;
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  1025
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  1026
fun djf f p q =
44930
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
  1027
  (if equal_fm q T then T
afcbf23508af updated generated code
haftmann
parents: 36798
diff changeset
  1028
    else (if equal_fm q F then f p
75300
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1029
           else let
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1030
                  val fp = f p;
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1031
                in
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1032
                  (case fp of T => T | F => q | Lt _ => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1033
                    | Le _ => Or (fp, q) | Gt _ => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1034
                    | Ge _ => Or (fp, q) | Eq _ => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1035
                    | NEq _ => Or (fp, q) | Dvd (_, _) => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1036
                    | NDvd (_, _) => Or (fp, q) | Not _ => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1037
                    | And (_, _) => Or (fp, q) | Or (_, _) => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1038
                    | Imp (_, _) => Or (fp, q) | Iff (_, _) => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1039
                    | E _ => Or (fp, q) | A _ => Or (fp, q)
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1040
                    | Closed _ => Or (fp, q) | NClosed _ => Or (fp, q))
8adbfeaecbfe avoided recomputation in Cooper.djf and ran `isabelle regenerate_cooper`
desharna
parents: 74531
diff changeset
  1041
                end));
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  1042
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  1043
fun evaldjf f ps = foldr (djf f) ps F;
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  1044
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1045
fun dj f p = evaldjf f (disjuncts p);
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1046
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1047
fun max A_ a b = (if less_eq A_ a b then b else a);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1048
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1049
fun minus_nat m n =
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1050
  Nat (max ord_integer (0 : IntInf.int) (integer_of_nat m - integer_of_nat n));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1051
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1052
val zero_nat : nat = Nat (0 : IntInf.int);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1053
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1054
fun minusinf (And (p, q)) = And (minusinf p, minusinf q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1055
  | minusinf (Or (p, q)) = Or (minusinf p, minusinf q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1056
  | minusinf T = T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1057
  | minusinf F = F
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1058
  | minusinf (Lt (C va)) = Lt (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1059
  | minusinf (Lt (Bound va)) = Lt (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1060
  | minusinf (Lt (Neg va)) = Lt (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1061
  | minusinf (Lt (Add (va, vb))) = Lt (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1062
  | minusinf (Lt (Sub (va, vb))) = Lt (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1063
  | minusinf (Lt (Mul (va, vb))) = Lt (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1064
  | minusinf (Le (C va)) = Le (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1065
  | minusinf (Le (Bound va)) = Le (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1066
  | minusinf (Le (Neg va)) = Le (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1067
  | minusinf (Le (Add (va, vb))) = Le (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1068
  | minusinf (Le (Sub (va, vb))) = Le (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1069
  | minusinf (Le (Mul (va, vb))) = Le (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1070
  | minusinf (Gt (C va)) = Gt (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1071
  | minusinf (Gt (Bound va)) = Gt (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1072
  | minusinf (Gt (Neg va)) = Gt (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1073
  | minusinf (Gt (Add (va, vb))) = Gt (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1074
  | minusinf (Gt (Sub (va, vb))) = Gt (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1075
  | minusinf (Gt (Mul (va, vb))) = Gt (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1076
  | minusinf (Ge (C va)) = Ge (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1077
  | minusinf (Ge (Bound va)) = Ge (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1078
  | minusinf (Ge (Neg va)) = Ge (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1079
  | minusinf (Ge (Add (va, vb))) = Ge (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1080
  | minusinf (Ge (Sub (va, vb))) = Ge (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1081
  | minusinf (Ge (Mul (va, vb))) = Ge (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1082
  | minusinf (Eq (C va)) = Eq (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1083
  | minusinf (Eq (Bound va)) = Eq (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1084
  | minusinf (Eq (Neg va)) = Eq (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1085
  | minusinf (Eq (Add (va, vb))) = Eq (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1086
  | minusinf (Eq (Sub (va, vb))) = Eq (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1087
  | minusinf (Eq (Mul (va, vb))) = Eq (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1088
  | minusinf (NEq (C va)) = NEq (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1089
  | minusinf (NEq (Bound va)) = NEq (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1090
  | minusinf (NEq (Neg va)) = NEq (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1091
  | minusinf (NEq (Add (va, vb))) = NEq (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1092
  | minusinf (NEq (Sub (va, vb))) = NEq (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1093
  | minusinf (NEq (Mul (va, vb))) = NEq (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1094
  | minusinf (Dvd (v, va)) = Dvd (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1095
  | minusinf (NDvd (v, va)) = NDvd (v, va)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1096
  | minusinf (Not v) = Not v
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1097
  | minusinf (Imp (v, va)) = Imp (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1098
  | minusinf (Iff (v, va)) = Iff (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1099
  | minusinf (E v) = E v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1100
  | minusinf (A v) = A v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1101
  | minusinf (Closed v) = Closed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1102
  | minusinf (NClosed v) = NClosed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1103
  | minusinf (Lt (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1104
    (if equal_nat vd zero_nat then T
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1105
      else Lt (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1106
  | minusinf (Le (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1107
    (if equal_nat vd zero_nat then T
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1108
      else Le (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1109
  | minusinf (Gt (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1110
    (if equal_nat vd zero_nat then F
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1111
      else Gt (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1112
  | minusinf (Ge (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1113
    (if equal_nat vd zero_nat then F
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1114
      else Ge (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1115
  | minusinf (Eq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1116
    (if equal_nat vd zero_nat then F
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1117
      else Eq (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1118
  | minusinf (NEq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1119
    (if equal_nat vd zero_nat then T
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1120
      else NEq (CN (suc (minus_nat vd one_nat), c, e)));
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1121
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1122
fun map f [] = []
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1123
  | map f (x21 :: x22) = f x21 :: map f x22;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1124
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1125
fun numsubst0 t (C c) = C c
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1126
  | numsubst0 t (Bound n) = (if equal_nat n zero_nat then t else Bound n)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1127
  | numsubst0 t (Neg a) = Neg (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1128
  | numsubst0 t (Add (a, b)) = Add (numsubst0 t a, numsubst0 t b)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1129
  | numsubst0 t (Sub (a, b)) = Sub (numsubst0 t a, numsubst0 t b)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1130
  | numsubst0 t (Mul (i, a)) = Mul (i, numsubst0 t a)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1131
  | numsubst0 t (CN (v, i, a)) =
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1132
    (if equal_nat v zero_nat then Add (Mul (i, t), numsubst0 t a)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1133
      else CN (suc (minus_nat v one_nat), i, numsubst0 t a));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1134
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1135
fun subst0 t T = T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1136
  | subst0 t F = F
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1137
  | subst0 t (Lt a) = Lt (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1138
  | subst0 t (Le a) = Le (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1139
  | subst0 t (Gt a) = Gt (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1140
  | subst0 t (Ge a) = Ge (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1141
  | subst0 t (Eq a) = Eq (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1142
  | subst0 t (NEq a) = NEq (numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1143
  | subst0 t (Dvd (i, a)) = Dvd (i, numsubst0 t a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1144
  | subst0 t (NDvd (i, a)) = NDvd (i, numsubst0 t a)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1145
  | subst0 t (Not p) = Not (subst0 t p)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1146
  | subst0 t (And (p, q)) = And (subst0 t p, subst0 t q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1147
  | subst0 t (Or (p, q)) = Or (subst0 t p, subst0 t q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1148
  | subst0 t (Imp (p, q)) = Imp (subst0 t p, subst0 t q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1149
  | subst0 t (Iff (p, q)) = Iff (subst0 t p, subst0 t q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1150
  | subst0 t (Closed p) = Closed p
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1151
  | subst0 t (NClosed p) = NClosed p;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1152
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1153
fun less_eq_int k l = integer_of_int k <= integer_of_int l;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1154
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1155
fun less_int k l = integer_of_int k < integer_of_int l;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1156
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1157
fun uminus_int k = Int_of_integer (~ (integer_of_int k));
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1158
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1159
fun abs_int i = (if less_int i zero_inta then uminus_int i else i);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1160
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1161
fun dvd (A1_, A2_) a b =
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1162
  eq A1_
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1163
    (modulo ((modulo_semiring_modulo o semiring_modulo_semidom_modulo) A2_) b a)
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1164
    (zero ((zero_mult_zero o mult_zero_semiring_0 o semiring_0_semiring_1 o
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1165
             semiring_1_comm_semiring_1 o
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1166
             comm_semiring_1_comm_semiring_1_cancel o
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1167
             comm_semiring_1_cancel_semidom o semidom_semidom_divide o
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1168
             semidom_divide_algebraic_semidom o
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1169
             algebraic_semidom_semidom_modulo)
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1170
            A2_));
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1171
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1172
fun nummul i (C j) = C (times_inta i j)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1173
  | nummul i (CN (n, c, t)) = CN (n, times_inta c i, nummul i t)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1174
  | nummul i (Bound v) = Mul (i, Bound v)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1175
  | nummul i (Neg v) = Mul (i, Neg v)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1176
  | nummul i (Add (v, va)) = Mul (i, Add (v, va))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1177
  | nummul i (Sub (v, va)) = Mul (i, Sub (v, va))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1178
  | nummul i (Mul (v, va)) = Mul (i, Mul (v, va));
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1179
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1180
fun numneg t = nummul (uminus_int one_inta) t;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1181
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1182
fun less_eq_nat m n = integer_of_nat m <= integer_of_nat n;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1183
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1184
fun numadd (CN (n1, c1, r1)) (CN (n2, c2, r2)) =
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1185
  (if equal_nat n1 n2
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1186
    then let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1187
           val c = plus_inta c1 c2;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1188
         in
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1189
           (if equal_inta c zero_inta then numadd r1 r2
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1190
             else CN (n1, c, numadd r1 r2))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1191
         end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1192
    else (if less_eq_nat n1 n2
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1193
           then CN (n1, c1, numadd r1 (Add (Mul (c2, Bound n2), r2)))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1194
           else CN (n2, c2, numadd (Add (Mul (c1, Bound n1), r1)) r2)))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1195
  | numadd (CN (n1, c1, r1)) (C v) = CN (n1, c1, numadd r1 (C v))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1196
  | numadd (CN (n1, c1, r1)) (Bound v) = CN (n1, c1, numadd r1 (Bound v))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1197
  | numadd (CN (n1, c1, r1)) (Neg v) = CN (n1, c1, numadd r1 (Neg v))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1198
  | numadd (CN (n1, c1, r1)) (Add (v, va)) =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1199
    CN (n1, c1, numadd r1 (Add (v, va)))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1200
  | numadd (CN (n1, c1, r1)) (Sub (v, va)) =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1201
    CN (n1, c1, numadd r1 (Sub (v, va)))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1202
  | numadd (CN (n1, c1, r1)) (Mul (v, va)) =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1203
    CN (n1, c1, numadd r1 (Mul (v, va)))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1204
  | numadd (C v) (CN (n2, c2, r2)) = CN (n2, c2, numadd (C v) r2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1205
  | numadd (Bound v) (CN (n2, c2, r2)) = CN (n2, c2, numadd (Bound v) r2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1206
  | numadd (Neg v) (CN (n2, c2, r2)) = CN (n2, c2, numadd (Neg v) r2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1207
  | numadd (Add (v, va)) (CN (n2, c2, r2)) =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1208
    CN (n2, c2, numadd (Add (v, va)) r2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1209
  | numadd (Sub (v, va)) (CN (n2, c2, r2)) =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1210
    CN (n2, c2, numadd (Sub (v, va)) r2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1211
  | numadd (Mul (v, va)) (CN (n2, c2, r2)) =
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1212
    CN (n2, c2, numadd (Mul (v, va)) r2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1213
  | numadd (C b1) (C b2) = C (plus_inta b1 b2)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1214
  | numadd (C v) (Bound va) = Add (C v, Bound va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1215
  | numadd (C v) (Neg va) = Add (C v, Neg va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1216
  | numadd (C v) (Add (va, vb)) = Add (C v, Add (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1217
  | numadd (C v) (Sub (va, vb)) = Add (C v, Sub (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1218
  | numadd (C v) (Mul (va, vb)) = Add (C v, Mul (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1219
  | numadd (Bound v) (C va) = Add (Bound v, C va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1220
  | numadd (Bound v) (Bound va) = Add (Bound v, Bound va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1221
  | numadd (Bound v) (Neg va) = Add (Bound v, Neg va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1222
  | numadd (Bound v) (Add (va, vb)) = Add (Bound v, Add (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1223
  | numadd (Bound v) (Sub (va, vb)) = Add (Bound v, Sub (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1224
  | numadd (Bound v) (Mul (va, vb)) = Add (Bound v, Mul (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1225
  | numadd (Neg v) (C va) = Add (Neg v, C va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1226
  | numadd (Neg v) (Bound va) = Add (Neg v, Bound va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1227
  | numadd (Neg v) (Neg va) = Add (Neg v, Neg va)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1228
  | numadd (Neg v) (Add (va, vb)) = Add (Neg v, Add (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1229
  | numadd (Neg v) (Sub (va, vb)) = Add (Neg v, Sub (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1230
  | numadd (Neg v) (Mul (va, vb)) = Add (Neg v, Mul (va, vb))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1231
  | numadd (Add (v, va)) (C vb) = Add (Add (v, va), C vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1232
  | numadd (Add (v, va)) (Bound vb) = Add (Add (v, va), Bound vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1233
  | numadd (Add (v, va)) (Neg vb) = Add (Add (v, va), Neg vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1234
  | numadd (Add (v, va)) (Add (vb, vc)) = Add (Add (v, va), Add (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1235
  | numadd (Add (v, va)) (Sub (vb, vc)) = Add (Add (v, va), Sub (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1236
  | numadd (Add (v, va)) (Mul (vb, vc)) = Add (Add (v, va), Mul (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1237
  | numadd (Sub (v, va)) (C vb) = Add (Sub (v, va), C vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1238
  | numadd (Sub (v, va)) (Bound vb) = Add (Sub (v, va), Bound vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1239
  | numadd (Sub (v, va)) (Neg vb) = Add (Sub (v, va), Neg vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1240
  | numadd (Sub (v, va)) (Add (vb, vc)) = Add (Sub (v, va), Add (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1241
  | numadd (Sub (v, va)) (Sub (vb, vc)) = Add (Sub (v, va), Sub (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1242
  | numadd (Sub (v, va)) (Mul (vb, vc)) = Add (Sub (v, va), Mul (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1243
  | numadd (Mul (v, va)) (C vb) = Add (Mul (v, va), C vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1244
  | numadd (Mul (v, va)) (Bound vb) = Add (Mul (v, va), Bound vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1245
  | numadd (Mul (v, va)) (Neg vb) = Add (Mul (v, va), Neg vb)
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1246
  | numadd (Mul (v, va)) (Add (vb, vc)) = Add (Mul (v, va), Add (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1247
  | numadd (Mul (v, va)) (Sub (vb, vc)) = Add (Mul (v, va), Sub (vb, vc))
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1248
  | numadd (Mul (v, va)) (Mul (vb, vc)) = Add (Mul (v, va), Mul (vb, vc));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1249
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1250
fun numsub s t = (if equal_numa s t then C zero_inta else numadd s (numneg t));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1251
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1252
fun simpnum (C j) = C j
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1253
  | simpnum (Bound n) = CN (n, one_inta, C zero_inta)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1254
  | simpnum (Neg t) = numneg (simpnum t)
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1255
  | simpnum (Add (t, s)) = numadd (simpnum t) (simpnum s)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1256
  | simpnum (Sub (t, s)) = numsub (simpnum t) (simpnum s)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1257
  | simpnum (Mul (i, t)) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1258
    (if equal_inta i zero_inta then C zero_inta else nummul i (simpnum t))
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1259
  | simpnum (CN (v, va, vb)) = CN (v, va, vb);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1260
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1261
fun disj p q =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1262
  (if equal_fm p T orelse equal_fm q T then T
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1263
    else (if equal_fm p F then q else (if equal_fm q F then p else Or (p, q))));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1264
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1265
fun conj p q =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1266
  (if equal_fm p F orelse equal_fm q F then F
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1267
    else (if equal_fm p T then q
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1268
           else (if equal_fm q T then p else And (p, q))));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1269
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1270
fun nota (Not p) = p
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1271
  | nota T = F
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1272
  | nota F = T
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1273
  | nota (Lt v) = Not (Lt v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1274
  | nota (Le v) = Not (Le v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1275
  | nota (Gt v) = Not (Gt v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1276
  | nota (Ge v) = Not (Ge v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1277
  | nota (Eq v) = Not (Eq v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1278
  | nota (NEq v) = Not (NEq v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1279
  | nota (Dvd (v, va)) = Not (Dvd (v, va))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1280
  | nota (NDvd (v, va)) = Not (NDvd (v, va))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1281
  | nota (And (v, va)) = Not (And (v, va))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1282
  | nota (Or (v, va)) = Not (Or (v, va))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1283
  | nota (Imp (v, va)) = Not (Imp (v, va))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1284
  | nota (Iff (v, va)) = Not (Iff (v, va))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1285
  | nota (E v) = Not (E v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1286
  | nota (A v) = Not (A v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1287
  | nota (Closed v) = Not (Closed v)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1288
  | nota (NClosed v) = Not (NClosed v);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1289
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1290
fun imp p q =
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1291
  (if equal_fm p F orelse equal_fm q T then T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1292
    else (if equal_fm p T then q
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1293
           else (if equal_fm q F then nota p else Imp (p, q))));
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1294
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1295
fun iff p q =
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1296
  (if equal_fm p q then T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1297
    else (if equal_fm p (nota q) orelse equal_fm (nota p) q then F
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1298
           else (if equal_fm p F then nota q
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1299
                  else (if equal_fm q F then nota p
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1300
                         else (if equal_fm p T then q
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1301
                                else (if equal_fm q T then p
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1302
                                       else Iff (p, q)))))));
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1303
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1304
fun simpfm (And (p, q)) = conj (simpfm p) (simpfm q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1305
  | simpfm (Or (p, q)) = disj (simpfm p) (simpfm q)
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1306
  | simpfm (Imp (p, q)) = imp (simpfm p) (simpfm q)
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1307
  | simpfm (Iff (p, q)) = iff (simpfm p) (simpfm q)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1308
  | simpfm (Not p) = nota (simpfm p)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1309
  | simpfm (Lt a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1310
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1311
      val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1312
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1313
      (case aa of C v => (if less_int v zero_inta then T else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1314
        | Bound _ => Lt aa | CN (_, _, _) => Lt aa | Neg _ => Lt aa
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1315
        | Add (_, _) => Lt aa | Sub (_, _) => Lt aa | Mul (_, _) => Lt aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1316
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1317
  | simpfm (Le a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1318
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1319
      val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1320
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1321
      (case aa of C v => (if less_eq_int v zero_inta then T else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1322
        | Bound _ => Le aa | CN (_, _, _) => Le aa | Neg _ => Le aa
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1323
        | Add (_, _) => Le aa | Sub (_, _) => Le aa | Mul (_, _) => Le aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1324
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1325
  | simpfm (Gt a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1326
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1327
      val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1328
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1329
      (case aa of C v => (if less_int zero_inta v then T else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1330
        | Bound _ => Gt aa | CN (_, _, _) => Gt aa | Neg _ => Gt aa
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1331
        | Add (_, _) => Gt aa | Sub (_, _) => Gt aa | Mul (_, _) => Gt aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1332
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1333
  | simpfm (Ge a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1334
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1335
      val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1336
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1337
      (case aa of C v => (if less_eq_int zero_inta v then T else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1338
        | Bound _ => Ge aa | CN (_, _, _) => Ge aa | Neg _ => Ge aa
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1339
        | Add (_, _) => Ge aa | Sub (_, _) => Ge aa | Mul (_, _) => Ge aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1340
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1341
  | simpfm (Eq a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1342
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1343
      val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1344
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1345
      (case aa of C v => (if equal_inta v zero_inta then T else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1346
        | Bound _ => Eq aa | CN (_, _, _) => Eq aa | Neg _ => Eq aa
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1347
        | Add (_, _) => Eq aa | Sub (_, _) => Eq aa | Mul (_, _) => Eq aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1348
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1349
  | simpfm (NEq a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1350
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1351
      val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1352
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1353
      (case aa of C v => (if not (equal_inta v zero_inta) then T else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1354
        | Bound _ => NEq aa | CN (_, _, _) => NEq aa | Neg _ => NEq aa
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1355
        | Add (_, _) => NEq aa | Sub (_, _) => NEq aa | Mul (_, _) => NEq aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1356
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1357
  | simpfm (Dvd (i, a)) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1358
    (if equal_inta i zero_inta then simpfm (Eq a)
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1359
      else (if equal_inta (abs_int i) one_inta then T
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1360
             else let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1361
                    val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1362
                  in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1363
                    (case aa
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1364
                      of C v =>
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1365
                        (if dvd (equal_int, semidom_modulo_int) i v then T
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1366
                          else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1367
                      | Bound _ => Dvd (i, aa) | CN (_, _, _) => Dvd (i, aa)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1368
                      | Neg _ => Dvd (i, aa) | Add (_, _) => Dvd (i, aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1369
                      | Sub (_, _) => Dvd (i, aa) | Mul (_, _) => Dvd (i, aa))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1370
                  end))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1371
  | simpfm (NDvd (i, a)) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1372
    (if equal_inta i zero_inta then simpfm (NEq a)
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1373
      else (if equal_inta (abs_int i) one_inta then F
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1374
             else let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1375
                    val aa = simpnum a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1376
                  in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1377
                    (case aa
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1378
                      of C v =>
70093
e38900000009 regenerated using isabelle regenerate_cooper
haftmann
parents: 65024
diff changeset
  1379
                        (if not (dvd (equal_int, semidom_modulo_int) i v) then T
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1380
                          else F)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1381
                      | Bound _ => NDvd (i, aa) | CN (_, _, _) => NDvd (i, aa)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1382
                      | Neg _ => NDvd (i, aa) | Add (_, _) => NDvd (i, aa)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1383
                      | Sub (_, _) => NDvd (i, aa) | Mul (_, _) => NDvd (i, aa))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1384
                  end))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1385
  | simpfm T = T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1386
  | simpfm F = F
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1387
  | simpfm (E v) = E v
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1388
  | simpfm (A v) = A v
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1389
  | simpfm (Closed v) = Closed v
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1390
  | simpfm (NClosed v) = NClosed v;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1391
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1392
fun gen_length n (x :: xs) = gen_length (suc n) xs
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1393
  | gen_length n [] = n;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1394
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1395
fun size_list x = gen_length zero_nat x;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1396
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1397
fun a_beta (And (p, q)) k = And (a_beta p k, a_beta q k)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1398
  | a_beta (Or (p, q)) k = Or (a_beta p k, a_beta q k)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1399
  | a_beta T k = T
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1400
  | a_beta F k = F
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1401
  | a_beta (Lt (C va)) k = Lt (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1402
  | a_beta (Lt (Bound va)) k = Lt (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1403
  | a_beta (Lt (Neg va)) k = Lt (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1404
  | a_beta (Lt (Add (va, vb))) k = Lt (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1405
  | a_beta (Lt (Sub (va, vb))) k = Lt (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1406
  | a_beta (Lt (Mul (va, vb))) k = Lt (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1407
  | a_beta (Le (C va)) k = Le (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1408
  | a_beta (Le (Bound va)) k = Le (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1409
  | a_beta (Le (Neg va)) k = Le (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1410
  | a_beta (Le (Add (va, vb))) k = Le (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1411
  | a_beta (Le (Sub (va, vb))) k = Le (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1412
  | a_beta (Le (Mul (va, vb))) k = Le (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1413
  | a_beta (Gt (C va)) k = Gt (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1414
  | a_beta (Gt (Bound va)) k = Gt (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1415
  | a_beta (Gt (Neg va)) k = Gt (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1416
  | a_beta (Gt (Add (va, vb))) k = Gt (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1417
  | a_beta (Gt (Sub (va, vb))) k = Gt (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1418
  | a_beta (Gt (Mul (va, vb))) k = Gt (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1419
  | a_beta (Ge (C va)) k = Ge (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1420
  | a_beta (Ge (Bound va)) k = Ge (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1421
  | a_beta (Ge (Neg va)) k = Ge (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1422
  | a_beta (Ge (Add (va, vb))) k = Ge (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1423
  | a_beta (Ge (Sub (va, vb))) k = Ge (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1424
  | a_beta (Ge (Mul (va, vb))) k = Ge (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1425
  | a_beta (Eq (C va)) k = Eq (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1426
  | a_beta (Eq (Bound va)) k = Eq (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1427
  | a_beta (Eq (Neg va)) k = Eq (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1428
  | a_beta (Eq (Add (va, vb))) k = Eq (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1429
  | a_beta (Eq (Sub (va, vb))) k = Eq (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1430
  | a_beta (Eq (Mul (va, vb))) k = Eq (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1431
  | a_beta (NEq (C va)) k = NEq (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1432
  | a_beta (NEq (Bound va)) k = NEq (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1433
  | a_beta (NEq (Neg va)) k = NEq (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1434
  | a_beta (NEq (Add (va, vb))) k = NEq (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1435
  | a_beta (NEq (Sub (va, vb))) k = NEq (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1436
  | a_beta (NEq (Mul (va, vb))) k = NEq (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1437
  | a_beta (Dvd (v, C vb)) k = Dvd (v, C vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1438
  | a_beta (Dvd (v, Bound vb)) k = Dvd (v, Bound vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1439
  | a_beta (Dvd (v, Neg vb)) k = Dvd (v, Neg vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1440
  | a_beta (Dvd (v, Add (vb, vc))) k = Dvd (v, Add (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1441
  | a_beta (Dvd (v, Sub (vb, vc))) k = Dvd (v, Sub (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1442
  | a_beta (Dvd (v, Mul (vb, vc))) k = Dvd (v, Mul (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1443
  | a_beta (NDvd (v, C vb)) k = NDvd (v, C vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1444
  | a_beta (NDvd (v, Bound vb)) k = NDvd (v, Bound vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1445
  | a_beta (NDvd (v, Neg vb)) k = NDvd (v, Neg vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1446
  | a_beta (NDvd (v, Add (vb, vc))) k = NDvd (v, Add (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1447
  | a_beta (NDvd (v, Sub (vb, vc))) k = NDvd (v, Sub (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1448
  | a_beta (NDvd (v, Mul (vb, vc))) k = NDvd (v, Mul (vb, vc))
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1449
  | a_beta (Not v) k = Not v
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1450
  | a_beta (Imp (v, va)) k = Imp (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1451
  | a_beta (Iff (v, va)) k = Iff (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1452
  | a_beta (E v) k = E v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1453
  | a_beta (A v) k = A v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1454
  | a_beta (Closed v) k = Closed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1455
  | a_beta (NClosed v) k = NClosed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1456
  | a_beta (Lt (CN (vd, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1457
    (if equal_nat vd zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1458
      then Lt (CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1459
      else Lt (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1460
  | a_beta (Le (CN (vd, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1461
    (if equal_nat vd zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1462
      then Le (CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1463
      else Le (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1464
  | a_beta (Gt (CN (vd, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1465
    (if equal_nat vd zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1466
      then Gt (CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1467
      else Gt (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1468
  | a_beta (Ge (CN (vd, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1469
    (if equal_nat vd zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1470
      then Ge (CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1471
      else Ge (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1472
  | a_beta (Eq (CN (vd, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1473
    (if equal_nat vd zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1474
      then Eq (CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1475
      else Eq (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1476
  | a_beta (NEq (CN (vd, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1477
    (if equal_nat vd zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1478
      then NEq (CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1479
      else NEq (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1480
  | a_beta (Dvd (i, CN (ve, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1481
    (if equal_nat ve zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1482
      then Dvd (times_inta (divide_inta k c) i,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1483
                 CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1484
      else Dvd (i, CN (suc (minus_nat ve one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1485
  | a_beta (NDvd (i, CN (ve, c, e))) k =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1486
    (if equal_nat ve zero_nat
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1487
      then NDvd (times_inta (divide_inta k c) i,
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1488
                  CN (zero_nat, one_inta, Mul (divide_inta k c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1489
      else NDvd (i, CN (suc (minus_nat ve one_nat), c, e)));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1490
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1491
fun gcd_integer k l =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1492
  abs (if l = (0 : IntInf.int) then k
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1493
        else gcd_integer l (modulo_integer (abs k) (abs l)));
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1494
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1495
fun lcm_integer a b = divide_integer (abs a * abs b) (gcd_integer a b);
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1496
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1497
fun lcm_int (Int_of_integer x) (Int_of_integer y) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1498
  Int_of_integer (lcm_integer x y);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1499
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1500
fun delta (And (p, q)) = lcm_int (delta p) (delta q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1501
  | delta (Or (p, q)) = lcm_int (delta p) (delta q)
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1502
  | delta T = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1503
  | delta F = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1504
  | delta (Lt v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1505
  | delta (Le v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1506
  | delta (Gt v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1507
  | delta (Ge v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1508
  | delta (Eq v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1509
  | delta (NEq v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1510
  | delta (Dvd (v, C vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1511
  | delta (Dvd (v, Bound vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1512
  | delta (Dvd (v, Neg vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1513
  | delta (Dvd (v, Add (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1514
  | delta (Dvd (v, Sub (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1515
  | delta (Dvd (v, Mul (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1516
  | delta (NDvd (v, C vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1517
  | delta (NDvd (v, Bound vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1518
  | delta (NDvd (v, Neg vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1519
  | delta (NDvd (v, Add (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1520
  | delta (NDvd (v, Sub (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1521
  | delta (NDvd (v, Mul (vb, vc))) = one_inta
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1522
  | delta (Not v) = one_inta
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1523
  | delta (Imp (v, va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1524
  | delta (Iff (v, va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1525
  | delta (E v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1526
  | delta (A v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1527
  | delta (Closed v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1528
  | delta (NClosed v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1529
  | delta (Dvd (i, CN (ve, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1530
    (if equal_nat ve zero_nat then i else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1531
  | delta (NDvd (i, CN (ve, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1532
    (if equal_nat ve zero_nat then i else one_inta);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1533
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1534
fun alpha (And (p, q)) = alpha p @ alpha q
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1535
  | alpha (Or (p, q)) = alpha p @ alpha q
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1536
  | alpha T = []
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1537
  | alpha F = []
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1538
  | alpha (Lt (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1539
  | alpha (Lt (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1540
  | alpha (Lt (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1541
  | alpha (Lt (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1542
  | alpha (Lt (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1543
  | alpha (Lt (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1544
  | alpha (Le (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1545
  | alpha (Le (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1546
  | alpha (Le (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1547
  | alpha (Le (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1548
  | alpha (Le (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1549
  | alpha (Le (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1550
  | alpha (Gt (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1551
  | alpha (Gt (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1552
  | alpha (Gt (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1553
  | alpha (Gt (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1554
  | alpha (Gt (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1555
  | alpha (Gt (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1556
  | alpha (Ge (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1557
  | alpha (Ge (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1558
  | alpha (Ge (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1559
  | alpha (Ge (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1560
  | alpha (Ge (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1561
  | alpha (Ge (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1562
  | alpha (Eq (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1563
  | alpha (Eq (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1564
  | alpha (Eq (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1565
  | alpha (Eq (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1566
  | alpha (Eq (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1567
  | alpha (Eq (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1568
  | alpha (NEq (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1569
  | alpha (NEq (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1570
  | alpha (NEq (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1571
  | alpha (NEq (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1572
  | alpha (NEq (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1573
  | alpha (NEq (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1574
  | alpha (Dvd (v, va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1575
  | alpha (NDvd (v, va)) = []
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1576
  | alpha (Not v) = []
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1577
  | alpha (Imp (v, va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1578
  | alpha (Iff (v, va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1579
  | alpha (E v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1580
  | alpha (A v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1581
  | alpha (Closed v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1582
  | alpha (NClosed v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1583
  | alpha (Lt (CN (vd, c, e))) = (if equal_nat vd zero_nat then [e] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1584
  | alpha (Le (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1585
    (if equal_nat vd zero_nat then [Add (C (uminus_int one_inta), e)] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1586
  | alpha (Gt (CN (vd, c, e))) = (if equal_nat vd zero_nat then [] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1587
  | alpha (Ge (CN (vd, c, e))) = (if equal_nat vd zero_nat then [] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1588
  | alpha (Eq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1589
    (if equal_nat vd zero_nat then [Add (C (uminus_int one_inta), e)] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1590
  | alpha (NEq (CN (vd, c, e))) = (if equal_nat vd zero_nat then [e] else []);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1591
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1592
fun zeta (And (p, q)) = lcm_int (zeta p) (zeta q)
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1593
  | zeta (Or (p, q)) = lcm_int (zeta p) (zeta q)
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1594
  | zeta T = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1595
  | zeta F = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1596
  | zeta (Lt (C va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1597
  | zeta (Lt (Bound va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1598
  | zeta (Lt (Neg va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1599
  | zeta (Lt (Add (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1600
  | zeta (Lt (Sub (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1601
  | zeta (Lt (Mul (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1602
  | zeta (Le (C va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1603
  | zeta (Le (Bound va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1604
  | zeta (Le (Neg va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1605
  | zeta (Le (Add (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1606
  | zeta (Le (Sub (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1607
  | zeta (Le (Mul (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1608
  | zeta (Gt (C va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1609
  | zeta (Gt (Bound va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1610
  | zeta (Gt (Neg va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1611
  | zeta (Gt (Add (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1612
  | zeta (Gt (Sub (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1613
  | zeta (Gt (Mul (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1614
  | zeta (Ge (C va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1615
  | zeta (Ge (Bound va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1616
  | zeta (Ge (Neg va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1617
  | zeta (Ge (Add (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1618
  | zeta (Ge (Sub (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1619
  | zeta (Ge (Mul (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1620
  | zeta (Eq (C va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1621
  | zeta (Eq (Bound va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1622
  | zeta (Eq (Neg va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1623
  | zeta (Eq (Add (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1624
  | zeta (Eq (Sub (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1625
  | zeta (Eq (Mul (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1626
  | zeta (NEq (C va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1627
  | zeta (NEq (Bound va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1628
  | zeta (NEq (Neg va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1629
  | zeta (NEq (Add (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1630
  | zeta (NEq (Sub (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1631
  | zeta (NEq (Mul (va, vb))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1632
  | zeta (Dvd (v, C vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1633
  | zeta (Dvd (v, Bound vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1634
  | zeta (Dvd (v, Neg vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1635
  | zeta (Dvd (v, Add (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1636
  | zeta (Dvd (v, Sub (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1637
  | zeta (Dvd (v, Mul (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1638
  | zeta (NDvd (v, C vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1639
  | zeta (NDvd (v, Bound vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1640
  | zeta (NDvd (v, Neg vb)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1641
  | zeta (NDvd (v, Add (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1642
  | zeta (NDvd (v, Sub (vb, vc))) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1643
  | zeta (NDvd (v, Mul (vb, vc))) = one_inta
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1644
  | zeta (Not v) = one_inta
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1645
  | zeta (Imp (v, va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1646
  | zeta (Iff (v, va)) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1647
  | zeta (E v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1648
  | zeta (A v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1649
  | zeta (Closed v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1650
  | zeta (NClosed v) = one_inta
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1651
  | zeta (Lt (CN (vd, c, e))) = (if equal_nat vd zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1652
  | zeta (Le (CN (vd, c, e))) = (if equal_nat vd zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1653
  | zeta (Gt (CN (vd, c, e))) = (if equal_nat vd zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1654
  | zeta (Ge (CN (vd, c, e))) = (if equal_nat vd zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1655
  | zeta (Eq (CN (vd, c, e))) = (if equal_nat vd zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1656
  | zeta (NEq (CN (vd, c, e))) = (if equal_nat vd zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1657
  | zeta (Dvd (i, CN (ve, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1658
    (if equal_nat ve zero_nat then c else one_inta)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1659
  | zeta (NDvd (i, CN (ve, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1660
    (if equal_nat ve zero_nat then c else one_inta);
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1661
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1662
fun beta (And (p, q)) = beta p @ beta q
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1663
  | beta (Or (p, q)) = beta p @ beta q
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1664
  | beta T = []
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1665
  | beta F = []
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1666
  | beta (Lt (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1667
  | beta (Lt (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1668
  | beta (Lt (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1669
  | beta (Lt (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1670
  | beta (Lt (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1671
  | beta (Lt (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1672
  | beta (Le (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1673
  | beta (Le (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1674
  | beta (Le (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1675
  | beta (Le (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1676
  | beta (Le (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1677
  | beta (Le (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1678
  | beta (Gt (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1679
  | beta (Gt (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1680
  | beta (Gt (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1681
  | beta (Gt (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1682
  | beta (Gt (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1683
  | beta (Gt (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1684
  | beta (Ge (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1685
  | beta (Ge (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1686
  | beta (Ge (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1687
  | beta (Ge (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1688
  | beta (Ge (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1689
  | beta (Ge (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1690
  | beta (Eq (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1691
  | beta (Eq (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1692
  | beta (Eq (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1693
  | beta (Eq (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1694
  | beta (Eq (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1695
  | beta (Eq (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1696
  | beta (NEq (C va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1697
  | beta (NEq (Bound va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1698
  | beta (NEq (Neg va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1699
  | beta (NEq (Add (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1700
  | beta (NEq (Sub (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1701
  | beta (NEq (Mul (va, vb))) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1702
  | beta (Dvd (v, va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1703
  | beta (NDvd (v, va)) = []
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1704
  | beta (Not v) = []
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1705
  | beta (Imp (v, va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1706
  | beta (Iff (v, va)) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1707
  | beta (E v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1708
  | beta (A v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1709
  | beta (Closed v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1710
  | beta (NClosed v) = []
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1711
  | beta (Lt (CN (vd, c, e))) = (if equal_nat vd zero_nat then [] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1712
  | beta (Le (CN (vd, c, e))) = (if equal_nat vd zero_nat then [] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1713
  | beta (Gt (CN (vd, c, e))) = (if equal_nat vd zero_nat then [Neg e] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1714
  | beta (Ge (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1715
    (if equal_nat vd zero_nat then [Sub (C (uminus_int one_inta), e)] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1716
  | beta (Eq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1717
    (if equal_nat vd zero_nat then [Sub (C (uminus_int one_inta), e)] else [])
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1718
  | beta (NEq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1719
    (if equal_nat vd zero_nat then [Neg e] else []);
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1720
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1721
fun mirror (And (p, q)) = And (mirror p, mirror q)
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1722
  | mirror (Or (p, q)) = Or (mirror p, mirror q)
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1723
  | mirror T = T
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1724
  | mirror F = F
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1725
  | mirror (Lt (C va)) = Lt (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1726
  | mirror (Lt (Bound va)) = Lt (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1727
  | mirror (Lt (Neg va)) = Lt (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1728
  | mirror (Lt (Add (va, vb))) = Lt (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1729
  | mirror (Lt (Sub (va, vb))) = Lt (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1730
  | mirror (Lt (Mul (va, vb))) = Lt (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1731
  | mirror (Le (C va)) = Le (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1732
  | mirror (Le (Bound va)) = Le (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1733
  | mirror (Le (Neg va)) = Le (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1734
  | mirror (Le (Add (va, vb))) = Le (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1735
  | mirror (Le (Sub (va, vb))) = Le (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1736
  | mirror (Le (Mul (va, vb))) = Le (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1737
  | mirror (Gt (C va)) = Gt (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1738
  | mirror (Gt (Bound va)) = Gt (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1739
  | mirror (Gt (Neg va)) = Gt (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1740
  | mirror (Gt (Add (va, vb))) = Gt (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1741
  | mirror (Gt (Sub (va, vb))) = Gt (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1742
  | mirror (Gt (Mul (va, vb))) = Gt (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1743
  | mirror (Ge (C va)) = Ge (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1744
  | mirror (Ge (Bound va)) = Ge (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1745
  | mirror (Ge (Neg va)) = Ge (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1746
  | mirror (Ge (Add (va, vb))) = Ge (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1747
  | mirror (Ge (Sub (va, vb))) = Ge (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1748
  | mirror (Ge (Mul (va, vb))) = Ge (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1749
  | mirror (Eq (C va)) = Eq (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1750
  | mirror (Eq (Bound va)) = Eq (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1751
  | mirror (Eq (Neg va)) = Eq (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1752
  | mirror (Eq (Add (va, vb))) = Eq (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1753
  | mirror (Eq (Sub (va, vb))) = Eq (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1754
  | mirror (Eq (Mul (va, vb))) = Eq (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1755
  | mirror (NEq (C va)) = NEq (C va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1756
  | mirror (NEq (Bound va)) = NEq (Bound va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1757
  | mirror (NEq (Neg va)) = NEq (Neg va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1758
  | mirror (NEq (Add (va, vb))) = NEq (Add (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1759
  | mirror (NEq (Sub (va, vb))) = NEq (Sub (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1760
  | mirror (NEq (Mul (va, vb))) = NEq (Mul (va, vb))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1761
  | mirror (Dvd (v, C vb)) = Dvd (v, C vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1762
  | mirror (Dvd (v, Bound vb)) = Dvd (v, Bound vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1763
  | mirror (Dvd (v, Neg vb)) = Dvd (v, Neg vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1764
  | mirror (Dvd (v, Add (vb, vc))) = Dvd (v, Add (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1765
  | mirror (Dvd (v, Sub (vb, vc))) = Dvd (v, Sub (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1766
  | mirror (Dvd (v, Mul (vb, vc))) = Dvd (v, Mul (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1767
  | mirror (NDvd (v, C vb)) = NDvd (v, C vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1768
  | mirror (NDvd (v, Bound vb)) = NDvd (v, Bound vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1769
  | mirror (NDvd (v, Neg vb)) = NDvd (v, Neg vb)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1770
  | mirror (NDvd (v, Add (vb, vc))) = NDvd (v, Add (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1771
  | mirror (NDvd (v, Sub (vb, vc))) = NDvd (v, Sub (vb, vc))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1772
  | mirror (NDvd (v, Mul (vb, vc))) = NDvd (v, Mul (vb, vc))
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1773
  | mirror (Not v) = Not v
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1774
  | mirror (Imp (v, va)) = Imp (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1775
  | mirror (Iff (v, va)) = Iff (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1776
  | mirror (E v) = E v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1777
  | mirror (A v) = A v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1778
  | mirror (Closed v) = Closed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1779
  | mirror (NClosed v) = NClosed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1780
  | mirror (Lt (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1781
    (if equal_nat vd zero_nat then Gt (CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1782
      else Lt (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1783
  | mirror (Le (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1784
    (if equal_nat vd zero_nat then Ge (CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1785
      else Le (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1786
  | mirror (Gt (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1787
    (if equal_nat vd zero_nat then Lt (CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1788
      else Gt (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1789
  | mirror (Ge (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1790
    (if equal_nat vd zero_nat then Le (CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1791
      else Ge (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1792
  | mirror (Eq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1793
    (if equal_nat vd zero_nat then Eq (CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1794
      else Eq (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1795
  | mirror (NEq (CN (vd, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1796
    (if equal_nat vd zero_nat then NEq (CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1797
      else NEq (CN (suc (minus_nat vd one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1798
  | mirror (Dvd (i, CN (ve, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1799
    (if equal_nat ve zero_nat then Dvd (i, CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1800
      else Dvd (i, CN (suc (minus_nat ve one_nat), c, e)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1801
  | mirror (NDvd (i, CN (ve, c, e))) =
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1802
    (if equal_nat ve zero_nat then NDvd (i, CN (zero_nat, c, Neg e))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1803
      else NDvd (i, CN (suc (minus_nat ve one_nat), c, e)));
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1804
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1805
fun member A_ [] y = false
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1806
  | member A_ (x :: xs) y = eq A_ x y orelse member A_ xs y;
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1807
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1808
fun remdups A_ [] = []
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1809
  | remdups A_ (x :: xs) =
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1810
    (if member A_ xs x then remdups A_ xs else x :: remdups A_ xs);
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1811
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1812
fun zsplit0 (C c) = (zero_inta, C c)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1813
  | zsplit0 (Bound n) =
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1814
    (if equal_nat n zero_nat then (one_inta, C zero_inta)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1815
      else (zero_inta, Bound n))
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1816
  | zsplit0 (CN (n, i, a)) =
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1817
    let
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1818
      val (ia, aa) = zsplit0 a;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1819
    in
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1820
      (if equal_nat n zero_nat then (plus_inta i ia, aa)
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1821
        else (ia, CN (n, i, aa)))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1822
    end
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1823
  | zsplit0 (Neg a) = let
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1824
                        val (i, aa) = zsplit0 a;
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1825
                      in
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1826
                        (uminus_int i, Neg aa)
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1827
                      end
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1828
  | zsplit0 (Add (a, b)) = let
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1829
                             val (ia, aa) = zsplit0 a;
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1830
                             val (ib, ba) = zsplit0 b;
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1831
                           in
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1832
                             (plus_inta ia ib, Add (aa, ba))
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1833
                           end
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1834
  | zsplit0 (Sub (a, b)) = let
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1835
                             val (ia, aa) = zsplit0 a;
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1836
                             val (ib, ba) = zsplit0 b;
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1837
                           in
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1838
                             (minus_inta ia ib, Sub (aa, ba))
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1839
                           end
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1840
  | zsplit0 (Mul (i, a)) = let
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1841
                             val (ia, aa) = zsplit0 a;
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1842
                           in
75362
4b8da5eef9d0 regenerated
haftmann
parents: 75300
diff changeset
  1843
                             (times_inta i ia, Mul (i, aa))
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1844
                           end;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1845
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1846
fun zlfm (And (p, q)) = And (zlfm p, zlfm q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1847
  | zlfm (Or (p, q)) = Or (zlfm p, zlfm q)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1848
  | zlfm (Imp (p, q)) = Or (zlfm (Not p), zlfm q)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1849
  | zlfm (Iff (p, q)) =
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1850
    Or (And (zlfm p, zlfm q), And (zlfm (Not p), zlfm (Not q)))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1851
  | zlfm (Lt a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1852
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1853
      val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1854
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1855
      (if equal_inta c zero_inta then Lt r
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1856
        else (if less_int zero_inta c then Lt (CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1857
               else Gt (CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1858
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1859
  | zlfm (Le a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1860
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1861
      val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1862
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1863
      (if equal_inta c zero_inta then Le r
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1864
        else (if less_int zero_inta c then Le (CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1865
               else Ge (CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1866
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1867
  | zlfm (Gt a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1868
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1869
      val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1870
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1871
      (if equal_inta c zero_inta then Gt r
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1872
        else (if less_int zero_inta c then Gt (CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1873
               else Lt (CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1874
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1875
  | zlfm (Ge a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1876
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1877
      val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1878
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1879
      (if equal_inta c zero_inta then Ge r
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1880
        else (if less_int zero_inta c then Ge (CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1881
               else Le (CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1882
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1883
  | zlfm (Eq a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1884
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1885
      val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1886
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1887
      (if equal_inta c zero_inta then Eq r
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1888
        else (if less_int zero_inta c then Eq (CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1889
               else Eq (CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1890
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1891
  | zlfm (NEq a) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1892
    let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1893
      val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1894
    in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1895
      (if equal_inta c zero_inta then NEq r
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1896
        else (if less_int zero_inta c then NEq (CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1897
               else NEq (CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1898
    end
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1899
  | zlfm (Dvd (i, a)) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1900
    (if equal_inta i zero_inta then zlfm (Eq a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1901
      else let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1902
             val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1903
           in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1904
             (if equal_inta c zero_inta then Dvd (abs_int i, r)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1905
               else (if less_int zero_inta c
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1906
                      then Dvd (abs_int i, CN (zero_nat, c, r))
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1907
                      else Dvd (abs_int i, CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1908
           end)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1909
  | zlfm (NDvd (i, a)) =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1910
    (if equal_inta i zero_inta then zlfm (NEq a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1911
      else let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1912
             val (c, r) = zsplit0 a;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1913
           in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1914
             (if equal_inta c zero_inta then NDvd (abs_int i, r)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1915
               else (if less_int zero_inta c
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1916
                      then NDvd (abs_int i, CN (zero_nat, c, r))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1917
                      else NDvd (abs_int i,
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1918
                                  CN (zero_nat, uminus_int c, Neg r))))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1919
           end)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1920
  | zlfm (Not (And (p, q))) = Or (zlfm (Not p), zlfm (Not q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1921
  | zlfm (Not (Or (p, q))) = And (zlfm (Not p), zlfm (Not q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1922
  | zlfm (Not (Imp (p, q))) = And (zlfm p, zlfm (Not q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1923
  | zlfm (Not (Iff (p, q))) =
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1924
    Or (And (zlfm p, zlfm (Not q)), And (zlfm (Not p), zlfm q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1925
  | zlfm (Not (Not p)) = zlfm p
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1926
  | zlfm (Not T) = F
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1927
  | zlfm (Not F) = T
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1928
  | zlfm (Not (Lt a)) = zlfm (Ge a)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1929
  | zlfm (Not (Le a)) = zlfm (Gt a)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1930
  | zlfm (Not (Gt a)) = zlfm (Le a)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1931
  | zlfm (Not (Ge a)) = zlfm (Lt a)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1932
  | zlfm (Not (Eq a)) = zlfm (NEq a)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1933
  | zlfm (Not (NEq a)) = zlfm (Eq a)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1934
  | zlfm (Not (Dvd (i, a))) = zlfm (NDvd (i, a))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1935
  | zlfm (Not (NDvd (i, a))) = zlfm (Dvd (i, a))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1936
  | zlfm (Not (Closed p)) = NClosed p
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1937
  | zlfm (Not (NClosed p)) = Closed p
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1938
  | zlfm T = T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1939
  | zlfm F = F
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1940
  | zlfm (Not (E va)) = Not (E va)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1941
  | zlfm (Not (A va)) = Not (A va)
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1942
  | zlfm (E v) = E v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1943
  | zlfm (A v) = A v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1944
  | zlfm (Closed v) = Closed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1945
  | zlfm (NClosed v) = NClosed v;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1946
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1947
fun unita p =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1948
  let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1949
    val pa = zlfm p;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1950
    val l = zeta pa;
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1951
    val q = And (Dvd (l, CN (zero_nat, one_inta, C zero_inta)), a_beta pa l);
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1952
    val d = delta q;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1953
    val b = remdups equal_num (map simpnum (beta q));
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1954
    val a = remdups equal_num (map simpnum (alpha q));
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1955
  in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1956
    (if less_eq_nat (size_list b) (size_list a) then (q, (b, d))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1957
      else (mirror q, (a, d)))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1958
  end;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1959
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1960
fun decrnum (Bound n) = Bound (minus_nat n one_nat)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1961
  | decrnum (Neg a) = Neg (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1962
  | decrnum (Add (a, b)) = Add (decrnum a, decrnum b)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1963
  | decrnum (Sub (a, b)) = Sub (decrnum a, decrnum b)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1964
  | decrnum (Mul (c, a)) = Mul (c, decrnum a)
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  1965
  | decrnum (CN (n, i, a)) = CN (minus_nat n one_nat, i, decrnum a)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1966
  | decrnum (C v) = C v;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1967
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1968
fun decr (Lt a) = Lt (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1969
  | decr (Le a) = Le (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1970
  | decr (Gt a) = Gt (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1971
  | decr (Ge a) = Ge (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1972
  | decr (Eq a) = Eq (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1973
  | decr (NEq a) = NEq (decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1974
  | decr (Dvd (i, a)) = Dvd (i, decrnum a)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1975
  | decr (NDvd (i, a)) = NDvd (i, decrnum a)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  1976
  | decr (Not p) = Not (decr p)
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1977
  | decr (And (p, q)) = And (decr p, decr q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1978
  | decr (Or (p, q)) = Or (decr p, decr q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1979
  | decr (Imp (p, q)) = Imp (decr p, decr q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1980
  | decr (Iff (p, q)) = Iff (decr p, decr q)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1981
  | decr T = T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1982
  | decr F = F
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1983
  | decr (E v) = E v
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1984
  | decr (A v) = A v
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1985
  | decr (Closed v) = Closed v
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1986
  | decr (NClosed v) = NClosed v;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1987
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1988
fun upto_aux i j js =
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1989
  (if less_int j i then js else upto_aux i (minus_inta j one_inta) (j :: js));
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1990
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  1991
fun uptoa i j = upto_aux i j [];
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1992
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1993
fun maps f [] = []
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1994
  | maps f (x :: xs) = f x @ maps f xs;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1995
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1996
fun cooper p =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1997
  let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  1998
    val (q, (b, d)) = unita p;
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  1999
    val js = uptoa one_inta d;
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2000
    val mq = simpfm (minusinf q);
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2001
    val md = evaldjf (fn j => simpfm (subst0 (C j) mq)) js;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2002
  in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2003
    (if equal_fm md T then T
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2004
      else let
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2005
             val qd =
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2006
               evaldjf (fn (ba, j) => simpfm (subst0 (Add (ba, C j)) q))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2007
                 (maps (fn ba => map (fn a => (ba, a)) js) b);
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2008
           in
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2009
             decr (disj md qd)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2010
           end)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2011
  end;
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2012
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2013
fun qelim (E p) = (fn qe => dj qe (qelim p qe))
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2014
  | qelim (A p) = (fn qe => nota (qe (qelim (Not p) qe)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2015
  | qelim (Not p) = (fn qe => nota (qelim p qe))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2016
  | qelim (And (p, q)) = (fn qe => conj (qelim p qe) (qelim q qe))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2017
  | qelim (Or (p, q)) = (fn qe => disj (qelim p qe) (qelim q qe))
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  2018
  | qelim (Imp (p, q)) = (fn qe => imp (qelim p qe) (qelim q qe))
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  2019
  | qelim (Iff (p, q)) = (fn qe => iff (qelim p qe) (qelim q qe))
51143
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2020
  | qelim T = (fn _ => simpfm T)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2021
  | qelim F = (fn _ => simpfm F)
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2022
  | qelim (Lt v) = (fn _ => simpfm (Lt v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2023
  | qelim (Le v) = (fn _ => simpfm (Le v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2024
  | qelim (Gt v) = (fn _ => simpfm (Gt v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2025
  | qelim (Ge v) = (fn _ => simpfm (Ge v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2026
  | qelim (Eq v) = (fn _ => simpfm (Eq v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2027
  | qelim (NEq v) = (fn _ => simpfm (NEq v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2028
  | qelim (Dvd (v, va)) = (fn _ => simpfm (Dvd (v, va)))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2029
  | qelim (NDvd (v, va)) = (fn _ => simpfm (NDvd (v, va)))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2030
  | qelim (Closed v) = (fn _ => simpfm (Closed v))
0a2371e7ced3 two target language numeral types: integer and natural, as replacement for code_numeral;
haftmann
parents: 44930
diff changeset
  2031
  | qelim (NClosed v) = (fn _ => simpfm (NClosed v));
23466
886655a150f6 moved quantifier elimination tools to Tools/Qelim/;
wenzelm
parents:
diff changeset
  2032
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2033
fun prep (E T) = T
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2034
  | prep (E F) = F
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2035
  | prep (E (Or (p, q))) = Or (prep (E p), prep (E q))
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2036
  | prep (E (Imp (p, q))) = Or (prep (E (Not p)), prep (E q))
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2037
  | prep (E (Iff (p, q))) =
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2038
    Or (prep (E (And (p, q))), prep (E (And (Not p, Not q))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2039
  | prep (E (Not (And (p, q)))) = Or (prep (E (Not p)), prep (E (Not q)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2040
  | prep (E (Not (Imp (p, q)))) = prep (E (And (p, Not q)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2041
  | prep (E (Not (Iff (p, q)))) =
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2042
    Or (prep (E (And (p, Not q))), prep (E (And (Not p, q))))
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2043
  | prep (E (Lt v)) = E (prep (Lt v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2044
  | prep (E (Le v)) = E (prep (Le v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2045
  | prep (E (Gt v)) = E (prep (Gt v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2046
  | prep (E (Ge v)) = E (prep (Ge v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2047
  | prep (E (Eq v)) = E (prep (Eq v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2048
  | prep (E (NEq v)) = E (prep (NEq v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2049
  | prep (E (Dvd (v, va))) = E (prep (Dvd (v, va)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2050
  | prep (E (NDvd (v, va))) = E (prep (NDvd (v, va)))
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2051
  | prep (E (Not T)) = E (prep (Not T))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2052
  | prep (E (Not F)) = E (prep (Not F))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2053
  | prep (E (Not (Lt va))) = E (prep (Not (Lt va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2054
  | prep (E (Not (Le va))) = E (prep (Not (Le va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2055
  | prep (E (Not (Gt va))) = E (prep (Not (Gt va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2056
  | prep (E (Not (Ge va))) = E (prep (Not (Ge va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2057
  | prep (E (Not (Eq va))) = E (prep (Not (Eq va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2058
  | prep (E (Not (NEq va))) = E (prep (Not (NEq va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2059
  | prep (E (Not (Dvd (va, vb)))) = E (prep (Not (Dvd (va, vb))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2060
  | prep (E (Not (NDvd (va, vb)))) = E (prep (Not (NDvd (va, vb))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2061
  | prep (E (Not (Not va))) = E (prep (Not (Not va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2062
  | prep (E (Not (Or (va, vb)))) = E (prep (Not (Or (va, vb))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2063
  | prep (E (Not (E va))) = E (prep (Not (E va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2064
  | prep (E (Not (A va))) = E (prep (Not (A va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2065
  | prep (E (Not (Closed va))) = E (prep (Not (Closed va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2066
  | prep (E (Not (NClosed va))) = E (prep (Not (NClosed va)))
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2067
  | prep (E (And (v, va))) = E (prep (And (v, va)))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2068
  | prep (E (E v)) = E (prep (E v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2069
  | prep (E (A v)) = E (prep (A v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2070
  | prep (E (Closed v)) = E (prep (Closed v))
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2071
  | prep (E (NClosed v)) = E (prep (NClosed v))
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2072
  | prep (A (And (p, q))) = And (prep (A p), prep (A q))
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2073
  | prep (A T) = prep (Not (E (Not T)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2074
  | prep (A F) = prep (Not (E (Not F)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2075
  | prep (A (Lt v)) = prep (Not (E (Not (Lt v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2076
  | prep (A (Le v)) = prep (Not (E (Not (Le v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2077
  | prep (A (Gt v)) = prep (Not (E (Not (Gt v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2078
  | prep (A (Ge v)) = prep (Not (E (Not (Ge v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2079
  | prep (A (Eq v)) = prep (Not (E (Not (Eq v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2080
  | prep (A (NEq v)) = prep (Not (E (Not (NEq v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2081
  | prep (A (Dvd (v, va))) = prep (Not (E (Not (Dvd (v, va)))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2082
  | prep (A (NDvd (v, va))) = prep (Not (E (Not (NDvd (v, va)))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2083
  | prep (A (Not v)) = prep (Not (E (Not (Not v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2084
  | prep (A (Or (v, va))) = prep (Not (E (Not (Or (v, va)))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2085
  | prep (A (Imp (v, va))) = prep (Not (E (Not (Imp (v, va)))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2086
  | prep (A (Iff (v, va))) = prep (Not (E (Not (Iff (v, va)))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2087
  | prep (A (E v)) = prep (Not (E (Not (E v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2088
  | prep (A (A v)) = prep (Not (E (Not (A v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2089
  | prep (A (Closed v)) = prep (Not (E (Not (Closed v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2090
  | prep (A (NClosed v)) = prep (Not (E (Not (NClosed v))))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2091
  | prep (Not (Not p)) = prep p
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2092
  | prep (Not (And (p, q))) = Or (prep (Not p), prep (Not q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2093
  | prep (Not (A p)) = prep (E (Not p))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2094
  | prep (Not (Or (p, q))) = And (prep (Not p), prep (Not q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2095
  | prep (Not (Imp (p, q))) = And (prep p, prep (Not q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2096
  | prep (Not (Iff (p, q))) = Or (prep (And (p, Not q)), prep (And (Not p, q)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2097
  | prep (Not T) = Not (prep T)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2098
  | prep (Not F) = Not (prep F)
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2099
  | prep (Not (Lt v)) = Not (prep (Lt v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2100
  | prep (Not (Le v)) = Not (prep (Le v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2101
  | prep (Not (Gt v)) = Not (prep (Gt v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2102
  | prep (Not (Ge v)) = Not (prep (Ge v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2103
  | prep (Not (Eq v)) = Not (prep (Eq v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2104
  | prep (Not (NEq v)) = Not (prep (NEq v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2105
  | prep (Not (Dvd (v, va))) = Not (prep (Dvd (v, va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2106
  | prep (Not (NDvd (v, va))) = Not (prep (NDvd (v, va)))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2107
  | prep (Not (E v)) = Not (prep (E v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2108
  | prep (Not (Closed v)) = Not (prep (Closed v))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2109
  | prep (Not (NClosed v)) = Not (prep (NClosed v))
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2110
  | prep (Or (p, q)) = Or (prep p, prep q)
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2111
  | prep (And (p, q)) = And (prep p, prep q)
74531
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2112
  | prep (Imp (p, q)) = prep (Or (Not p, q))
b4660c388e72 isabelle regenerate_cooper;
wenzelm
parents: 70093
diff changeset
  2113
  | prep (Iff (p, q)) = Or (prep (And (p, q)), prep (And (Not p, Not q)))
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2114
  | prep T = T
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2115
  | prep F = F
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2116
  | prep (Lt v) = Lt v
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2117
  | prep (Le v) = Le v
65024
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2118
  | prep (Gt v) = Gt v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2119
  | prep (Ge v) = Ge v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2120
  | prep (Eq v) = Eq v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2121
  | prep (NEq v) = NEq v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2122
  | prep (Dvd (v, va)) = Dvd (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2123
  | prep (NDvd (v, va)) = NDvd (v, va)
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2124
  | prep (Closed v) = Closed v
3cb801391353 more fun without recdef
haftmann
parents: 61128
diff changeset
  2125
  | prep (NClosed v) = NClosed v;
23466
886655a150f6 moved quantifier elimination tools to Tools/Qelim/;
wenzelm
parents:
diff changeset
  2126
29787
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2127
fun pa p = qelim (prep p) cooper;
23bf900a21db regenerated presburger code
haftmann
parents: 24584
diff changeset
  2128
61128
8e5072cba671 formally regenerated
haftmann
parents: 55685
diff changeset
  2129
fun nat_of_integer k = Nat (max ord_integer (0 : IntInf.int) k);
55685
3f8bdc5364a9 regenerated
haftmann
parents: 51143
diff changeset
  2130
36798
3981db162131 less complex organization of cooper source code
haftmann
parents: 36528
diff changeset
  2131
end; (*struct Cooper_Procedure*)