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