src/HOL/Import/HOL/HOL4Prob.thy
author skalberg
Fri, 01 Apr 2005 18:59:17 +0200
changeset 15647 b1f486a9c56b
parent 15071 b65fc0787fbe
child 16417 9bc16273c2d4
permissions -rw-r--r--
Updated import configuration.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
     1
(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
     2
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     3
theory HOL4Prob = HOL4Real:
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     4
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     5
;setup_theory prob_extra
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     6
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     7
lemma BOOL_BOOL_CASES_THM: "ALL f. f = (%b. False) | f = (%b. True) | f = (%b. b) | f = Not"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     8
  by (import prob_extra BOOL_BOOL_CASES_THM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     9
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    10
lemma EVEN_ODD_BASIC: "EVEN 0 & ~ EVEN 1 & EVEN 2 & ~ ODD 0 & ODD 1 & ~ ODD 2"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    11
  by (import prob_extra EVEN_ODD_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    12
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    13
lemma EVEN_ODD_EXISTS_EQ: "ALL n. EVEN n = (EX m. n = 2 * m) & ODD n = (EX m. n = Suc (2 * m))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    14
  by (import prob_extra EVEN_ODD_EXISTS_EQ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    15
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    16
lemma DIV_THEN_MULT: "ALL p q. Suc q * (p div Suc q) <= p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    17
  by (import prob_extra DIV_THEN_MULT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    18
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    19
lemma DIV_TWO_UNIQUE: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    20
 (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    21
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    22
      (%q::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    23
          (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    24
           (%r::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    25
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    26
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    27
                  ((op =::nat => nat => bool) n
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    28
                    ((op +::nat => nat => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    29
                      ((op *::nat => nat => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    30
                        ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    31
                          ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    32
                            ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    33
                              (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    34
                            (bit.B0::bit)))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    35
                        q)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    36
                      r))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    37
                  ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    38
                    ((op =::nat => nat => bool) r (0::nat))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    39
                    ((op =::nat => nat => bool) r (1::nat))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    40
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    41
                  ((op =::nat => nat => bool) q
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    42
                    ((op div::nat => nat => nat) n
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    43
                      ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    44
                        ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    45
                          ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    46
                            (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    47
                          (bit.B0::bit)))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    48
                  ((op =::nat => nat => bool) r
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    49
                    ((op mod::nat => nat => nat) n
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    50
                      ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    51
                        ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    52
                          ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    53
                            (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    54
                          (bit.B0::bit)))))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    55
  by (import prob_extra DIV_TWO_UNIQUE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    56
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    57
lemma DIVISION_TWO: "ALL n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    58
   n = (2::nat) * (n div (2::nat)) + n mod (2::nat) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    59
   (n mod (2::nat) = (0::nat) | n mod (2::nat) = (1::nat))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    60
  by (import prob_extra DIVISION_TWO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    61
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    62
lemma DIV_TWO: "ALL n::nat. n = (2::nat) * (n div (2::nat)) + n mod (2::nat)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    63
  by (import prob_extra DIV_TWO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    64
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    65
lemma MOD_TWO: "ALL n. n mod 2 = (if EVEN n then 0 else 1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    66
  by (import prob_extra MOD_TWO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    67
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    68
lemma DIV_TWO_BASIC: "(0::nat) div (2::nat) = (0::nat) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    69
(1::nat) div (2::nat) = (0::nat) & (2::nat) div (2::nat) = (1::nat)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    70
  by (import prob_extra DIV_TWO_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    71
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    72
lemma DIV_TWO_MONO: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    73
 (%m::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    74
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    75
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    76
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    77
           ((op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    78
             ((op div::nat => nat => nat) m
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    79
               ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    80
                 ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    81
                   ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    82
                     (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    83
                   (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    84
             ((op div::nat => nat => nat) n
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    85
               ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    86
                 ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    87
                   ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    88
                     (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
    89
                   (bit.B0::bit)))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    90
           ((op <::nat => nat => bool) m n)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    91
  by (import prob_extra DIV_TWO_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    92
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    93
lemma DIV_TWO_MONO_EVEN: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    94
 (%m::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    95
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    96
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    97
          (op -->::bool => bool => bool) ((EVEN::nat => bool) n)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    98
           ((op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    99
             ((op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   100
               ((op div::nat => nat => nat) m
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   101
                 ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   102
                   ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   103
                     ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   104
                       (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   105
                     (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   106
               ((op div::nat => nat => nat) n
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   107
                 ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   108
                   ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   109
                     ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   110
                       (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   111
                     (bit.B0::bit)))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   112
             ((op <::nat => nat => bool) m n))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   113
  by (import prob_extra DIV_TWO_MONO_EVEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   114
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   115
lemma DIV_TWO_CANCEL: "ALL n. 2 * n div 2 = n & Suc (2 * n) div 2 = n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   116
  by (import prob_extra DIV_TWO_CANCEL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   117
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   118
lemma EXP_DIV_TWO: "ALL n::nat. (2::nat) ^ Suc n div (2::nat) = (2::nat) ^ n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   119
  by (import prob_extra EXP_DIV_TWO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   120
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   121
lemma EVEN_EXP_TWO: "ALL n. EVEN (2 ^ n) = (n ~= 0)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   122
  by (import prob_extra EVEN_EXP_TWO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   123
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   124
lemma DIV_TWO_EXP: "ALL (n::nat) k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   125
   (k div (2::nat) < (2::nat) ^ n) = (k < (2::nat) ^ Suc n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   126
  by (import prob_extra DIV_TWO_EXP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   127
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   128
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   129
  inf :: "(real => bool) => real" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   130
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   131
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   132
  inf_primdef: "inf == %P. - sup (IMAGE uminus P)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   133
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   134
lemma inf_def: "ALL P. inf P = - sup (IMAGE uminus P)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   135
  by (import prob_extra inf_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   136
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   137
lemma INF_DEF_ALT: "ALL P. inf P = - sup (%r. P (- r))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   138
  by (import prob_extra INF_DEF_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   139
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   140
lemma REAL_SUP_EXISTS_UNIQUE: "(All::((real => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   141
 (%P::real => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   142
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   143
      ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   144
        ((Ex::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   145
          (%z::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   146
              (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   147
               (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   148
                   (op -->::bool => bool => bool) (P x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   149
                    ((op <=::real => real => bool) x z)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   150
      ((Ex1::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   151
        (%s::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   152
            (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   153
             (%y::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   154
                 (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   155
                  ((Ex::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   156
                    (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   157
                        (op &::bool => bool => bool) (P x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   158
                         ((op <::real => real => bool) y x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   159
                  ((op <::real => real => bool) y s)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   160
  by (import prob_extra REAL_SUP_EXISTS_UNIQUE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   161
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   162
lemma REAL_SUP_MAX: "(All::((real => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   163
 (%P::real => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   164
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   165
      (%z::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   166
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   167
           ((op &::bool => bool => bool) (P z)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   168
             ((All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   169
               (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   170
                   (op -->::bool => bool => bool) (P x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   171
                    ((op <=::real => real => bool) x z))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   172
           ((op =::real => real => bool) ((sup::(real => bool) => real) P)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   173
             z)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   174
  by (import prob_extra REAL_SUP_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   175
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   176
lemma REAL_INF_MIN: "(All::((real => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   177
 (%P::real => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   178
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   179
      (%z::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   180
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   181
           ((op &::bool => bool => bool) (P z)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   182
             ((All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   183
               (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   184
                   (op -->::bool => bool => bool) (P x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   185
                    ((op <=::real => real => bool) z x))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   186
           ((op =::real => real => bool) ((inf::(real => bool) => real) P)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   187
             z)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   188
  by (import prob_extra REAL_INF_MIN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   189
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   190
lemma HALF_POS: "(0::real) < (1::real) / (2::real)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   191
  by (import prob_extra HALF_POS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   192
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   193
lemma HALF_CANCEL: "(2::real) * ((1::real) / (2::real)) = (1::real)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   194
  by (import prob_extra HALF_CANCEL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   195
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   196
lemma POW_HALF_POS: "ALL n::nat. (0::real) < ((1::real) / (2::real)) ^ n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   197
  by (import prob_extra POW_HALF_POS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   198
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   199
lemma POW_HALF_MONO: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   200
 (%m::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   201
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   202
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   203
          (op -->::bool => bool => bool) ((op <=::nat => nat => bool) m n)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   204
           ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   205
             ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   206
               ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   207
                 ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   208
                   ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   209
                     ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   210
                       (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   211
                     (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   212
               n)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   213
             ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   214
               ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   215
                 ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   216
                   ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   217
                     ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   218
                       (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
   219
                     (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   220
               m))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   221
  by (import prob_extra POW_HALF_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   222
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   223
lemma POW_HALF_TWICE: "ALL n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   224
   ((1::real) / (2::real)) ^ n = (2::real) * ((1::real) / (2::real)) ^ Suc n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   225
  by (import prob_extra POW_HALF_TWICE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   226
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   227
lemma X_HALF_HALF: "ALL x::real. (1::real) / (2::real) * x + (1::real) / (2::real) * x = x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   228
  by (import prob_extra X_HALF_HALF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   229
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   230
lemma REAL_SUP_LE_X: "(All::((real => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   231
 (%P::real => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   232
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   233
      (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   234
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   235
           ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   236
             ((All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   237
               (%r::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   238
                   (op -->::bool => bool => bool) (P r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   239
                    ((op <=::real => real => bool) r x))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   240
           ((op <=::real => real => bool) ((sup::(real => bool) => real) P)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   241
             x)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   242
  by (import prob_extra REAL_SUP_LE_X)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   243
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   244
lemma REAL_X_LE_SUP: "(All::((real => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   245
 (%P::real => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   246
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   247
      (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   248
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   249
           ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   250
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   251
               ((Ex::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   252
                 (%z::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   253
                     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   254
                      (%r::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   255
                          (op -->::bool => bool => bool) (P r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   256
                           ((op <=::real => real => bool) r z))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   257
               ((Ex::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   258
                 (%r::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   259
                     (op &::bool => bool => bool) (P r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   260
                      ((op <=::real => real => bool) x r)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   261
           ((op <=::real => real => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   262
             ((sup::(real => bool) => real) P))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   263
  by (import prob_extra REAL_X_LE_SUP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   264
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   265
lemma ABS_BETWEEN_LE: "ALL (x::real) (y::real) d::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   266
   ((0::real) <= d & x - d <= y & y <= x + d) = (abs (y - x) <= d)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   267
  by (import prob_extra ABS_BETWEEN_LE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   268
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   269
lemma ONE_MINUS_HALF: "(1::real) - (1::real) / (2::real) = (1::real) / (2::real)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   270
  by (import prob_extra ONE_MINUS_HALF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   271
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   272
lemma HALF_LT_1: "(1::real) / (2::real) < (1::real)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   273
  by (import prob_extra HALF_LT_1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   274
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   275
lemma POW_HALF_EXP: "ALL n::nat. ((1::real) / (2::real)) ^ n = inverse (real ((2::nat) ^ n))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   276
  by (import prob_extra POW_HALF_EXP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   277
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   278
lemma INV_SUC_POS: "ALL n. 0 < 1 / real (Suc n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   279
  by (import prob_extra INV_SUC_POS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   280
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   281
lemma INV_SUC_MAX: "ALL x. 1 / real (Suc x) <= 1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   282
  by (import prob_extra INV_SUC_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   283
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   284
lemma INV_SUC: "ALL n. 0 < 1 / real (Suc n) & 1 / real (Suc n) <= 1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   285
  by (import prob_extra INV_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   286
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   287
lemma ABS_UNIT_INTERVAL: "(All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   288
 (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   289
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   290
      (%y::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   291
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   292
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   293
             ((op <=::real => real => bool) (0::real) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   294
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   295
               ((op <=::real => real => bool) x (1::real))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   296
               ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   297
                 ((op <=::real => real => bool) (0::real) y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   298
                 ((op <=::real => real => bool) y (1::real)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   299
           ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   300
             ((abs::real => real) ((op -::real => real => real) x y))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   301
             (1::real))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   302
  by (import prob_extra ABS_UNIT_INTERVAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   303
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   304
lemma MEM_NIL: "ALL l. (ALL x. ~ x mem l) = (l = [])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   305
  by (import prob_extra MEM_NIL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   306
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   307
lemma MAP_MEM: "ALL f l x. x mem map f l = (EX y. y mem l & x = f y)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   308
  by (import prob_extra MAP_MEM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   309
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   310
lemma MEM_NIL_MAP_CONS: "ALL x l. ~ [] mem map (op # x) l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   311
  by (import prob_extra MEM_NIL_MAP_CONS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   312
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   313
lemma FILTER_TRUE: "ALL l. [x:l. True] = l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   314
  by (import prob_extra FILTER_TRUE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   315
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   316
lemma FILTER_FALSE: "ALL l. [x:l. False] = []"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   317
  by (import prob_extra FILTER_FALSE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   318
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   319
lemma FILTER_MEM: "(All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   320
 (%P::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   321
     (All::('a => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   322
      (%x::'a.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   323
          (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   324
           (%l::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   325
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   326
                ((op mem::'a => 'a list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   327
                  ((filter::('a => bool) => 'a list => 'a list) P l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   328
                (P x))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   329
  by (import prob_extra FILTER_MEM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   330
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   331
lemma MEM_FILTER: "(All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   332
 (%P::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   333
     (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   334
      (%l::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   335
          (All::('a => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   336
           (%x::'a.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   337
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   338
                ((op mem::'a => 'a list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   339
                  ((filter::('a => bool) => 'a list => 'a list) P l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   340
                ((op mem::'a => 'a list => bool) x l))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   341
  by (import prob_extra MEM_FILTER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   342
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   343
lemma FILTER_OUT_ELT: "ALL x l. x mem l | [y:l. y ~= x] = l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   344
  by (import prob_extra FILTER_OUT_ELT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   345
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   346
lemma IS_PREFIX_NIL: "ALL x. IS_PREFIX x [] & IS_PREFIX [] x = (x = [])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   347
  by (import prob_extra IS_PREFIX_NIL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   348
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   349
lemma IS_PREFIX_REFL: "ALL x. IS_PREFIX x x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   350
  by (import prob_extra IS_PREFIX_REFL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   351
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   352
lemma IS_PREFIX_ANTISYM: "(All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   353
 (%x::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   354
     (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   355
      (%y::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   356
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   357
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   358
             ((IS_PREFIX::'a list => 'a list => bool) y x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   359
             ((IS_PREFIX::'a list => 'a list => bool) x y))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   360
           ((op =::'a list => 'a list => bool) x y)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   361
  by (import prob_extra IS_PREFIX_ANTISYM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   362
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   363
lemma IS_PREFIX_TRANS: "(All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   364
 (%x::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   365
     (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   366
      (%y::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   367
          (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   368
           (%z::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   369
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   370
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   371
                  ((IS_PREFIX::'a list => 'a list => bool) x y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   372
                  ((IS_PREFIX::'a list => 'a list => bool) y z))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   373
                ((IS_PREFIX::'a list => 'a list => bool) x z))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   374
  by (import prob_extra IS_PREFIX_TRANS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   375
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   376
lemma IS_PREFIX_BUTLAST: "ALL x y. IS_PREFIX (x # y) (butlast (x # y))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   377
  by (import prob_extra IS_PREFIX_BUTLAST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   378
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   379
lemma IS_PREFIX_LENGTH: "(All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   380
 (%x::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   381
     (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   382
      (%y::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   383
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   384
           ((IS_PREFIX::'a list => 'a list => bool) y x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   385
           ((op <=::nat => nat => bool) ((size::'a list => nat) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   386
             ((size::'a list => nat) y))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   387
  by (import prob_extra IS_PREFIX_LENGTH)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   388
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   389
lemma IS_PREFIX_LENGTH_ANTI: "(All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   390
 (%x::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   391
     (All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   392
      (%y::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   393
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   394
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   395
             ((IS_PREFIX::'a list => 'a list => bool) y x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   396
             ((op =::nat => nat => bool) ((size::'a list => nat) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   397
               ((size::'a list => nat) y)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   398
           ((op =::'a list => 'a list => bool) x y)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   399
  by (import prob_extra IS_PREFIX_LENGTH_ANTI)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   400
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   401
lemma IS_PREFIX_SNOC: "ALL x y z. IS_PREFIX (SNOC x y) z = (IS_PREFIX y z | z = SNOC x y)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   402
  by (import prob_extra IS_PREFIX_SNOC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   403
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   404
lemma FOLDR_MAP: "ALL (f::'b => 'c => 'c) (e::'c) (g::'a => 'b) l::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   405
   foldr f (map g l) e = foldr (%x::'a. f (g x)) l e"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   406
  by (import prob_extra FOLDR_MAP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   407
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   408
lemma LAST_MEM: "ALL h t. last (h # t) mem h # t"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   409
  by (import prob_extra LAST_MEM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   410
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   411
lemma LAST_MAP_CONS: "ALL (b::bool) (h::bool list) t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   412
   EX x::bool list. last (map (op # b) (h # t)) = b # x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   413
  by (import prob_extra LAST_MAP_CONS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   414
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   415
lemma EXISTS_LONGEST: "(All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   416
 (%x::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   417
     (All::('a list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   418
      (%y::'a list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   419
          (Ex::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   420
           (%z::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   421
               (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   422
                ((op mem::'a list => 'a list list => bool) z
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   423
                  ((op #::'a list => 'a list list => 'a list list) x y))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   424
                ((All::('a list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   425
                  (%w::'a list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   426
                      (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   427
                       ((op mem::'a list => 'a list list => bool) w
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   428
                         ((op #::'a list => 'a list list => 'a list list) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   429
                           y))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   430
                       ((op <=::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   431
                         ((size::'a list => nat) w)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   432
                         ((size::'a list => nat) z)))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   433
  by (import prob_extra EXISTS_LONGEST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   434
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   435
lemma UNION_DEF_ALT: "ALL s t. pred_set.UNION s t = (%x. s x | t x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   436
  by (import prob_extra UNION_DEF_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   437
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   438
lemma INTER_UNION_RDISTRIB: "ALL p q r.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   439
   pred_set.INTER (pred_set.UNION p q) r =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   440
   pred_set.UNION (pred_set.INTER p r) (pred_set.INTER q r)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   441
  by (import prob_extra INTER_UNION_RDISTRIB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   442
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   443
lemma SUBSET_EQ: "ALL x xa. (x = xa) = (SUBSET x xa & SUBSET xa x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   444
  by (import prob_extra SUBSET_EQ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   445
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   446
lemma INTER_IS_EMPTY: "ALL s t. (pred_set.INTER s t = EMPTY) = (ALL x. ~ s x | ~ t x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   447
  by (import prob_extra INTER_IS_EMPTY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   448
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   449
lemma UNION_DISJOINT_SPLIT: "(All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   450
 (%s::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   451
     (All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   452
      (%t::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   453
          (All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   454
           (%u::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   455
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   456
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   457
                  ((op =::('a => bool) => ('a => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   458
                    ((pred_set.UNION::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   459
=> ('a => bool) => 'a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   460
                      s t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   461
                    ((pred_set.UNION::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   462
=> ('a => bool) => 'a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   463
                      s u))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   464
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   465
                    ((op =::('a => bool) => ('a => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   466
                      ((pred_set.INTER::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   467
  => ('a => bool) => 'a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   468
                        s t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   469
                      (EMPTY::'a => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   470
                    ((op =::('a => bool) => ('a => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   471
                      ((pred_set.INTER::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   472
  => ('a => bool) => 'a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   473
                        s u)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   474
                      (EMPTY::'a => bool))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   475
                ((op =::('a => bool) => ('a => bool) => bool) t u))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   476
  by (import prob_extra UNION_DISJOINT_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   477
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   478
lemma GSPEC_DEF_ALT: "ALL f. GSPEC f = (%v. EX x. (v, True) = f x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   479
  by (import prob_extra GSPEC_DEF_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   480
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   481
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   482
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   483
;setup_theory prob_canon
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   484
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   485
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   486
  alg_twin :: "bool list => bool list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   487
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   488
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   489
  alg_twin_primdef: "alg_twin == %x y. EX l. x = SNOC True l & y = SNOC False l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   490
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   491
lemma alg_twin_def: "ALL x y. alg_twin x y = (EX l. x = SNOC True l & y = SNOC False l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   492
  by (import prob_canon alg_twin_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   493
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   494
constdefs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   495
  alg_order_tupled :: "bool list * bool list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   496
  "(op ==::(bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   497
        => (bool list * bool list => bool) => prop)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   498
 (alg_order_tupled::bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   499
 ((WFREC::(bool list * bool list => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   500
          => ((bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   501
              => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   502
             => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   503
   ((Eps::((bool list * bool list => bool list * bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   504
          => bool list * bool list => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   505
     (%R::bool list * bool list => bool list * bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   506
         (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   507
          ((WF::(bool list * bool list => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   508
                => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   509
            R)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   510
          ((All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   511
            (%h'::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   512
                (All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   513
                 (%h::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   514
                     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   515
                      (%t'::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   516
                          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   517
                           (%t::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   518
                               R ((Pair::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   519
   => bool list => bool list * bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   520
                                   t t')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   521
                                ((Pair::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   522
  => bool list => bool list * bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   523
                                  ((op #::bool => bool list => bool list) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   524
                                    t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   525
                                  ((op #::bool => bool list => bool list) h'
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   526
                                    t')))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   527
   (%alg_order_tupled::bool list * bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   528
       (split::(bool list => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   529
               => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   530
        (%(v::bool list) v1::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   531
            (list_case::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   532
                        => (bool => bool list => bool) => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   533
             ((list_case::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   534
                          => (bool => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   535
                             => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   536
               (True::bool) (%(v8::bool) v9::bool list. True::bool) v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   537
             (%(v4::bool) v5::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   538
                 (list_case::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   539
                             => (bool => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   540
                                => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   541
                  (False::bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   542
                  (%(v10::bool) v11::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   543
                      (op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   544
                       ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   545
                         ((op =::bool => bool => bool) v4 (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   546
                         ((op =::bool => bool => bool) v10 (False::bool)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   547
                       ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   548
                         ((op =::bool => bool => bool) v4 v10)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   549
                         (alg_order_tupled
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   550
                           ((Pair::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   551
                                   => bool list => bool list * bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   552
                             v5 v11))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   553
                  v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   554
             v)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   555
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   556
lemma alg_order_tupled_primitive_def: "(op =::(bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   557
       => (bool list * bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   558
 (alg_order_tupled::bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   559
 ((WFREC::(bool list * bool list => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   560
          => ((bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   561
              => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   562
             => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   563
   ((Eps::((bool list * bool list => bool list * bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   564
          => bool list * bool list => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   565
     (%R::bool list * bool list => bool list * bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   566
         (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   567
          ((WF::(bool list * bool list => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   568
                => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   569
            R)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   570
          ((All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   571
            (%h'::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   572
                (All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   573
                 (%h::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   574
                     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   575
                      (%t'::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   576
                          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   577
                           (%t::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   578
                               R ((Pair::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   579
   => bool list => bool list * bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   580
                                   t t')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   581
                                ((Pair::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   582
  => bool list => bool list * bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   583
                                  ((op #::bool => bool list => bool list) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   584
                                    t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   585
                                  ((op #::bool => bool list => bool list) h'
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   586
                                    t')))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   587
   (%alg_order_tupled::bool list * bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   588
       (split::(bool list => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   589
               => bool list * bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   590
        (%(v::bool list) v1::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   591
            (list_case::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   592
                        => (bool => bool list => bool) => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   593
             ((list_case::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   594
                          => (bool => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   595
                             => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   596
               (True::bool) (%(v8::bool) v9::bool list. True::bool) v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   597
             (%(v4::bool) v5::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   598
                 (list_case::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   599
                             => (bool => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   600
                                => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   601
                  (False::bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   602
                  (%(v10::bool) v11::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   603
                      (op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   604
                       ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   605
                         ((op =::bool => bool => bool) v4 (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   606
                         ((op =::bool => bool => bool) v10 (False::bool)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   607
                       ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   608
                         ((op =::bool => bool => bool) v4 v10)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   609
                         (alg_order_tupled
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   610
                           ((Pair::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   611
                                   => bool list => bool list * bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   612
                             v5 v11))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   613
                  v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   614
             v)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   615
  by (import prob_canon alg_order_tupled_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   616
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   617
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   618
  alg_order :: "bool list => bool list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   619
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   620
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   621
  alg_order_primdef: "alg_order == %x x1. alg_order_tupled (x, x1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   622
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   623
lemma alg_order_curried_def: "ALL x x1. alg_order x x1 = alg_order_tupled (x, x1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   624
  by (import prob_canon alg_order_curried_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   625
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   626
lemma alg_order_ind: "(All::((bool list => bool list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   627
 (%P::bool list => bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   628
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   629
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   630
        ((All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   631
          (%x::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   632
              (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   633
               (%xa::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   634
                   P ([]::bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   635
                    ((op #::bool => bool list => bool list) x xa))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   636
        ((op &::bool => bool => bool) (P ([]::bool list) ([]::bool list))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   637
          ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   638
            ((All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   639
              (%x::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   640
                  (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   641
                   (%xa::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   642
                       P ((op #::bool => bool list => bool list) x xa)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   643
                        ([]::bool list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   644
            ((All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   645
              (%x::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   646
                  (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   647
                   (%xa::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   648
                       (All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   649
                        (%xb::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   650
                            (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   651
                             (%xc::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   652
                                 (op -->::bool => bool => bool) (P xa xc)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   653
                                  (P ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   654
 x xa)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   655
                                    ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   656
xb xc))))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   657
      ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   658
        (%x::bool list. (All::(bool list => bool) => bool) (P x))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   659
  by (import prob_canon alg_order_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   660
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   661
lemma alg_order_def: "alg_order [] (v6 # v7) = True &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   662
alg_order [] [] = True &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   663
alg_order (v2 # v3) [] = False &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   664
alg_order (h # t) (h' # t') =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   665
(h = True & h' = False | h = h' & alg_order t t')"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   666
  by (import prob_canon alg_order_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   667
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   668
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   669
  alg_sorted :: "bool list list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   670
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   671
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   672
  alg_sorted_primdef: "alg_sorted ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   673
WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   674
 (%alg_sorted.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   675
     list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   676
      (%v2. list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   677
             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   678
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   679
lemma alg_sorted_primitive_def: "alg_sorted =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   680
WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   681
 (%alg_sorted.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   682
     list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   683
      (%v2. list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   684
             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   685
  by (import prob_canon alg_sorted_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   686
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   687
lemma alg_sorted_ind: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   688
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   689
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   690
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   691
        ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   692
          (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   693
              (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   694
               (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   695
                   (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   696
                    (%z::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   697
                        (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   698
                         (P ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   699
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   700
                              y z))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   701
                         (P ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   702
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   703
                              x ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   704
  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   705
                                  y z)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   706
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   707
          ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   708
            (%v::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   709
                P ((op #::bool list => bool list list => bool list list) v
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   710
                    ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   711
          (P ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   712
      ((All::(bool list list => bool) => bool) P))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   713
  by (import prob_canon alg_sorted_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   714
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   715
lemma alg_sorted_def: "alg_sorted (x # y # z) = (alg_order x y & alg_sorted (y # z)) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   716
alg_sorted [v] = True & alg_sorted [] = True"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   717
  by (import prob_canon alg_sorted_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   718
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   719
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   720
  alg_prefixfree :: "bool list list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   721
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   722
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   723
  alg_prefixfree_primdef: "alg_prefixfree ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   724
WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   725
 (%alg_prefixfree.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   726
     list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   727
      (%v2. list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   728
             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   729
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   730
lemma alg_prefixfree_primitive_def: "alg_prefixfree =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   731
WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   732
 (%alg_prefixfree.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   733
     list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   734
      (%v2. list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   735
             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   736
  by (import prob_canon alg_prefixfree_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   737
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   738
lemma alg_prefixfree_ind: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   739
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   740
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   741
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   742
        ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   743
          (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   744
              (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   745
               (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   746
                   (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   747
                    (%z::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   748
                        (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   749
                         (P ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   750
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   751
                              y z))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   752
                         (P ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   753
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   754
                              x ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   755
  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   756
                                  y z)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   757
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   758
          ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   759
            (%v::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   760
                P ((op #::bool list => bool list list => bool list list) v
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   761
                    ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   762
          (P ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   763
      ((All::(bool list list => bool) => bool) P))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   764
  by (import prob_canon alg_prefixfree_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   765
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   766
lemma alg_prefixfree_def: "alg_prefixfree (x # y # z) = (~ IS_PREFIX y x & alg_prefixfree (y # z)) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   767
alg_prefixfree [v] = True & alg_prefixfree [] = True"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   768
  by (import prob_canon alg_prefixfree_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   769
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   770
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   771
  alg_twinfree :: "bool list list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   772
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   773
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   774
  alg_twinfree_primdef: "alg_twinfree ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   775
WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   776
 (%alg_twinfree.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   777
     list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   778
      (%v2. list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   779
             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   780
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   781
lemma alg_twinfree_primitive_def: "alg_twinfree =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   782
WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   783
 (%alg_twinfree.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   784
     list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   785
      (%v2. list_case True
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   786
             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   787
  by (import prob_canon alg_twinfree_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   788
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   789
lemma alg_twinfree_ind: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   790
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   791
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   792
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   793
        ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   794
          (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   795
              (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   796
               (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   797
                   (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   798
                    (%z::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   799
                        (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   800
                         (P ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   801
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   802
                              y z))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   803
                         (P ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   804
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   805
                              x ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   806
  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   807
                                  y z)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   808
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   809
          ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   810
            (%v::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   811
                P ((op #::bool list => bool list list => bool list list) v
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   812
                    ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   813
          (P ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   814
      ((All::(bool list list => bool) => bool) P))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   815
  by (import prob_canon alg_twinfree_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   816
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   817
lemma alg_twinfree_def: "alg_twinfree (x # y # z) = (~ alg_twin x y & alg_twinfree (y # z)) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   818
alg_twinfree [v] = True & alg_twinfree [] = True"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   819
  by (import prob_canon alg_twinfree_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   820
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   821
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   822
  alg_longest :: "bool list list => nat" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   823
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   824
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   825
  alg_longest_primdef: "alg_longest == FOLDR (%h t. if t <= length h then length h else t) 0"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   826
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   827
lemma alg_longest_def: "alg_longest = FOLDR (%h t. if t <= length h then length h else t) 0"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   828
  by (import prob_canon alg_longest_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   829
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   830
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   831
  alg_canon_prefs :: "bool list => bool list list => bool list list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   832
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   833
specification (alg_canon_prefs_primdef: alg_canon_prefs) alg_canon_prefs_def: "(ALL l. alg_canon_prefs l [] = [l]) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   834
(ALL l h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   835
    alg_canon_prefs l (h # t) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   836
    (if IS_PREFIX h l then alg_canon_prefs l t else l # h # t))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   837
  by (import prob_canon alg_canon_prefs_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   838
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   839
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   840
  alg_canon_find :: "bool list => bool list list => bool list list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   841
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   842
specification (alg_canon_find_primdef: alg_canon_find) alg_canon_find_def: "(ALL l. alg_canon_find l [] = [l]) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   843
(ALL l h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   844
    alg_canon_find l (h # t) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   845
    (if alg_order h l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   846
     then if IS_PREFIX l h then h # t else h # alg_canon_find l t
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   847
     else alg_canon_prefs l (h # t)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   848
  by (import prob_canon alg_canon_find_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   849
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   850
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   851
  alg_canon1 :: "bool list list => bool list list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   852
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   853
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   854
  alg_canon1_primdef: "alg_canon1 == FOLDR alg_canon_find []"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   855
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   856
lemma alg_canon1_def: "alg_canon1 = FOLDR alg_canon_find []"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   857
  by (import prob_canon alg_canon1_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   858
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   859
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   860
  alg_canon_merge :: "bool list => bool list list => bool list list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   861
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   862
specification (alg_canon_merge_primdef: alg_canon_merge) alg_canon_merge_def: "(ALL l. alg_canon_merge l [] = [l]) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   863
(ALL l h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   864
    alg_canon_merge l (h # t) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   865
    (if alg_twin l h then alg_canon_merge (butlast h) t else l # h # t))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   866
  by (import prob_canon alg_canon_merge_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   867
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   868
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   869
  alg_canon2 :: "bool list list => bool list list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   870
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   871
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   872
  alg_canon2_primdef: "alg_canon2 == FOLDR alg_canon_merge []"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   873
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   874
lemma alg_canon2_def: "alg_canon2 = FOLDR alg_canon_merge []"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   875
  by (import prob_canon alg_canon2_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   876
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   877
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   878
  alg_canon :: "bool list list => bool list list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   879
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   880
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   881
  alg_canon_primdef: "alg_canon == %l. alg_canon2 (alg_canon1 l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   882
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   883
lemma alg_canon_def: "ALL l. alg_canon l = alg_canon2 (alg_canon1 l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   884
  by (import prob_canon alg_canon_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   885
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   886
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   887
  algebra_canon :: "bool list list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   888
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   889
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   890
  algebra_canon_primdef: "algebra_canon == %l. alg_canon l = l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   891
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   892
lemma algebra_canon_def: "ALL l. algebra_canon l = (alg_canon l = l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   893
  by (import prob_canon algebra_canon_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   894
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   895
lemma ALG_TWIN_NIL: "ALL l. ~ alg_twin l [] & ~ alg_twin [] l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   896
  by (import prob_canon ALG_TWIN_NIL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   897
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   898
lemma ALG_TWIN_SING: "ALL x l.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   899
   alg_twin [x] l = (x = True & l = [False]) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   900
   alg_twin l [x] = (l = [True] & x = False)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   901
  by (import prob_canon ALG_TWIN_SING)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   902
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   903
lemma ALG_TWIN_CONS: "ALL x y z h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   904
   alg_twin (x # y # z) (h # t) = (x = h & alg_twin (y # z) t) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   905
   alg_twin (h # t) (x # y # z) = (x = h & alg_twin t (y # z))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   906
  by (import prob_canon ALG_TWIN_CONS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   907
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   908
lemma ALG_TWIN_REDUCE: "ALL h t t'. alg_twin (h # t) (h # t') = alg_twin t t'"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   909
  by (import prob_canon ALG_TWIN_REDUCE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   910
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   911
lemma ALG_TWINS_PREFIX: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   912
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   913
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   914
      (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   915
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   916
           ((IS_PREFIX::bool list => bool list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   917
           ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   918
             ((op =::bool list => bool list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   919
             ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   920
               ((IS_PREFIX::bool list => bool list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   921
                 ((SNOC::bool => bool list => bool list) (True::bool) l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   922
               ((IS_PREFIX::bool list => bool list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   923
                 ((SNOC::bool => bool list => bool list) (False::bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   924
                   l))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   925
  by (import prob_canon ALG_TWINS_PREFIX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   926
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   927
lemma ALG_ORDER_NIL: "ALL x. alg_order [] x & alg_order x [] = (x = [])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   928
  by (import prob_canon ALG_ORDER_NIL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   929
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   930
lemma ALG_ORDER_REFL: "ALL x. alg_order x x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   931
  by (import prob_canon ALG_ORDER_REFL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   932
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   933
lemma ALG_ORDER_ANTISYM: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   934
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   935
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   936
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   937
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   938
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   939
             ((alg_order::bool list => bool list => bool) x y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   940
             ((alg_order::bool list => bool list => bool) y x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   941
           ((op =::bool list => bool list => bool) x y)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   942
  by (import prob_canon ALG_ORDER_ANTISYM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   943
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   944
lemma ALG_ORDER_TRANS: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   945
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   946
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   947
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   948
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   949
           (%z::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   950
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   951
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   952
                  ((alg_order::bool list => bool list => bool) x y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   953
                  ((alg_order::bool list => bool list => bool) y z))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   954
                ((alg_order::bool list => bool list => bool) x z))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   955
  by (import prob_canon ALG_ORDER_TRANS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   956
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   957
lemma ALG_ORDER_TOTAL: "ALL x y. alg_order x y | alg_order y x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   958
  by (import prob_canon ALG_ORDER_TOTAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   959
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   960
lemma ALG_ORDER_PREFIX: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   961
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   962
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   963
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   964
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   965
           ((IS_PREFIX::bool list => bool list => bool) y x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   966
           ((alg_order::bool list => bool list => bool) x y)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   967
  by (import prob_canon ALG_ORDER_PREFIX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   968
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   969
lemma ALG_ORDER_PREFIX_ANTI: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   970
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   971
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   972
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   973
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   974
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   975
             ((alg_order::bool list => bool list => bool) x y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   976
             ((IS_PREFIX::bool list => bool list => bool) x y))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   977
           ((op =::bool list => bool list => bool) x y)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   978
  by (import prob_canon ALG_ORDER_PREFIX_ANTI)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   979
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   980
lemma ALG_ORDER_PREFIX_MONO: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   981
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   982
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   983
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   984
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   985
           (%z::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   986
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   987
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   988
                  ((alg_order::bool list => bool list => bool) x y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   989
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   990
                    ((alg_order::bool list => bool list => bool) y z)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   991
                    ((IS_PREFIX::bool list => bool list => bool) z x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   992
                ((IS_PREFIX::bool list => bool list => bool) y x))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   993
  by (import prob_canon ALG_ORDER_PREFIX_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   994
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   995
lemma ALG_ORDER_PREFIX_TRANS: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   996
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   997
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   998
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   999
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1000
           (%z::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1001
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1002
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1003
                  ((alg_order::bool list => bool list => bool) x y)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1004
                  ((IS_PREFIX::bool list => bool list => bool) y z))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1005
                ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1006
                  ((alg_order::bool list => bool list => bool) x z)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1007
                  ((IS_PREFIX::bool list => bool list => bool) x z)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1008
  by (import prob_canon ALG_ORDER_PREFIX_TRANS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1009
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1010
lemma ALG_ORDER_SNOC: "ALL x l. ~ alg_order (SNOC x l) l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1011
  by (import prob_canon ALG_ORDER_SNOC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1012
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1013
lemma ALG_SORTED_MIN: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1014
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1015
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1016
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1017
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1018
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1019
             ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1020
           ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1021
             (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1022
                 (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1023
                  ((op mem::bool list => bool list list => bool) x t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1024
                  ((alg_order::bool list => bool list => bool) h x)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1025
  by (import prob_canon ALG_SORTED_MIN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1026
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1027
lemma ALG_SORTED_DEF_ALT: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1028
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1029
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1030
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1031
          (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1032
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1033
             ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1034
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1035
             ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1036
               (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1037
                   (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1038
                    ((op mem::bool list => bool list list => bool) x t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1039
                    ((alg_order::bool list => bool list => bool) h x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1040
             ((alg_sorted::bool list list => bool) t))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1041
  by (import prob_canon ALG_SORTED_DEF_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1042
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1043
lemma ALG_SORTED_TL: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1044
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1045
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1046
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1047
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1048
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1049
             ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1050
           ((alg_sorted::bool list list => bool) t)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1051
  by (import prob_canon ALG_SORTED_TL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1052
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1053
lemma ALG_SORTED_MONO: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1054
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1055
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1056
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1057
          (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1058
           (%z::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1059
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1060
                ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1061
                  ((op #::bool list => bool list list => bool list list) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1062
                    ((op #::bool list => bool list list => bool list list) y
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1063
                      z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1064
                ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1065
                  ((op #::bool list => bool list list => bool list list) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1066
                    z)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1067
  by (import prob_canon ALG_SORTED_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1068
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1069
lemma ALG_SORTED_TLS: "ALL l b. alg_sorted (map (op # b) l) = alg_sorted l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1070
  by (import prob_canon ALG_SORTED_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1071
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1072
lemma ALG_SORTED_STEP: "ALL l1 l2.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1073
   alg_sorted (map (op # True) l1 @ map (op # False) l2) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1074
   (alg_sorted l1 & alg_sorted l2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1075
  by (import prob_canon ALG_SORTED_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1076
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1077
lemma ALG_SORTED_APPEND: "ALL h h' t t'.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1078
   alg_sorted ((h # t) @ h' # t') =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1079
   (alg_sorted (h # t) & alg_sorted (h' # t') & alg_order (last (h # t)) h')"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1080
  by (import prob_canon ALG_SORTED_APPEND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1081
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1082
lemma ALG_SORTED_FILTER: "(All::((bool list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1083
 (%P::bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1084
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1085
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1086
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1087
           ((alg_sorted::bool list list => bool) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1088
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1089
             ((filter::(bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1090
                       => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1091
               P b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1092
  by (import prob_canon ALG_SORTED_FILTER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1093
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1094
lemma ALG_PREFIXFREE_TL: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1095
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1096
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1097
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1098
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1099
           ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1100
             ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1101
           ((alg_prefixfree::bool list list => bool) t)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1102
  by (import prob_canon ALG_PREFIXFREE_TL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1103
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1104
lemma ALG_PREFIXFREE_MONO: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1105
 (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1106
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1107
      (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1108
          (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1109
           (%z::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1110
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1111
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1112
                  ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1113
                    ((op #::bool list => bool list list => bool list list) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1114
                      ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1115
                        y z)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1116
                  ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1117
                    ((op #::bool list => bool list list => bool list list) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1118
                      ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1119
                        y z))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1120
                ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1121
                  ((op #::bool list => bool list list => bool list list) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1122
                    z)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1123
  by (import prob_canon ALG_PREFIXFREE_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1124
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1125
lemma ALG_PREFIXFREE_ELT: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1126
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1127
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1128
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1129
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1130
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1131
             ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1132
               ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1133
             ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1134
               ((op #::bool list => bool list list => bool list list) h t)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1135
           ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1136
             (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1137
                 (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1138
                  ((op mem::bool list => bool list list => bool) x t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1139
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1140
                    ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1141
                      ((IS_PREFIX::bool list => bool list => bool) x h))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1142
                    ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1143
                      ((IS_PREFIX::bool list => bool list => bool) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1144
                        x)))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1145
  by (import prob_canon ALG_PREFIXFREE_ELT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1146
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1147
lemma ALG_PREFIXFREE_TLS: "ALL l b. alg_prefixfree (map (op # b) l) = alg_prefixfree l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1148
  by (import prob_canon ALG_PREFIXFREE_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1149
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1150
lemma ALG_PREFIXFREE_STEP: "ALL l1 l2.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1151
   alg_prefixfree (map (op # True) l1 @ map (op # False) l2) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1152
   (alg_prefixfree l1 & alg_prefixfree l2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1153
  by (import prob_canon ALG_PREFIXFREE_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1154
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1155
lemma ALG_PREFIXFREE_APPEND: "ALL h h' t t'.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1156
   alg_prefixfree ((h # t) @ h' # t') =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1157
   (alg_prefixfree (h # t) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1158
    alg_prefixfree (h' # t') & ~ IS_PREFIX h' (last (h # t)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1159
  by (import prob_canon ALG_PREFIXFREE_APPEND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1160
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1161
lemma ALG_PREFIXFREE_FILTER: "(All::((bool list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1162
 (%P::bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1163
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1164
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1165
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1166
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1167
             ((alg_sorted::bool list list => bool) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1168
             ((alg_prefixfree::bool list list => bool) b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1169
           ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1170
             ((filter::(bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1171
                       => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1172
               P b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1173
  by (import prob_canon ALG_PREFIXFREE_FILTER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1174
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1175
lemma ALG_TWINFREE_TL: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1176
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1177
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1178
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1179
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1180
           ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1181
             ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1182
           ((alg_twinfree::bool list list => bool) t)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1183
  by (import prob_canon ALG_TWINFREE_TL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1184
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1185
lemma ALG_TWINFREE_TLS: "ALL l b. alg_twinfree (map (op # b) l) = alg_twinfree l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1186
  by (import prob_canon ALG_TWINFREE_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1187
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1188
lemma ALG_TWINFREE_STEP1: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1189
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1190
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1191
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1192
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1193
           ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1194
             ((op @::bool list list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1195
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1196
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1197
                 ((op #::bool => bool list => bool list) (True::bool)) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1198
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1199
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1200
                 ((op #::bool => bool list => bool list) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1201
                 l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1202
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1203
             ((alg_twinfree::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1204
             ((alg_twinfree::bool list list => bool) l2))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1205
  by (import prob_canon ALG_TWINFREE_STEP1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1206
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1207
lemma ALG_TWINFREE_STEP2: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1208
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1209
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1210
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1211
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1212
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1213
             ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1214
               ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1215
                 ((op mem::bool list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1216
                   ([]::bool list) l1))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1217
               ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1218
                 ((op mem::bool list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1219
                   ([]::bool list) l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1220
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1221
               ((alg_twinfree::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1222
               ((alg_twinfree::bool list list => bool) l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1223
           ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1224
             ((op @::bool list list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1225
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1226
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1227
                 ((op #::bool => bool list => bool list) (True::bool)) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1228
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1229
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1230
                 ((op #::bool => bool list => bool list) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1231
                 l2)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1232
  by (import prob_canon ALG_TWINFREE_STEP2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1233
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1234
lemma ALG_TWINFREE_STEP: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1235
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1236
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1237
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1238
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1239
           ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1240
             ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1241
               ((op mem::bool list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1242
                 ([]::bool list) l1))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1243
             ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1244
               ((op mem::bool list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1245
                 ([]::bool list) l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1246
           ((op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1247
             ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1248
               ((op @::bool list list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1249
                 ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1250
                        => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1251
                   ((op #::bool => bool list => bool list) (True::bool)) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1252
                 ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1253
                        => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1254
                   ((op #::bool => bool list => bool list) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1255
                   l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1256
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1257
               ((alg_twinfree::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1258
               ((alg_twinfree::bool list list => bool) l2)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1259
  by (import prob_canon ALG_TWINFREE_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1260
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1261
lemma ALG_LONGEST_HD: "ALL h t. length h <= alg_longest (h # t)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1262
  by (import prob_canon ALG_LONGEST_HD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1263
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1264
lemma ALG_LONGEST_TL: "ALL h t. alg_longest t <= alg_longest (h # t)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1265
  by (import prob_canon ALG_LONGEST_TL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1266
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1267
lemma ALG_LONGEST_TLS: "ALL h t b. alg_longest (map (op # b) (h # t)) = Suc (alg_longest (h # t))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1268
  by (import prob_canon ALG_LONGEST_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1269
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1270
lemma ALG_LONGEST_APPEND: "ALL l1 l2.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1271
   alg_longest l1 <= alg_longest (l1 @ l2) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1272
   alg_longest l2 <= alg_longest (l1 @ l2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1273
  by (import prob_canon ALG_LONGEST_APPEND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1274
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1275
lemma ALG_CANON_PREFS_HD: "ALL l b. hd (alg_canon_prefs l b) = l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1276
  by (import prob_canon ALG_CANON_PREFS_HD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1277
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1278
lemma ALG_CANON_PREFS_DELETES: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1279
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1280
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1281
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1282
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1283
           (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1284
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1285
                ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1286
                  ((alg_canon_prefs::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1287
                                     => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1288
                    l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1289
                ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1290
                  ((op #::bool list => bool list list => bool list list) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1291
                    b)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1292
  by (import prob_canon ALG_CANON_PREFS_DELETES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1293
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1294
lemma ALG_CANON_PREFS_SORTED: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1295
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1296
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1297
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1298
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1299
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1300
             ((op #::bool list => bool list list => bool list list) l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1301
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1302
             ((alg_canon_prefs::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1303
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1304
               l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1305
  by (import prob_canon ALG_CANON_PREFS_SORTED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1306
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1307
lemma ALG_CANON_PREFS_PREFIXFREE: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1308
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1309
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1310
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1311
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1312
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1313
             ((alg_sorted::bool list list => bool) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1314
             ((alg_prefixfree::bool list list => bool) b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1315
           ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1316
             ((alg_canon_prefs::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1317
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1318
               l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1319
  by (import prob_canon ALG_CANON_PREFS_PREFIXFREE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1320
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1321
lemma ALG_CANON_PREFS_CONSTANT: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1322
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1323
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1324
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1325
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1326
           ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1327
             ((op #::bool list => bool list list => bool list list) l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1328
           ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1329
             ((alg_canon_prefs::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1330
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1331
               l b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1332
             ((op #::bool list => bool list list => bool list list) l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1333
  by (import prob_canon ALG_CANON_PREFS_CONSTANT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1334
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1335
lemma ALG_CANON_FIND_HD: "ALL l h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1336
   hd (alg_canon_find l (h # t)) = l | hd (alg_canon_find l (h # t)) = h"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1337
  by (import prob_canon ALG_CANON_FIND_HD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1338
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1339
lemma ALG_CANON_FIND_DELETES: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1340
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1341
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1342
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1343
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1344
           (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1345
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1346
                ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1347
                  ((alg_canon_find::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1348
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1349
                    l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1350
                ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1351
                  ((op #::bool list => bool list list => bool list list) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1352
                    b)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1353
  by (import prob_canon ALG_CANON_FIND_DELETES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1354
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1355
lemma ALG_CANON_FIND_SORTED: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1356
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1357
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1358
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1359
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1360
           ((alg_sorted::bool list list => bool) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1361
           ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1362
             ((alg_canon_find::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1363
                               => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1364
               l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1365
  by (import prob_canon ALG_CANON_FIND_SORTED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1366
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1367
lemma ALG_CANON_FIND_PREFIXFREE: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1368
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1369
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1370
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1371
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1372
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1373
             ((alg_sorted::bool list list => bool) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1374
             ((alg_prefixfree::bool list list => bool) b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1375
           ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1376
             ((alg_canon_find::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1377
                               => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1378
               l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1379
  by (import prob_canon ALG_CANON_FIND_PREFIXFREE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1380
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1381
lemma ALG_CANON_FIND_CONSTANT: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1382
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1383
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1384
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1385
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1386
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1387
             ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1388
               ((op #::bool list => bool list list => bool list list) l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1389
             ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1390
               ((op #::bool list => bool list list => bool list list) l b)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1391
           ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1392
             ((alg_canon_find::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1393
                               => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1394
               l b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1395
             ((op #::bool list => bool list list => bool list list) l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1396
  by (import prob_canon ALG_CANON_FIND_CONSTANT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1397
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1398
lemma ALG_CANON1_SORTED: "ALL x. alg_sorted (alg_canon1 x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1399
  by (import prob_canon ALG_CANON1_SORTED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1400
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1401
lemma ALG_CANON1_PREFIXFREE: "ALL l. alg_prefixfree (alg_canon1 l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1402
  by (import prob_canon ALG_CANON1_PREFIXFREE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1403
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1404
lemma ALG_CANON1_CONSTANT: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1405
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1406
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1407
      ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1408
        ((alg_prefixfree::bool list list => bool) l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1409
      ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1410
        ((alg_canon1::bool list list => bool list list) l) l))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1411
  by (import prob_canon ALG_CANON1_CONSTANT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1412
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1413
lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1414
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1415
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1416
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1417
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1418
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1419
             ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1420
               ((op #::bool list => bool list list => bool list list) l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1421
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1422
               ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1423
                 ((op #::bool list => bool list list => bool list list) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1424
                   b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1425
               ((alg_twinfree::bool list list => bool) b)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1426
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1427
             ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1428
               ((alg_canon_merge::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1429
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1430
                 l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1431
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1432
               ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1433
                 ((alg_canon_merge::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1434
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1435
                   l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1436
               ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1437
                 ((alg_canon_merge::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1438
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1439
                   l b))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1440
  by (import prob_canon ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1441
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1442
lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1443
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1444
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1445
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1446
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1447
           (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1448
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1449
                ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1450
                  (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1451
                      (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1452
                       ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1453
                         ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1454
                                 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1455
                           l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1456
                       ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1457
                         ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1458
                           ((IS_PREFIX::bool list => bool list => bool) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1459
                             x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1460
                         ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1461
                           ((IS_PREFIX::bool list => bool list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1462
                             h)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1463
                ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1464
                  (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1465
                      (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1466
                       ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1467
                         ((alg_canon_merge::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1468
      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1469
                           l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1470
                       ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1471
                         ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1472
                           ((IS_PREFIX::bool list => bool list => bool) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1473
                             x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1474
                         ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1475
                           ((IS_PREFIX::bool list => bool list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1476
                             h))))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1477
  by (import prob_canon ALG_CANON_MERGE_PREFIXFREE_PRESERVE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1478
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1479
lemma ALG_CANON_MERGE_SHORTENS: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1480
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1481
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1482
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1483
          (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1484
           (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1485
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1486
                ((op mem::bool list => bool list list => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1487
                  ((alg_canon_merge::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1488
                                     => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1489
                    l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1490
                ((Ex::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1491
                  (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1492
                      (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1493
                       ((op mem::bool list => bool list list => bool) y
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1494
                         ((op #::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1495
                                 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1496
                           l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1497
                       ((IS_PREFIX::bool list => bool list => bool) y
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1498
                         x))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1499
  by (import prob_canon ALG_CANON_MERGE_SHORTENS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1500
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1501
lemma ALG_CANON_MERGE_CONSTANT: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1502
 (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1503
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1504
      (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1505
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1506
           ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1507
             ((op #::bool list => bool list list => bool list list) l b))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1508
           ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1509
             ((alg_canon_merge::bool list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1510
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1511
               l b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1512
             ((op #::bool list => bool list list => bool list list) l b))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1513
  by (import prob_canon ALG_CANON_MERGE_CONSTANT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1514
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1515
lemma ALG_CANON2_PREFIXFREE_PRESERVE: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1516
 (%x::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1517
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1518
      (%xa::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1519
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1520
           ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1521
             (%xb::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1522
                 (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1523
                  ((op mem::bool list => bool list list => bool) xb x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1524
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1525
                    ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1526
                      ((IS_PREFIX::bool list => bool list => bool) xa xb))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1527
                    ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1528
                      ((IS_PREFIX::bool list => bool list => bool) xb
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1529
                        xa)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1530
           ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1531
             (%xb::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1532
                 (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1533
                  ((op mem::bool list => bool list list => bool) xb
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1534
                    ((alg_canon2::bool list list => bool list list) x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1535
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1536
                    ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1537
                      ((IS_PREFIX::bool list => bool list => bool) xa xb))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1538
                    ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1539
                      ((IS_PREFIX::bool list => bool list => bool) xb
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1540
                        xa)))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1541
  by (import prob_canon ALG_CANON2_PREFIXFREE_PRESERVE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1542
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1543
lemma ALG_CANON2_SHORTENS: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1544
 (%x::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1545
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1546
      (%xa::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1547
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1548
           ((op mem::bool list => bool list list => bool) xa
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1549
             ((alg_canon2::bool list list => bool list list) x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1550
           ((Ex::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1551
             (%y::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1552
                 (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1553
                  ((op mem::bool list => bool list list => bool) y x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1554
                  ((IS_PREFIX::bool list => bool list => bool) y xa)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1555
  by (import prob_canon ALG_CANON2_SHORTENS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1556
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1557
lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1558
 (%x::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1559
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1560
      ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1561
        ((alg_prefixfree::bool list list => bool) x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1562
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1563
        ((alg_sorted::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1564
          ((alg_canon2::bool list list => bool list list) x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1565
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1566
          ((alg_prefixfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1567
            ((alg_canon2::bool list list => bool list list) x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1568
          ((alg_twinfree::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1569
            ((alg_canon2::bool list list => bool list list) x)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1570
  by (import prob_canon ALG_CANON2_SORTED_PREFIXFREE_TWINFREE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1571
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1572
lemma ALG_CANON2_CONSTANT: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1573
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1574
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1575
      ((alg_twinfree::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1576
      ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1577
        ((alg_canon2::bool list list => bool list list) l) l))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1578
  by (import prob_canon ALG_CANON2_CONSTANT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1579
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1580
lemma ALG_CANON_SORTED_PREFIXFREE_TWINFREE: "ALL l.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1581
   alg_sorted (alg_canon l) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1582
   alg_prefixfree (alg_canon l) & alg_twinfree (alg_canon l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1583
  by (import prob_canon ALG_CANON_SORTED_PREFIXFREE_TWINFREE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1584
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1585
lemma ALG_CANON_CONSTANT: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1586
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1587
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1588
      ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1589
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1590
          ((alg_prefixfree::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1591
          ((alg_twinfree::bool list list => bool) l)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1592
      ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1593
        ((alg_canon::bool list list => bool list list) l) l))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1594
  by (import prob_canon ALG_CANON_CONSTANT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1595
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1596
lemma ALG_CANON_IDEMPOT: "ALL l. alg_canon (alg_canon l) = alg_canon l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1597
  by (import prob_canon ALG_CANON_IDEMPOT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1598
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1599
lemma ALGEBRA_CANON_DEF_ALT: "ALL l. algebra_canon l = (alg_sorted l & alg_prefixfree l & alg_twinfree l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1600
  by (import prob_canon ALGEBRA_CANON_DEF_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1601
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1602
lemma ALGEBRA_CANON_BASIC: "algebra_canon [] & algebra_canon [[]] & (ALL x. algebra_canon [x])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1603
  by (import prob_canon ALGEBRA_CANON_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1604
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1605
lemma ALG_CANON_BASIC: "alg_canon [] = [] & alg_canon [[]] = [[]] & (ALL x. alg_canon [x] = [x])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1606
  by (import prob_canon ALG_CANON_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1607
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1608
lemma ALGEBRA_CANON_TL: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1609
 (%h::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1610
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1611
      (%t::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1612
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1613
           ((algebra_canon::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1614
             ((op #::bool list => bool list list => bool list list) h t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1615
           ((algebra_canon::bool list list => bool) t)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1616
  by (import prob_canon ALGEBRA_CANON_TL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1617
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1618
lemma ALGEBRA_CANON_NIL_MEM: "ALL l. (algebra_canon l & [] mem l) = (l = [[]])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1619
  by (import prob_canon ALGEBRA_CANON_NIL_MEM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1620
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1621
lemma ALGEBRA_CANON_TLS: "ALL l b. algebra_canon (map (op # b) l) = algebra_canon l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1622
  by (import prob_canon ALGEBRA_CANON_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1623
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1624
lemma ALGEBRA_CANON_STEP1: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1625
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1626
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1627
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1628
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1629
           ((algebra_canon::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1630
             ((op @::bool list list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1631
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1632
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1633
                 ((op #::bool => bool list => bool list) (True::bool)) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1634
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1635
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1636
                 ((op #::bool => bool list => bool list) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1637
                 l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1638
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1639
             ((algebra_canon::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1640
             ((algebra_canon::bool list list => bool) l2))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1641
  by (import prob_canon ALGEBRA_CANON_STEP1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1642
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1643
lemma ALGEBRA_CANON_STEP2: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1644
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1645
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1646
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1647
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1648
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1649
             ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1650
               ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1651
                 ((op =::bool list list => bool list list => bool) l1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1652
                   ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1653
                     ([]::bool list) ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1654
               ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1655
                 ((op =::bool list list => bool list list => bool) l2
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1656
                   ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1657
                     ([]::bool list) ([]::bool list list)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1658
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1659
               ((algebra_canon::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1660
               ((algebra_canon::bool list list => bool) l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1661
           ((algebra_canon::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1662
             ((op @::bool list list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1663
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1664
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1665
                 ((op #::bool => bool list => bool list) (True::bool)) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1666
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1667
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1668
                 ((op #::bool => bool list => bool list) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1669
                 l2)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1670
  by (import prob_canon ALGEBRA_CANON_STEP2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1671
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1672
lemma ALGEBRA_CANON_STEP: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1673
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1674
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1675
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1676
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1677
           ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1678
             ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1679
               ((op =::bool list list => bool list list => bool) l1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1680
                 ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1681
                   ([]::bool list) ([]::bool list list))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1682
             ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1683
               ((op =::bool list list => bool list list => bool) l2
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1684
                 ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1685
                   ([]::bool list) ([]::bool list list)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1686
           ((op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1687
             ((algebra_canon::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1688
               ((op @::bool list list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1689
                 ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1690
                        => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1691
                   ((op #::bool => bool list => bool list) (True::bool)) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1692
                 ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1693
                        => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1694
                   ((op #::bool => bool list => bool list) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1695
                   l2)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1696
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1697
               ((algebra_canon::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1698
               ((algebra_canon::bool list list => bool) l2)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1699
  by (import prob_canon ALGEBRA_CANON_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1700
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1701
lemma ALGEBRA_CANON_CASES_THM: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1702
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1703
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1704
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1705
      ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1706
        ((op =::bool list list => bool list list => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1707
          ([]::bool list list))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1708
        ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1709
          ((op =::bool list list => bool list list => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1710
            ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1711
              ([]::bool list) ([]::bool list list)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1712
          ((Ex::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1713
            (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1714
                (Ex::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1715
                 (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1716
                     (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1717
                      ((algebra_canon::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1718
                      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1719
                        ((algebra_canon::bool list list => bool) l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1720
                        ((op =::bool list list => bool list list => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1721
                          ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1722
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1723
                            ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1724
                                   => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1725
                              ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1726
                                (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1727
                              l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1728
                            ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1729
                                   => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1730
                              ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1731
                                (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1732
                              l2))))))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1733
  by (import prob_canon ALGEBRA_CANON_CASES_THM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1734
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1735
lemma ALGEBRA_CANON_CASES: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1736
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1737
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1738
      ((op &::bool => bool => bool) (P ([]::bool list list))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1739
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1740
          (P ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1741
               ([]::bool list) ([]::bool list list)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1742
          ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1743
            (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1744
                (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1745
                 (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1746
                     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1747
                      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1748
                        ((algebra_canon::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1749
                        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1750
                          ((algebra_canon::bool list list => bool) l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1751
                          ((algebra_canon::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1752
                            ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1753
                                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1754
                              ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1755
                                     => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1756
                                ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1757
                                  (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1758
                                l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1759
                              ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1760
                                     => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1761
                                ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1762
                                  (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1763
                                l2)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1764
                      (P ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1765
                                 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1766
                           ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1767
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1768
                             ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1769
                               (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1770
                             l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1771
                           ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1772
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1773
                             ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1774
                               (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1775
                             l2))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1776
      ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1777
        (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1778
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1779
             ((algebra_canon::bool list list => bool) l) (P l))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1780
  by (import prob_canon ALGEBRA_CANON_CASES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1781
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1782
lemma ALGEBRA_CANON_INDUCTION: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1783
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1784
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1785
      ((op &::bool => bool => bool) (P ([]::bool list list))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1786
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1787
          (P ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1788
               ([]::bool list) ([]::bool list list)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1789
          ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1790
            (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1791
                (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1792
                 (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1793
                     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1794
                      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1795
                        ((algebra_canon::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1796
                        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1797
                          ((algebra_canon::bool list list => bool) l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1798
                          ((op &::bool => bool => bool) (P l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1799
                            ((op &::bool => bool => bool) (P l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1800
                              ((algebra_canon::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1801
                                ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1802
  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1803
                                  ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1804
   => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1805
                                    ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1806
(True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1807
                                    l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1808
                                  ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1809
   => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1810
                                    ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1811
(False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1812
                                    l2)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1813
                      (P ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1814
                                 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1815
                           ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1816
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1817
                             ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1818
                               (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1819
                             l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1820
                           ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1821
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1822
                             ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1823
                               (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1824
                             l2))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1825
      ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1826
        (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1827
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1828
             ((algebra_canon::bool list list => bool) l) (P l))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1829
  by (import prob_canon ALGEBRA_CANON_INDUCTION)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1830
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1831
lemma MEM_NIL_STEP: "ALL l1 l2. ~ [] mem map (op # True) l1 @ map (op # False) l2"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1832
  by (import prob_canon MEM_NIL_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1833
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1834
lemma ALG_SORTED_PREFIXFREE_MEM_NIL: "ALL l. (alg_sorted l & alg_prefixfree l & [] mem l) = (l = [[]])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1835
  by (import prob_canon ALG_SORTED_PREFIXFREE_MEM_NIL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1836
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1837
lemma ALG_SORTED_PREFIXFREE_EQUALITY: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1838
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1839
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1840
      (%l'::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1841
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1842
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1843
             ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1844
               (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1845
                   (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1846
                    ((op mem::bool list => bool list list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1847
                    ((op mem::bool list => bool list list => bool) x l')))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1848
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1849
               ((alg_sorted::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1850
               ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1851
                 ((alg_sorted::bool list list => bool) l')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1852
                 ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1853
                   ((alg_prefixfree::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1854
                   ((alg_prefixfree::bool list list => bool) l')))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1855
           ((op =::bool list list => bool list list => bool) l l')))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1856
  by (import prob_canon ALG_SORTED_PREFIXFREE_EQUALITY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1857
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1858
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1859
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1860
;setup_theory boolean_sequence
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1861
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1862
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1863
  SHD :: "(nat => bool) => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1864
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1865
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1866
  SHD_primdef: "SHD == %f. f 0"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1867
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1868
lemma SHD_def: "ALL f. SHD f = f 0"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1869
  by (import boolean_sequence SHD_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1870
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1871
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1872
  STL :: "(nat => bool) => nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1873
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1874
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1875
  STL_primdef: "STL == %f n. f (Suc n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1876
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1877
lemma STL_def: "ALL f n. STL f n = f (Suc n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1878
  by (import boolean_sequence STL_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1879
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1880
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1881
  SCONS :: "bool => (nat => bool) => nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1882
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1883
specification (SCONS_primdef: SCONS) SCONS_def: "(ALL h t. SCONS h t 0 = h) & (ALL h t n. SCONS h t (Suc n) = t n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1884
  by (import boolean_sequence SCONS_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1885
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1886
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1887
  SDEST :: "(nat => bool) => bool * (nat => bool)" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1888
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1889
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1890
  SDEST_primdef: "SDEST == %s. (SHD s, STL s)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1891
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1892
lemma SDEST_def: "SDEST = (%s. (SHD s, STL s))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1893
  by (import boolean_sequence SDEST_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1894
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1895
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1896
  SCONST :: "bool => nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1897
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1898
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1899
  SCONST_primdef: "SCONST == K"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1900
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1901
lemma SCONST_def: "SCONST = K"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1902
  by (import boolean_sequence SCONST_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1903
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1904
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1905
  STAKE :: "nat => (nat => bool) => bool list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1906
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1907
specification (STAKE_primdef: STAKE) STAKE_def: "(ALL s. STAKE 0 s = []) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1908
(ALL n s. STAKE (Suc n) s = SHD s # STAKE n (STL s))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1909
  by (import boolean_sequence STAKE_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1910
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1911
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1912
  SDROP :: "nat => (nat => bool) => nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1913
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1914
specification (SDROP_primdef: SDROP) SDROP_def: "SDROP 0 = I & (ALL n. SDROP (Suc n) = SDROP n o STL)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1915
  by (import boolean_sequence SDROP_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1916
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1917
lemma SCONS_SURJ: "ALL x. EX xa t. x = SCONS xa t"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1918
  by (import boolean_sequence SCONS_SURJ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1919
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1920
lemma SHD_STL_ISO: "ALL h t. EX x. SHD x = h & STL x = t"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1921
  by (import boolean_sequence SHD_STL_ISO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1922
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1923
lemma SHD_SCONS: "ALL h t. SHD (SCONS h t) = h"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1924
  by (import boolean_sequence SHD_SCONS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1925
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1926
lemma STL_SCONS: "ALL h t. STL (SCONS h t) = t"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1927
  by (import boolean_sequence STL_SCONS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1928
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1929
lemma SHD_SCONST: "ALL b. SHD (SCONST b) = b"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1930
  by (import boolean_sequence SHD_SCONST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1931
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1932
lemma STL_SCONST: "ALL b. STL (SCONST b) = SCONST b"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1933
  by (import boolean_sequence STL_SCONST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1934
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1935
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1936
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1937
;setup_theory prob_algebra
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1938
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1939
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1940
  alg_embed :: "bool list => (nat => bool) => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1941
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1942
specification (alg_embed_primdef: alg_embed) alg_embed_def: "(ALL s. alg_embed [] s = True) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1943
(ALL h t s. alg_embed (h # t) s = (h = SHD s & alg_embed t (STL s)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1944
  by (import prob_algebra alg_embed_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1945
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1946
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1947
  algebra_embed :: "bool list list => (nat => bool) => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1948
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1949
specification (algebra_embed_primdef: algebra_embed) algebra_embed_def: "algebra_embed [] = EMPTY &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1950
(ALL h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1951
    algebra_embed (h # t) = pred_set.UNION (alg_embed h) (algebra_embed t))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1952
  by (import prob_algebra algebra_embed_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1953
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1954
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1955
  measurable :: "((nat => bool) => bool) => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1956
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1957
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1958
  measurable_primdef: "measurable == %s. EX b. s = algebra_embed b"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1959
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1960
lemma measurable_def: "ALL s. measurable s = (EX b. s = algebra_embed b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1961
  by (import prob_algebra measurable_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1962
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1963
lemma HALVES_INTER: "pred_set.INTER (%x. SHD x = True) (%x. SHD x = False) = EMPTY"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1964
  by (import prob_algebra HALVES_INTER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1965
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1966
lemma INTER_STL: "ALL p q. pred_set.INTER p q o STL = pred_set.INTER (p o STL) (q o STL)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1967
  by (import prob_algebra INTER_STL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1968
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1969
lemma COMPL_SHD: "ALL b. COMPL (%x. SHD x = b) = (%x. SHD x = (~ b))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1970
  by (import prob_algebra COMPL_SHD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1971
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1972
lemma ALG_EMBED_BASIC: "alg_embed [] = pred_set.UNIV &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1973
(ALL h t.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1974
    alg_embed (h # t) = pred_set.INTER (%x. SHD x = h) (alg_embed t o STL))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1975
  by (import prob_algebra ALG_EMBED_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1976
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1977
lemma ALG_EMBED_NIL: "ALL c. All (alg_embed c) = (c = [])"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1978
  by (import prob_algebra ALG_EMBED_NIL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1979
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1980
lemma ALG_EMBED_POPULATED: "ALL b. Ex (alg_embed b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1981
  by (import prob_algebra ALG_EMBED_POPULATED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1982
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1983
lemma ALG_EMBED_PREFIX: "(All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1984
 (%b::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1985
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1986
      (%c::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1987
          (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1988
           (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1989
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1990
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1991
                  ((alg_embed::bool list => (nat => bool) => bool) b s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1992
                  ((alg_embed::bool list => (nat => bool) => bool) c s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1993
                ((op |::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1994
                  ((IS_PREFIX::bool list => bool list => bool) b c)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1995
                  ((IS_PREFIX::bool list => bool list => bool) c b)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1996
  by (import prob_algebra ALG_EMBED_PREFIX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1997
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1998
lemma ALG_EMBED_PREFIX_SUBSET: "ALL b c. SUBSET (alg_embed b) (alg_embed c) = IS_PREFIX b c"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1999
  by (import prob_algebra ALG_EMBED_PREFIX_SUBSET)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2000
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2001
lemma ALG_EMBED_TWINS: "ALL l.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2002
   pred_set.UNION (alg_embed (SNOC True l)) (alg_embed (SNOC False l)) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2003
   alg_embed l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2004
  by (import prob_algebra ALG_EMBED_TWINS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2005
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2006
lemma ALGEBRA_EMBED_BASIC: "algebra_embed [] = EMPTY &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2007
algebra_embed [[]] = pred_set.UNIV &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2008
(ALL b. algebra_embed [[b]] = (%s. SHD s = b))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2009
  by (import prob_algebra ALGEBRA_EMBED_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2010
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2011
lemma ALGEBRA_EMBED_MEM: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2012
 (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2013
     (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2014
      (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2015
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2016
           ((algebra_embed::bool list list => (nat => bool) => bool) b x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2017
           ((Ex::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2018
             (%l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2019
                 (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2020
                  ((op mem::bool list => bool list list => bool) l b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2021
                  ((alg_embed::bool list => (nat => bool) => bool) l x)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2022
  by (import prob_algebra ALGEBRA_EMBED_MEM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2023
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2024
lemma ALGEBRA_EMBED_APPEND: "ALL l1 l2.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2025
   algebra_embed (l1 @ l2) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2026
   pred_set.UNION (algebra_embed l1) (algebra_embed l2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2027
  by (import prob_algebra ALGEBRA_EMBED_APPEND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2028
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2029
lemma ALGEBRA_EMBED_TLS: "ALL l b.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2030
   algebra_embed (map (op # b) l) (SCONS h t) = (h = b & algebra_embed l t)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2031
  by (import prob_algebra ALGEBRA_EMBED_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2032
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2033
lemma ALG_CANON_PREFS_EMBED: "ALL l b. algebra_embed (alg_canon_prefs l b) = algebra_embed (l # b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2034
  by (import prob_algebra ALG_CANON_PREFS_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2035
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2036
lemma ALG_CANON_FIND_EMBED: "ALL l b. algebra_embed (alg_canon_find l b) = algebra_embed (l # b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2037
  by (import prob_algebra ALG_CANON_FIND_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2038
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2039
lemma ALG_CANON1_EMBED: "ALL x. algebra_embed (alg_canon1 x) = algebra_embed x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2040
  by (import prob_algebra ALG_CANON1_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2041
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2042
lemma ALG_CANON_MERGE_EMBED: "ALL l b. algebra_embed (alg_canon_merge l b) = algebra_embed (l # b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2043
  by (import prob_algebra ALG_CANON_MERGE_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2044
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2045
lemma ALG_CANON2_EMBED: "ALL x. algebra_embed (alg_canon2 x) = algebra_embed x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2046
  by (import prob_algebra ALG_CANON2_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2047
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2048
lemma ALG_CANON_EMBED: "ALL l. algebra_embed (alg_canon l) = algebra_embed l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2049
  by (import prob_algebra ALG_CANON_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2050
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2051
lemma ALGEBRA_CANON_UNIV: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2052
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2053
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2054
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2055
      ((op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2056
        ((op =::((nat => bool) => bool) => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2057
          ((algebra_embed::bool list list => (nat => bool) => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2058
          (pred_set.UNIV::(nat => bool) => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2059
        ((op =::bool list list => bool list list => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2060
          ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2061
            ([]::bool list) ([]::bool list list)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2062
  by (import prob_algebra ALGEBRA_CANON_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2063
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2064
lemma ALG_CANON_REP: "ALL b c. (alg_canon b = alg_canon c) = (algebra_embed b = algebra_embed c)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2065
  by (import prob_algebra ALG_CANON_REP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2066
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2067
lemma ALGEBRA_CANON_EMBED_EMPTY: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2068
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2069
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2070
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2071
      ((op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2072
        ((All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2073
          (%v::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2074
              (Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2075
               ((algebra_embed::bool list list => (nat => bool) => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2076
                 v)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2077
        ((op =::bool list list => bool list list => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2078
          ([]::bool list list))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2079
  by (import prob_algebra ALGEBRA_CANON_EMBED_EMPTY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2080
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2081
lemma ALGEBRA_CANON_EMBED_UNIV: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2082
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2083
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2084
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2085
      ((op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2086
        ((All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2087
          ((algebra_embed::bool list list => (nat => bool) => bool) l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2088
        ((op =::bool list list => bool list list => bool) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2089
          ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2090
            ([]::bool list) ([]::bool list list)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2091
  by (import prob_algebra ALGEBRA_CANON_EMBED_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2092
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2093
lemma MEASURABLE_ALGEBRA: "ALL b. measurable (algebra_embed b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2094
  by (import prob_algebra MEASURABLE_ALGEBRA)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2095
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2096
lemma MEASURABLE_BASIC: "measurable EMPTY &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2097
measurable pred_set.UNIV & (ALL b. measurable (%s. SHD s = b))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2098
  by (import prob_algebra MEASURABLE_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2099
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2100
lemma MEASURABLE_SHD: "ALL b. measurable (%s. SHD s = b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2101
  by (import prob_algebra MEASURABLE_SHD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2102
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2103
lemma ALGEBRA_EMBED_COMPL: "ALL l. EX l'. COMPL (algebra_embed l) = algebra_embed l'"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2104
  by (import prob_algebra ALGEBRA_EMBED_COMPL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2105
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2106
lemma MEASURABLE_COMPL: "ALL s. measurable (COMPL s) = measurable s"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2107
  by (import prob_algebra MEASURABLE_COMPL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2108
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2109
lemma MEASURABLE_UNION: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2110
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2111
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2112
      (%t::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2113
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2114
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2115
             ((measurable::((nat => bool) => bool) => bool) s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2116
             ((measurable::((nat => bool) => bool) => bool) t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2117
           ((measurable::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2118
             ((pred_set.UNION::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2119
                               => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2120
                                  => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2121
               s t))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2122
  by (import prob_algebra MEASURABLE_UNION)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2123
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2124
lemma MEASURABLE_INTER: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2125
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2126
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2127
      (%t::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2128
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2129
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2130
             ((measurable::((nat => bool) => bool) => bool) s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2131
             ((measurable::((nat => bool) => bool) => bool) t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2132
           ((measurable::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2133
             ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2134
                               => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2135
                                  => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2136
               s t))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2137
  by (import prob_algebra MEASURABLE_INTER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2138
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2139
lemma MEASURABLE_STL: "ALL p. measurable (p o STL) = measurable p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2140
  by (import prob_algebra MEASURABLE_STL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2141
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2142
lemma MEASURABLE_SDROP: "ALL n p. measurable (p o SDROP n) = measurable p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2143
  by (import prob_algebra MEASURABLE_SDROP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2144
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2145
lemma MEASURABLE_INTER_HALVES: "ALL p.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2146
   (measurable (pred_set.INTER (%x. SHD x = True) p) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2147
    measurable (pred_set.INTER (%x. SHD x = False) p)) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2148
   measurable p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2149
  by (import prob_algebra MEASURABLE_INTER_HALVES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2150
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2151
lemma MEASURABLE_HALVES: "ALL p q.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2152
   measurable
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2153
    (pred_set.UNION (pred_set.INTER (%x. SHD x = True) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2154
      (pred_set.INTER (%x. SHD x = False) q)) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2155
   (measurable (pred_set.INTER (%x. SHD x = True) p) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2156
    measurable (pred_set.INTER (%x. SHD x = False) q))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2157
  by (import prob_algebra MEASURABLE_HALVES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2158
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2159
lemma MEASURABLE_INTER_SHD: "ALL b p.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2160
   measurable (pred_set.INTER (%x. SHD x = b) (p o STL)) = measurable p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2161
  by (import prob_algebra MEASURABLE_INTER_SHD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2162
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2163
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2164
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2165
;setup_theory prob
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2166
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2167
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2168
  alg_measure :: "bool list list => real" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2169
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2170
specification (alg_measure_primdef: alg_measure) alg_measure_def: "alg_measure [] = 0 &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2171
(ALL l rest. alg_measure (l # rest) = (1 / 2) ^ length l + alg_measure rest)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2172
  by (import prob alg_measure_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2173
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2174
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2175
  algebra_measure :: "bool list list => real" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2176
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2177
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2178
  algebra_measure_primdef: "algebra_measure ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2179
%b. inf (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2180
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2181
lemma algebra_measure_def: "ALL b.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2182
   algebra_measure b =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2183
   inf (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2184
  by (import prob algebra_measure_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2185
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2186
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2187
  prob :: "((nat => bool) => bool) => real" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2188
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2189
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2190
  prob_primdef: "prob ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2191
%s. sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2192
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2193
lemma prob_def: "ALL s.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2194
   prob s =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2195
   sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2196
  by (import prob prob_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2197
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2198
lemma ALG_TWINS_MEASURE: "ALL l::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2199
   ((1::real) / (2::real)) ^ length (SNOC True l) +
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2200
   ((1::real) / (2::real)) ^ length (SNOC False l) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2201
   ((1::real) / (2::real)) ^ length l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2202
  by (import prob ALG_TWINS_MEASURE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2203
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2204
lemma ALG_MEASURE_BASIC: "alg_measure [] = 0 &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2205
alg_measure [[]] = 1 & (ALL b. alg_measure [[b]] = 1 / 2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2206
  by (import prob ALG_MEASURE_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2207
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2208
lemma ALG_MEASURE_POS: "ALL l. 0 <= alg_measure l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2209
  by (import prob ALG_MEASURE_POS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2210
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2211
lemma ALG_MEASURE_APPEND: "ALL l1 l2. alg_measure (l1 @ l2) = alg_measure l1 + alg_measure l2"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2212
  by (import prob ALG_MEASURE_APPEND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2213
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2214
lemma ALG_MEASURE_TLS: "ALL l b. 2 * alg_measure (map (op # b) l) = alg_measure l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2215
  by (import prob ALG_MEASURE_TLS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2216
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2217
lemma ALG_CANON_PREFS_MONO: "ALL l b. alg_measure (alg_canon_prefs l b) <= alg_measure (l # b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2218
  by (import prob ALG_CANON_PREFS_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2219
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2220
lemma ALG_CANON_FIND_MONO: "ALL l b. alg_measure (alg_canon_find l b) <= alg_measure (l # b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2221
  by (import prob ALG_CANON_FIND_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2222
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2223
lemma ALG_CANON1_MONO: "ALL x. alg_measure (alg_canon1 x) <= alg_measure x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2224
  by (import prob ALG_CANON1_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2225
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2226
lemma ALG_CANON_MERGE_MONO: "ALL l b. alg_measure (alg_canon_merge l b) <= alg_measure (l # b)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2227
  by (import prob ALG_CANON_MERGE_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2228
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2229
lemma ALG_CANON2_MONO: "ALL x. alg_measure (alg_canon2 x) <= alg_measure x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2230
  by (import prob ALG_CANON2_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2231
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2232
lemma ALG_CANON_MONO: "ALL l. alg_measure (alg_canon l) <= alg_measure l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2233
  by (import prob ALG_CANON_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2234
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2235
lemma ALGEBRA_MEASURE_DEF_ALT: "ALL l. algebra_measure l = alg_measure (alg_canon l)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2236
  by (import prob ALGEBRA_MEASURE_DEF_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2237
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2238
lemma ALGEBRA_MEASURE_BASIC: "algebra_measure [] = 0 &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2239
algebra_measure [[]] = 1 & (ALL b. algebra_measure [[b]] = 1 / 2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2240
  by (import prob ALGEBRA_MEASURE_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2241
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2242
lemma ALGEBRA_CANON_MEASURE_MAX: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2243
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2244
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2245
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2246
      ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2247
        ((alg_measure::bool list list => real) l) (1::real)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2248
  by (import prob ALGEBRA_CANON_MEASURE_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2249
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2250
lemma ALGEBRA_MEASURE_MAX: "ALL l. algebra_measure l <= 1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2251
  by (import prob ALGEBRA_MEASURE_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2252
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2253
lemma ALGEBRA_MEASURE_MONO_EMBED: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2254
 (%x::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2255
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2256
      (%xa::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2257
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2258
           ((SUBSET::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2259
                     => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2260
             ((algebra_embed::bool list list => (nat => bool) => bool) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2261
             ((algebra_embed::bool list list => (nat => bool) => bool) xa))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2262
           ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2263
             ((algebra_measure::bool list list => real) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2264
             ((algebra_measure::bool list list => real) xa))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2265
  by (import prob ALGEBRA_MEASURE_MONO_EMBED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2266
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2267
lemma ALG_MEASURE_COMPL: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2268
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2269
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2270
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2271
      ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2272
        (%c::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2273
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2274
             ((algebra_canon::bool list list => bool) c)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2275
             ((op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2276
               ((op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2277
                       => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2278
                 ((COMPL::((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2279
                   ((algebra_embed::bool list list => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2280
                     l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2281
                 ((algebra_embed::bool list list => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2282
                   c))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2283
               ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2284
                 ((op +::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2285
                   ((alg_measure::bool list list => real) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2286
                   ((alg_measure::bool list list => real) c))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2287
                 (1::real))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2288
  by (import prob ALG_MEASURE_COMPL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2289
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2290
lemma ALG_MEASURE_ADDITIVE: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2291
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2292
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2293
      ((algebra_canon::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2294
      ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2295
        (%c::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2296
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2297
             ((algebra_canon::bool list list => bool) c)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2298
             ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2299
               (%d::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2300
                   (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2301
                    ((algebra_canon::bool list list => bool) d)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2302
                    ((op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2303
                      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2304
                        ((op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2305
                                => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2306
                          ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2307
      => ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2308
                            ((algebra_embed::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2309
       => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2310
                              c)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2311
                            ((algebra_embed::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2312
       => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2313
                              d))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2314
                          (EMPTY::(nat => bool) => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2315
                        ((op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2316
                                => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2317
                          ((algebra_embed::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2318
     => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2319
                            l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2320
                          ((pred_set.UNION::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2321
      => ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2322
                            ((algebra_embed::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2323
       => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2324
                              c)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2325
                            ((algebra_embed::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2326
       => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2327
                              d))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2328
                      ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2329
                        ((alg_measure::bool list list => real) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2330
                        ((op +::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2331
                          ((alg_measure::bool list list => real) c)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2332
                          ((alg_measure::bool list list => real) d)))))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2333
  by (import prob ALG_MEASURE_ADDITIVE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2334
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2335
lemma PROB_ALGEBRA: "ALL l. prob (algebra_embed l) = algebra_measure l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2336
  by (import prob PROB_ALGEBRA)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2337
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2338
lemma PROB_BASIC: "prob EMPTY = 0 &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2339
prob pred_set.UNIV = 1 & (ALL b. prob (%s. SHD s = b) = 1 / 2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2340
  by (import prob PROB_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2341
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2342
lemma PROB_ADDITIVE: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2343
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2344
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2345
      (%t::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2346
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2347
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2348
             ((measurable::((nat => bool) => bool) => bool) s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2349
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2350
               ((measurable::((nat => bool) => bool) => bool) t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2351
               ((op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2352
                       => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2353
                 ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2354
                                   => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2355
=> (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2356
                   s t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2357
                 (EMPTY::(nat => bool) => bool))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2358
           ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2359
             ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2360
               ((pred_set.UNION::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2361
                                 => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2362
                                    => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2363
                 s t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2364
             ((op +::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2365
               ((prob::((nat => bool) => bool) => real) s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2366
               ((prob::((nat => bool) => bool) => real) t)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2367
  by (import prob PROB_ADDITIVE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2368
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2369
lemma PROB_COMPL: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2370
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2371
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2372
      ((measurable::((nat => bool) => bool) => bool) s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2373
      ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2374
        ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2375
          ((COMPL::((nat => bool) => bool) => (nat => bool) => bool) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2376
        ((op -::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2377
          ((prob::((nat => bool) => bool) => real) s))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2378
  by (import prob PROB_COMPL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2379
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2380
lemma PROB_SUP_EXISTS1: "ALL s. EX x b. algebra_measure b = x & SUBSET (algebra_embed b) s"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2381
  by (import prob PROB_SUP_EXISTS1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2382
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2383
lemma PROB_SUP_EXISTS2: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2384
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2385
     (Ex::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2386
      (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2387
          (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2388
           (%r::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2389
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2390
                ((Ex::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2391
                  (%b::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2392
                      (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2393
                       ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2394
                         ((algebra_measure::bool list list => real) b) r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2395
                       ((SUBSET::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2396
                                 => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2397
                         ((algebra_embed::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2398
    => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2399
                           b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2400
                         s)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2401
                ((op <=::real => real => bool) r x))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2402
  by (import prob PROB_SUP_EXISTS2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2403
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2404
lemma PROB_LE_X: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2405
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2406
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2407
      (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2408
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2409
           ((All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2410
             (%s'::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2411
                 (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2412
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2413
                    ((measurable::((nat => bool) => bool) => bool) s')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2414
                    ((SUBSET::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2415
                              => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2416
                      s' s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2417
                  ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2418
                    ((prob::((nat => bool) => bool) => real) s') x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2419
           ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2420
             ((prob::((nat => bool) => bool) => real) s) x)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2421
  by (import prob PROB_LE_X)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2422
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2423
lemma X_LE_PROB: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2424
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2425
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2426
      (%x::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2427
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2428
           ((Ex::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2429
             (%s'::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2430
                 (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2431
                  ((measurable::((nat => bool) => bool) => bool) s')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2432
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2433
                    ((SUBSET::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2434
                              => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2435
                      s' s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2436
                    ((op <=::real => real => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2437
                      ((prob::((nat => bool) => bool) => real) s')))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2438
           ((op <=::real => real => bool) x
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2439
             ((prob::((nat => bool) => bool) => real) s))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2440
  by (import prob X_LE_PROB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2441
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2442
lemma PROB_SUBSET_MONO: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2443
 (%s::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2444
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2445
      (%t::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2446
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2447
           ((SUBSET::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2448
                     => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2449
             s t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2450
           ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2451
             ((prob::((nat => bool) => bool) => real) s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2452
             ((prob::((nat => bool) => bool) => real) t))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2453
  by (import prob PROB_SUBSET_MONO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2454
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2455
lemma PROB_ALG: "ALL x. prob (alg_embed x) = (1 / 2) ^ length x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2456
  by (import prob PROB_ALG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2457
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2458
lemma PROB_STL: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2459
 (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2460
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2461
      ((measurable::((nat => bool) => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2462
      ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2463
        ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2464
          ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2465
                  => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2466
                     => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2467
            p (STL::(nat => bool) => nat => bool)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2468
        ((prob::((nat => bool) => bool) => real) p)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2469
  by (import prob PROB_STL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2470
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2471
lemma PROB_SDROP: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2472
 (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2473
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2474
      (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2475
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2476
           ((measurable::((nat => bool) => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2477
           ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2478
             ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2479
               ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2480
                       => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2481
                          => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2482
                 p ((SDROP::nat => (nat => bool) => nat => bool) n)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2483
             ((prob::((nat => bool) => bool) => real) p))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2484
  by (import prob PROB_SDROP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2485
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2486
lemma PROB_INTER_HALVES: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2487
 (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2488
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2489
      ((measurable::((nat => bool) => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2490
      ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2491
        ((op +::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2492
          ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2493
            ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2494
                              => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2495
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2496
              (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2497
                  (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2498
                   ((SHD::(nat => bool) => bool) x) (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2499
              p))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2500
          ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2501
            ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2502
                              => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2503
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2504
              (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2505
                  (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2506
                   ((SHD::(nat => bool) => bool) x) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2507
              p)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2508
        ((prob::((nat => bool) => bool) => real) p)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2509
  by (import prob PROB_INTER_HALVES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2510
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2511
lemma PROB_INTER_SHD: "(All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2512
 (%b::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2513
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2514
      (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2515
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2516
           ((measurable::((nat => bool) => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2517
           ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2518
             ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2519
               ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2520
                                 => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2521
                                    => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2522
                 (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2523
                     (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2524
                      ((SHD::(nat => bool) => bool) x) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2525
                 ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2526
                         => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2527
                            => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2528
                   p (STL::(nat => bool) => nat => bool))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2529
             ((op *::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2530
               ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2531
                 ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  2532
                   ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  2533
                     ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  2534
                       (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  2535
                     (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2536
               ((prob::((nat => bool) => bool) => real) p)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2537
  by (import prob PROB_INTER_SHD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2538
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2539
lemma ALGEBRA_MEASURE_POS: "ALL l. 0 <= algebra_measure l"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2540
  by (import prob ALGEBRA_MEASURE_POS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2541
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2542
lemma ALGEBRA_MEASURE_RANGE: "ALL l. 0 <= algebra_measure l & algebra_measure l <= 1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2543
  by (import prob ALGEBRA_MEASURE_RANGE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2544
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2545
lemma PROB_POS: "ALL p. 0 <= prob p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2546
  by (import prob PROB_POS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2547
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2548
lemma PROB_MAX: "ALL p. prob p <= 1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2549
  by (import prob PROB_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2550
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2551
lemma PROB_RANGE: "ALL p. 0 <= prob p & prob p <= 1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2552
  by (import prob PROB_RANGE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2553
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2554
lemma ABS_PROB: "ALL p. abs (prob p) = prob p"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2555
  by (import prob ABS_PROB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2556
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2557
lemma PROB_SHD: "ALL b. prob (%s. SHD s = b) = 1 / 2"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2558
  by (import prob PROB_SHD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2559
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2560
lemma PROB_COMPL_LE1: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2561
 (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2562
     (All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2563
      (%r::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2564
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2565
           ((measurable::((nat => bool) => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2566
           ((op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2567
             ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2568
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2569
                 ((COMPL::((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2570
                   p))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2571
               r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2572
             ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2573
               ((op -::real => real => real) (1::real) r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2574
               ((prob::((nat => bool) => bool) => real) p)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2575
  by (import prob PROB_COMPL_LE1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2576
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2577
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2578
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2579
;setup_theory prob_pseudo
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2580
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2581
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2582
  pseudo_linear_hd :: "nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2583
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2584
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2585
  pseudo_linear_hd_primdef: "pseudo_linear_hd == EVEN"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2586
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2587
lemma pseudo_linear_hd_def: "pseudo_linear_hd = EVEN"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2588
  by (import prob_pseudo pseudo_linear_hd_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2589
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2590
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2591
  pseudo_linear_tl :: "nat => nat => nat => nat => nat" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2592
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2593
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2594
  pseudo_linear_tl_primdef: "pseudo_linear_tl == %a b n x. (a * x + b) mod (2 * n + 1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2595
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2596
lemma pseudo_linear_tl_def: "ALL a b n x. pseudo_linear_tl a b n x = (a * x + b) mod (2 * n + 1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2597
  by (import prob_pseudo pseudo_linear_tl_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2598
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2599
lemma PSEUDO_LINEAR1_EXECUTE: "EX x. (ALL xa. SHD (x xa) = pseudo_linear_hd xa) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2600
      (ALL xa.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2601
          STL (x xa) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2602
          x (pseudo_linear_tl
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2603
              (NUMERAL
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2604
                (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2605
                  (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2606
                    (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2607
                      (NUMERAL_BIT2
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2608
                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2609
              (NUMERAL
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2610
                (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2611
                  (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2612
                    (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2613
                      (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2614
                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2615
              (NUMERAL
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2616
                (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2617
                  (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2618
                    (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2619
                      (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2620
                        (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2621
              xa))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2622
  by (import prob_pseudo PSEUDO_LINEAR1_EXECUTE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2623
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2624
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2625
  pseudo_linear1 :: "nat => nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2626
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2627
specification (pseudo_linear1_primdef: pseudo_linear1) pseudo_linear1_def: "(ALL x. SHD (pseudo_linear1 x) = pseudo_linear_hd x) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2628
(ALL x.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2629
    STL (pseudo_linear1 x) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2630
    pseudo_linear1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2631
     (pseudo_linear_tl
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2632
       (NUMERAL
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2633
         (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2634
           (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2635
             (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2636
               (NUMERAL_BIT2 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2637
       (NUMERAL
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2638
         (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2639
           (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2640
             (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2641
               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2642
       (NUMERAL
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2643
         (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2644
           (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2645
             (NUMERAL_BIT1
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2646
               (NUMERAL_BIT1 (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2647
       x))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2648
  by (import prob_pseudo pseudo_linear1_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2649
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2650
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2651
  pseudo :: "nat => nat => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2652
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2653
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2654
  pseudo_primdef: "pseudo == pseudo_linear1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2655
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2656
lemma pseudo_def: "pseudo = pseudo_linear1"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2657
  by (import prob_pseudo pseudo_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2658
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2659
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2660
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2661
;setup_theory prob_indep
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2662
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2663
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2664
  indep_set :: "((nat => bool) => bool) => ((nat => bool) => bool) => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2665
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2666
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2667
  indep_set_primdef: "indep_set ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2668
%p q. measurable p &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2669
      measurable q & prob (pred_set.INTER p q) = prob p * prob q"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2670
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2671
lemma indep_set_def: "ALL p q.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2672
   indep_set p q =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2673
   (measurable p &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2674
    measurable q & prob (pred_set.INTER p q) = prob p * prob q)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2675
  by (import prob_indep indep_set_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2676
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2677
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2678
  alg_cover_set :: "bool list list => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2679
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2680
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2681
  alg_cover_set_primdef: "alg_cover_set ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2682
%l. alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2683
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2684
lemma alg_cover_set_def: "ALL l.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2685
   alg_cover_set l =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2686
   (alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2687
  by (import prob_indep alg_cover_set_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2688
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2689
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2690
  alg_cover :: "bool list list => (nat => bool) => bool list" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2691
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2692
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2693
  alg_cover_primdef: "alg_cover == %l x. SOME b. b mem l & alg_embed b x"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2694
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2695
lemma alg_cover_def: "ALL l x. alg_cover l x = (SOME b. b mem l & alg_embed b x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2696
  by (import prob_indep alg_cover_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2697
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2698
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2699
  indep :: "((nat => bool) => 'a * (nat => bool)) => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2700
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2701
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2702
  indep_primdef: "indep ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2703
%f. EX l r.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2704
       alg_cover_set l &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2705
       (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2706
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2707
lemma indep_def: "ALL f.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2708
   indep f =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2709
   (EX l r.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2710
       alg_cover_set l &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2711
       (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2712
  by (import prob_indep indep_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2713
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2714
lemma INDEP_SET_BASIC: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2715
 (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2716
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2717
      ((measurable::((nat => bool) => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2718
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2719
        ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2720
                     => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2721
          (EMPTY::(nat => bool) => bool) p)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2722
        ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2723
                     => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2724
          (pred_set.UNIV::(nat => bool) => bool) p)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2725
  by (import prob_indep INDEP_SET_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2726
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2727
lemma INDEP_SET_SYM: "ALL p q. indep_set p q = indep_set p q"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2728
  by (import prob_indep INDEP_SET_SYM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2729
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2730
lemma INDEP_SET_DISJOINT_DECOMP: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2731
 (%p::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2732
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2733
      (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2734
          (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2735
           (%r::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2736
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2737
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2738
                  ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2739
                               => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2740
                    p r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2741
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2742
                    ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2743
                                 => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2744
                      q r)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2745
                    ((op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2746
                            => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2747
                      ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2748
  => ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2749
                        p q)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2750
                      (EMPTY::(nat => bool) => bool))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2751
                ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2752
                             => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2753
                  ((pred_set.UNION::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2754
                                    => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2755
 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2756
                    p q)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2757
                  r))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2758
  by (import prob_indep INDEP_SET_DISJOINT_DECOMP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2759
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2760
lemma ALG_COVER_SET_BASIC: "~ alg_cover_set [] & alg_cover_set [[]] & alg_cover_set [[True], [False]]"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2761
  by (import prob_indep ALG_COVER_SET_BASIC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2762
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2763
lemma ALG_COVER_WELL_DEFINED: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2764
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2765
     (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2766
      (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2767
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2768
           ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2769
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2770
             ((op mem::bool list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2771
               ((alg_cover::bool list list => (nat => bool) => bool list) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2772
                 x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2773
               l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2774
             ((alg_embed::bool list => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2775
               ((alg_cover::bool list list => (nat => bool) => bool list) l
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2776
                 x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2777
               x))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2778
  by (import prob_indep ALG_COVER_WELL_DEFINED)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2779
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2780
lemma ALG_COVER_UNIV: "alg_cover [[]] = K []"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2781
  by (import prob_indep ALG_COVER_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2782
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2783
lemma MAP_CONS_TL_FILTER: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2784
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2785
     (All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2786
      (%b::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2787
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2788
           ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2789
             ((op mem::bool list => bool list list => bool) ([]::bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2790
               l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2791
           ((op =::bool list list => bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2792
             ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2793
                    => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2794
               ((op #::bool => bool list => bool list) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2795
               ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2796
                      => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2797
                 (tl::bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2798
                 ((filter::(bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2799
                           => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2800
                   (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2801
                       (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2802
                        ((hd::bool list => bool) x) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2803
                   l)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2804
             ((filter::(bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2805
                       => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2806
               (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2807
                   (op =::bool => bool => bool) ((hd::bool list => bool) x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2808
                    b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2809
               l))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2810
  by (import prob_indep MAP_CONS_TL_FILTER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2811
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2812
lemma ALG_COVER_SET_CASES_THM: "ALL l.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2813
   alg_cover_set l =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2814
   (l = [[]] |
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2815
    (EX x xa.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2816
        alg_cover_set x &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2817
        alg_cover_set xa & l = map (op # True) x @ map (op # False) xa))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2818
  by (import prob_indep ALG_COVER_SET_CASES_THM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2819
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2820
lemma ALG_COVER_SET_CASES: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2821
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2822
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2823
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2824
        (P ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2825
             ([]::bool list) ([]::bool list list)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2826
        ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2827
          (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2828
              (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2829
               (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2830
                   (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2831
                    ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2832
                      ((alg_cover_set::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2833
                      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2834
                        ((alg_cover_set::bool list list => bool) l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2835
                        ((alg_cover_set::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2836
                          ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2837
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2838
                            ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2839
                                   => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2840
                              ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2841
                                (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2842
                              l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2843
                            ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2844
                                   => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2845
                              ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2846
                                (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2847
                              l2)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2848
                    (P ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2849
                               => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2850
                         ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2851
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2852
                           ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2853
                             (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2854
                           l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2855
                         ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2856
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2857
                           ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2858
                             (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2859
                           l2)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2860
      ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2861
        (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2862
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2863
             ((alg_cover_set::bool list list => bool) l) (P l))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2864
  by (import prob_indep ALG_COVER_SET_CASES)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2865
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2866
lemma ALG_COVER_SET_INDUCTION: "(All::((bool list list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2867
 (%P::bool list list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2868
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2869
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2870
        (P ((op #::bool list => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2871
             ([]::bool list) ([]::bool list list)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2872
        ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2873
          (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2874
              (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2875
               (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2876
                   (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2877
                    ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2878
                      ((alg_cover_set::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2879
                      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2880
                        ((alg_cover_set::bool list list => bool) l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2881
                        ((op &::bool => bool => bool) (P l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2882
                          ((op &::bool => bool => bool) (P l2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2883
                            ((alg_cover_set::bool list list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2884
                              ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2885
=> bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2886
                                ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2887
 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2888
                                  ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2889
                                    (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2890
                                  l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2891
                                ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2892
 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2893
                                  ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2894
                                    (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2895
                                  l2)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2896
                    (P ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2897
                               => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2898
                         ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2899
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2900
                           ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2901
                             (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2902
                           l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2903
                         ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2904
                                => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2905
                           ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2906
                             (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2907
                           l2)))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2908
      ((All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2909
        (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2910
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2911
             ((alg_cover_set::bool list list => bool) l) (P l))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2912
  by (import prob_indep ALG_COVER_SET_INDUCTION)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2913
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2914
lemma ALG_COVER_EXISTS_UNIQUE: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2915
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2916
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2917
      ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2918
      ((All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2919
        (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2920
            (Ex1::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2921
             (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2922
                 (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2923
                  ((op mem::bool list => bool list list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2924
                  ((alg_embed::bool list => (nat => bool) => bool) x s)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2925
  by (import prob_indep ALG_COVER_EXISTS_UNIQUE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2926
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2927
lemma ALG_COVER_UNIQUE: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2928
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2929
     (All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2930
      (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2931
          (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2932
           (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2933
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2934
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2935
                  ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2936
                  ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2937
                    ((op mem::bool list => bool list list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2938
                    ((alg_embed::bool list => (nat => bool) => bool) x s)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2939
                ((op =::bool list => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2940
                  ((alg_cover::bool list list => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2941
                    l s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2942
                  x))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2943
  by (import prob_indep ALG_COVER_UNIQUE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2944
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2945
lemma ALG_COVER_STEP: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2946
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2947
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2948
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2949
          (All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2950
           (%h::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2951
               (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2952
                (%t::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2953
                    (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2954
                     ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2955
                       ((alg_cover_set::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2956
                       ((alg_cover_set::bool list list => bool) l2))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2957
                     ((op =::bool list => bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2958
                       ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2959
                                    => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2960
                         ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2961
                                 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2962
                           ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2963
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2964
                             ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2965
                               (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2966
                             l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2967
                           ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2968
                                  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2969
                             ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2970
                               (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2971
                             l2))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2972
                         ((SCONS::bool => (nat => bool) => nat => bool) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2973
                           t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2974
                       ((If::bool => bool list => bool list => bool list) h
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2975
                         ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2976
                           (True::bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2977
                           ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2978
  => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2979
                             l1 t))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2980
                         ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2981
                           (False::bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2982
                           ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2983
  => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2984
                             l2 t))))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2985
  by (import prob_indep ALG_COVER_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2986
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2987
lemma ALG_COVER_HEAD: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2988
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2989
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2990
      ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2991
      ((All::((bool list => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2992
        (%f::bool list => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2993
            (op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2994
                   => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2995
             ((op o::(bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2996
                     => ((nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2997
                        => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2998
               f ((alg_cover::bool list list => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  2999
                   l))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3000
             ((algebra_embed::bool list list => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3001
               ((filter::(bool list => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3002
                         => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3003
                 f l)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3004
  by (import prob_indep ALG_COVER_HEAD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3005
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3006
lemma ALG_COVER_TAIL_STEP: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3007
 (%l1::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3008
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3009
      (%l2::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3010
          (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3011
           (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3012
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3013
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3014
                  ((alg_cover_set::bool list list => bool) l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3015
                  ((alg_cover_set::bool list list => bool) l2))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3016
                ((op =::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3017
                        => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3018
                  ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3019
                          => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3020
                             => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3021
                    q (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3022
                          (SDROP::nat => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3023
                           ((size::bool list => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3024
                             ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3025
    => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3026
                               ((op @::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3027
 => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3028
                                 ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3029
  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3030
                                   ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3031
                                     (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3032
                                   l1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3033
                                 ((map::(bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3034
  => bool list list => bool list list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3035
                                   ((op #::bool => bool list => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3036
                                     (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3037
                                   l2))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3038
                               x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3039
                           x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3040
                  ((pred_set.UNION::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3041
                                    => ((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3042
 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3043
                    ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3044
=> ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3045
                      (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3046
                          (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3047
                           ((SHD::(nat => bool) => bool) x) (True::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3048
                      ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3049
                              => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3050
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3051
                        q ((op o::((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3052
                                  => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3053
                                     => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3054
                            (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3055
                                (SDROP::nat => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3056
                                 ((size::bool list => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3057
                                   ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3058
          => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3059
                                     l1 x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3060
                                 x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3061
                            (STL::(nat => bool) => nat => bool))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3062
                    ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3063
=> ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3064
                      (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3065
                          (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3066
                           ((SHD::(nat => bool) => bool) x) (False::bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3067
                      ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3068
                              => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3069
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3070
                        q ((op o::((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3071
                                  => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3072
                                     => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3073
                            (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3074
                                (SDROP::nat => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3075
                                 ((size::bool list => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3076
                                   ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3077
          => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3078
                                     l2 x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3079
                                 x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3080
                            (STL::(nat => bool) => nat => bool)))))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3081
  by (import prob_indep ALG_COVER_TAIL_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3082
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3083
lemma ALG_COVER_TAIL_MEASURABLE: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3084
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3085
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3086
      ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3087
      ((All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3088
        (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3089
            (op =::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3090
             ((measurable::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3091
               ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3092
                       => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3093
                          => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3094
                 q (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3095
                       (SDROP::nat => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3096
                        ((size::bool list => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3097
                          ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3098
 => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3099
                            l x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3100
                        x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3101
             ((measurable::((nat => bool) => bool) => bool) q))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3102
  by (import prob_indep ALG_COVER_TAIL_MEASURABLE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3103
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3104
lemma ALG_COVER_TAIL_PROB: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3105
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3106
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3107
      ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3108
      ((All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3109
        (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3110
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3111
             ((measurable::((nat => bool) => bool) => bool) q)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3112
             ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3113
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3114
                 ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3115
                         => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3116
                            => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3117
                   q (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3118
                         (SDROP::nat => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3119
                          ((size::bool list => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3120
                            ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3121
   => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3122
                              l x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3123
                          x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3124
               ((prob::((nat => bool) => bool) => real) q)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3125
  by (import prob_indep ALG_COVER_TAIL_PROB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3126
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3127
lemma INDEP_INDEP_SET_LEMMA: "(All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3128
 (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3129
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3130
      ((alg_cover_set::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3131
      ((All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3132
        (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3133
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3134
             ((measurable::((nat => bool) => bool) => bool) q)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3135
             ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3136
               (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3137
                   (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3138
                    ((op mem::bool list => bool list list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3139
                    ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3140
                      ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3141
                        ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3142
    => ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3143
                          ((alg_embed::bool list => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3144
                            x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3145
                          ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3146
                                  => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3147
                                     => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3148
                            q (%x::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3149
                                  (SDROP::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3150
    => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3151
                                   ((size::bool list => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3152
                                     ((alg_cover::bool list list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3153
            => (nat => bool) => bool list)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3154
 l x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3155
                                   x))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3156
                      ((op *::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3157
                        ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3158
                          ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3159
                            ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3160
                              ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3161
                                ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3162
                                  (Numeral.Pls::bin) (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3163
                                (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3164
                          ((size::bool list => nat) x))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3165
                        ((prob::((nat => bool) => bool) => real) q))))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3166
  by (import prob_indep INDEP_INDEP_SET_LEMMA)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3167
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3168
lemma INDEP_SET_LIST: "(All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3169
 (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3170
     (All::(bool list list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3171
      (%l::bool list list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3172
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3173
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3174
             ((alg_sorted::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3175
             ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3176
               ((alg_prefixfree::bool list list => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3177
               ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3178
                 ((measurable::((nat => bool) => bool) => bool) q)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3179
                 ((All::(bool list => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3180
                   (%x::bool list.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3181
                       (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3182
                        ((op mem::bool list => bool list list => bool) x l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3183
                        ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3184
                                     => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3185
                          ((alg_embed::bool list => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3186
                            x)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3187
                          q))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3188
           ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3189
                        => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3190
             ((algebra_embed::bool list list => (nat => bool) => bool) l)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3191
             q)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3192
  by (import prob_indep INDEP_SET_LIST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3193
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3194
lemma INDEP_INDEP_SET: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3195
 (%f::(nat => bool) => 'a * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3196
     (All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3197
      (%p::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3198
          (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3199
           (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3200
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3201
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3202
                  ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3203
                  ((measurable::((nat => bool) => bool) => bool) q))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3204
                ((indep_set::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3205
                             => ((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3206
                  ((op o::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3207
                          => ((nat => bool) => 'a) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3208
                    p ((op o::('a * (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3209
                              => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3210
                                 => (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3211
                        (fst::'a * (nat => bool) => 'a) f))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3212
                  ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3213
                          => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3214
                             => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3215
                    q ((op o::('a * (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3216
                              => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3217
                                 => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3218
                        (snd::'a * (nat => bool) => nat => bool) f))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3219
  by (import prob_indep INDEP_INDEP_SET)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3220
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3221
lemma INDEP_UNIT: "ALL x. indep (UNIT x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3222
  by (import prob_indep INDEP_UNIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3223
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3224
lemma INDEP_SDEST: "indep SDEST"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3225
  by (import prob_indep INDEP_SDEST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3226
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3227
lemma BIND_STEP: "ALL f. BIND SDEST (%k. f o SCONS k) = f"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3228
  by (import prob_indep BIND_STEP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3229
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3230
lemma INDEP_BIND_SDEST: "(All::((bool => (nat => bool) => 'a * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3231
 (%f::bool => (nat => bool) => 'a * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3232
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3233
      ((All::(bool => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3234
        (%x::bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3235
            (indep::((nat => bool) => 'a * (nat => bool)) => bool) (f x)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3236
      ((indep::((nat => bool) => 'a * (nat => bool)) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3237
        ((BIND::((nat => bool) => bool * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3238
                => (bool => (nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3239
                   => (nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3240
          (SDEST::(nat => bool) => bool * (nat => bool)) f)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3241
  by (import prob_indep INDEP_BIND_SDEST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3242
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3243
lemma INDEP_BIND: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3244
 (%f::(nat => bool) => 'a * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3245
     (All::(('a => (nat => bool) => 'b * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3246
      (%g::'a => (nat => bool) => 'b * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3247
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3248
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3249
             ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3250
             ((All::('a => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3251
               (%x::'a.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3252
                   (indep::((nat => bool) => 'b * (nat => bool)) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3253
                    (g x))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3254
           ((indep::((nat => bool) => 'b * (nat => bool)) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3255
             ((BIND::((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3256
                     => ('a => (nat => bool) => 'b * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3257
                        => (nat => bool) => 'b * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3258
               f g))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3259
  by (import prob_indep INDEP_BIND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3260
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3261
lemma INDEP_PROB: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3262
 (%f::(nat => bool) => 'a * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3263
     (All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3264
      (%p::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3265
          (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3266
           (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3267
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3268
                ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3269
                  ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3270
                  ((measurable::((nat => bool) => bool) => bool) q))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3271
                ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3272
                  ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3273
                    ((pred_set.INTER::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3274
=> ((nat => bool) => bool) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3275
                      ((op o::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3276
                              => ((nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3277
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3278
                        p ((op o::('a * (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3279
                                  => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3280
                                     => (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3281
                            (fst::'a * (nat => bool) => 'a) f))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3282
                      ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3283
                              => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3284
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3285
                        q ((op o::('a * (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3286
                                  => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3287
                                     => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3288
                            (snd::'a * (nat => bool) => nat => bool) f))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3289
                  ((op *::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3290
                    ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3291
                      ((op o::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3292
                              => ((nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3293
                                 => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3294
                        p ((op o::('a * (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3295
                                  => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3296
                                     => (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3297
                            (fst::'a * (nat => bool) => 'a) f)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3298
                    ((prob::((nat => bool) => bool) => real) q))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3299
  by (import prob_indep INDEP_PROB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3300
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3301
lemma INDEP_MEASURABLE1: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3302
 (%f::(nat => bool) => 'a * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3303
     (All::(('a => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3304
      (%p::'a => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3305
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3306
           ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3307
           ((measurable::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3308
             ((op o::('a => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3309
                     => ((nat => bool) => 'a) => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3310
               p ((op o::('a * (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3311
                         => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3312
                            => (nat => bool) => 'a)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3313
                   (fst::'a * (nat => bool) => 'a) f)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3314
  by (import prob_indep INDEP_MEASURABLE1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3315
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3316
lemma INDEP_MEASURABLE2: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3317
 (%f::(nat => bool) => 'a * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3318
     (All::(((nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3319
      (%q::(nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3320
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3321
           ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3322
             ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3323
             ((measurable::((nat => bool) => bool) => bool) q))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3324
           ((measurable::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3325
             ((op o::((nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3326
                     => ((nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3327
                        => (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3328
               q ((op o::('a * (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3329
                         => ((nat => bool) => 'a * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3330
                            => (nat => bool) => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3331
                   (snd::'a * (nat => bool) => nat => bool) f)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3332
  by (import prob_indep INDEP_MEASURABLE2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3333
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3334
lemma PROB_INDEP_BOUND: "(All::(((nat => bool) => nat * (nat => bool)) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3335
 (%f::(nat => bool) => nat * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3336
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3337
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3338
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3339
           ((indep::((nat => bool) => nat * (nat => bool)) => bool) f)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3340
           ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3341
             ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3342
               (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3343
                   (op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3344
                    ((fst::nat * (nat => bool) => nat) (f s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3345
                    ((Suc::nat => nat) n)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3346
             ((op +::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3347
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3348
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3349
                     (op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3350
                      ((fst::nat * (nat => bool) => nat) (f s)) n))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3351
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3352
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3353
                     (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3354
                      ((fst::nat * (nat => bool) => nat) (f s)) n))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3355
  by (import prob_indep PROB_INDEP_BOUND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3356
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3357
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3358
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3359
;setup_theory prob_uniform
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3360
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3361
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3362
  unif_bound :: "nat => nat" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3363
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3364
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3365
  unif_bound_primdef: "unif_bound ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3366
WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3367
 (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3368
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3369
lemma unif_bound_primitive_def: "unif_bound =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3370
WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3371
 (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3372
  by (import prob_uniform unif_bound_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3373
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3374
lemma unif_bound_def: "unif_bound 0 = 0 & unif_bound (Suc v) = Suc (unif_bound (Suc v div 2))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3375
  by (import prob_uniform unif_bound_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3376
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3377
lemma unif_bound_ind: "(All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3378
 (%P::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3379
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3380
      ((op &::bool => bool => bool) (P (0::nat))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3381
        ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3382
          (%v::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3383
              (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3384
               (P ((op div::nat => nat => nat) ((Suc::nat => nat) v)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3385
                    ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3386
                      ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3387
                        ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3388
                          (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3389
                        (bit.B0::bit)))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3390
               (P ((Suc::nat => nat) v)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3391
      ((All::(nat => bool) => bool) P))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3392
  by (import prob_uniform unif_bound_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3393
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3394
constdefs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3395
  unif_tupled :: "nat * (nat => bool) => nat * (nat => bool)" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3396
  "unif_tupled ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3397
WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3398
 (%unif_tupled (v, v1).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3399
     case v of 0 => (0, v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3400
     | Suc v3 =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3401
         let (m, s') = unif_tupled (Suc v3 div 2, v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3402
         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3403
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3404
lemma unif_tupled_primitive_def: "unif_tupled =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3405
WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3406
 (%unif_tupled (v, v1).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3407
     case v of 0 => (0, v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3408
     | Suc v3 =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3409
         let (m, s') = unif_tupled (Suc v3 div 2, v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3410
         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3411
  by (import prob_uniform unif_tupled_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3412
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3413
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3414
  unif :: "nat => (nat => bool) => nat * (nat => bool)" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3415
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3416
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3417
  unif_primdef: "unif == %x x1. unif_tupled (x, x1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3418
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3419
lemma unif_curried_def: "ALL x x1. unif x x1 = unif_tupled (x, x1)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3420
  by (import prob_uniform unif_curried_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3421
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3422
lemma unif_def: "unif 0 s = (0, s) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3423
unif (Suc v2) s =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3424
(let (m, s') = unif (Suc v2 div 2) s
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3425
 in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3426
  by (import prob_uniform unif_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3427
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3428
lemma unif_ind: "(All::((nat => (nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3429
 (%P::nat => (nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3430
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3431
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3432
        ((All::((nat => bool) => bool) => bool) (P (0::nat)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3433
        ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3434
          (%v2::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3435
              (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3436
               (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3437
                   (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3438
                    (P ((op div::nat => nat => nat) ((Suc::nat => nat) v2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3439
                         ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3440
                           ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3441
                             ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3442
                               (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3443
                             (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3444
                      s)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3445
                    (P ((Suc::nat => nat) v2) s)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3446
      ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3447
        (%v::nat. (All::((nat => bool) => bool) => bool) (P v))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3448
  by (import prob_uniform unif_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3449
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3450
constdefs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3451
  uniform_tupled :: "nat * nat * (nat => bool) => nat * (nat => bool)" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3452
  "(op ==::(nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3453
        => (nat * nat * (nat => bool) => nat * (nat => bool)) => prop)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3454
 (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3455
 ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3456
          => ((nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3457
              => nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3458
             => nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3459
   ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3460
           => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3461
          => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3462
     (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3463
         (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3464
          ((WF::(nat * nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3465
                 => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3466
                => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3467
            R)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3468
          ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3469
            (%t::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3470
                (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3471
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3472
                     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3473
                      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3474
                          (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3475
                           (%res::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3476
                               (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3477
                                (%s'::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3478
                                    (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3479
                                     ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3480
 ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3481
   ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3482
   ((unif::nat => (nat => bool) => nat * (nat => bool)) n s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3483
 ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3484
   ((op <::nat => nat => bool) res ((Suc::nat => nat) n))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3485
                                     (R
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3486
 ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3487
   ((Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3488
     ((Suc::nat => nat) n) s'))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3489
 ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3490
   ((Suc::nat => nat) t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3491
   ((Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3492
     ((Suc::nat => nat) n) s)))))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3493
   (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3494
       (split::(nat => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3495
               => nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3496
        (%(v::nat) v1::nat * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3497
            (nat_case::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3498
                       => (nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3499
                          => nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3500
             ((split::(nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3501
                      => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3502
               (%(v3::nat) v4::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3503
                   (nat_case::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3504
                              => (nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3505
                                 => nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3506
                    (ARB::nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3507
                    (%v5::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3508
                        (Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3509
                         (0::nat) v4)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3510
                    v3)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3511
               v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3512
             (%v2::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3513
                 (split::(nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3514
                         => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3515
                  (%(v7::nat) v8::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3516
                      (nat_case::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3517
                                 => (nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3518
                                    => nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3519
                       (ARB::nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3520
                       (%v9::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3521
                           (Let::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3522
                                 => (nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3523
                                     => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3524
                                    => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3525
                            ((unif::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3526
                                    => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3527
                              v9 v8)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3528
                            ((split::(nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3529
=> (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3530
                                     => nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3531
  => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3532
                              (%(res::nat) s'::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3533
                                  (If::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3534
 => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3535
                                   ((op <::nat => nat => bool) res
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3536
                                     ((Suc::nat => nat) v9))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3537
                                   ((Pair::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3538
     => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3539
                                     res s')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3540
                                   (uniform_tupled
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3541
                                     ((Pair::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3542
       => nat * (nat => bool) => nat * nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3543
 v2 ((Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3544
      ((Suc::nat => nat) v9) s'))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3545
                       v7)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3546
                  v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3547
             v)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3548
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3549
lemma uniform_tupled_primitive_def: "(op =::(nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3550
       => (nat * nat * (nat => bool) => nat * (nat => bool)) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3551
 (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3552
 ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3553
          => ((nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3554
              => nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3555
             => nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3556
   ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3557
           => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3558
          => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3559
     (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3560
         (op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3561
          ((WF::(nat * nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3562
                 => nat * nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3563
                => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3564
            R)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3565
          ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3566
            (%t::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3567
                (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3568
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3569
                     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3570
                      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3571
                          (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3572
                           (%res::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3573
                               (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3574
                                (%s'::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3575
                                    (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3576
                                     ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3577
 ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3578
   ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3579
   ((unif::nat => (nat => bool) => nat * (nat => bool)) n s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3580
 ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3581
   ((op <::nat => nat => bool) res ((Suc::nat => nat) n))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3582
                                     (R
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3583
 ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3584
   ((Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3585
     ((Suc::nat => nat) n) s'))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3586
 ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3587
   ((Suc::nat => nat) t)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3588
   ((Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3589
     ((Suc::nat => nat) n) s)))))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3590
   (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3591
       (split::(nat => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3592
               => nat * nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3593
        (%(v::nat) v1::nat * (nat => bool).
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3594
            (nat_case::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3595
                       => (nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3596
                          => nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3597
             ((split::(nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3598
                      => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3599
               (%(v3::nat) v4::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3600
                   (nat_case::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3601
                              => (nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3602
                                 => nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3603
                    (ARB::nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3604
                    (%v5::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3605
                        (Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3606
                         (0::nat) v4)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3607
                    v3)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3608
               v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3609
             (%v2::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3610
                 (split::(nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3611
                         => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3612
                  (%(v7::nat) v8::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3613
                      (nat_case::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3614
                                 => (nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3615
                                    => nat => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3616
                       (ARB::nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3617
                       (%v9::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3618
                           (Let::nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3619
                                 => (nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3620
                                     => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3621
                                    => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3622
                            ((unif::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3623
                                    => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3624
                              v9 v8)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3625
                            ((split::(nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3626
=> (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3627
                                     => nat * (nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3628
  => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3629
                              (%(res::nat) s'::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3630
                                  (If::bool
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3631
 => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3632
                                   ((op <::nat => nat => bool) res
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3633
                                     ((Suc::nat => nat) v9))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3634
                                   ((Pair::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3635
     => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3636
                                     res s')
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3637
                                   (uniform_tupled
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3638
                                     ((Pair::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3639
       => nat * (nat => bool) => nat * nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3640
 v2 ((Pair::nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3641
      ((Suc::nat => nat) v9) s'))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3642
                       v7)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3643
                  v1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3644
             v)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3645
  by (import prob_uniform uniform_tupled_primitive_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3646
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3647
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3648
  uniform :: "nat => nat => (nat => bool) => nat * (nat => bool)" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3649
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3650
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3651
  uniform_primdef: "uniform == %x x1 x2. uniform_tupled (x, x1, x2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3652
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3653
lemma uniform_curried_def: "ALL x x1 x2. uniform x x1 x2 = uniform_tupled (x, x1, x2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3654
  by (import prob_uniform uniform_curried_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3655
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3656
lemma uniform_ind: "(All::((nat => nat => (nat => bool) => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3657
 (%P::nat => nat => (nat => bool) => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3658
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3659
      ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3660
        ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3661
          (%x::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3662
              (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3663
               (P ((Suc::nat => nat) x) (0::nat))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3664
        ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3665
          ((All::((nat => bool) => bool) => bool) (P (0::nat) (0::nat)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3666
          ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3667
            ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3668
              (%x::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3669
                  (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3670
                   (P (0::nat) ((Suc::nat => nat) x))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3671
            ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3672
              (%x::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3673
                  (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3674
                   (%xa::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3675
                       (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3676
                        (%xb::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3677
                            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3678
                             ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3679
                               (%xc::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3680
                                   (All::((nat => bool) => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3681
                                    (%xd::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3682
  (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3683
   ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3684
     ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3685
       ((Pair::nat => (nat => bool) => nat * (nat => bool)) xc xd)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3686
       ((unif::nat => (nat => bool) => nat * (nat => bool)) xa xb))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3687
     ((Not::bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3688
       ((op <::nat => nat => bool) xc ((Suc::nat => nat) xa))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3689
   (P x ((Suc::nat => nat) xa) xd))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3690
                             (P ((Suc::nat => nat) x) ((Suc::nat => nat) xa)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3691
                               xb))))))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3692
      ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3693
        (%x::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3694
            (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3695
             (%xa::nat. (All::((nat => bool) => bool) => bool) (P x xa)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3696
  by (import prob_uniform uniform_ind)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3697
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3698
lemma uniform_def: "uniform 0 (Suc n) s = (0, s) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3699
uniform (Suc t) (Suc n) s =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3700
(let (xa, x) = unif n s
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3701
 in if xa < Suc n then (xa, x) else uniform t (Suc n) x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3702
  by (import prob_uniform uniform_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3703
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3704
lemma SUC_DIV_TWO_ZERO: "ALL n. (Suc n div 2 = 0) = (n = 0)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3705
  by (import prob_uniform SUC_DIV_TWO_ZERO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3706
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3707
lemma UNIF_BOUND_LOWER: "ALL n. n < 2 ^ unif_bound n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3708
  by (import prob_uniform UNIF_BOUND_LOWER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3709
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3710
lemma UNIF_BOUND_LOWER_SUC: "ALL n. Suc n <= 2 ^ unif_bound n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3711
  by (import prob_uniform UNIF_BOUND_LOWER_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3712
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3713
lemma UNIF_BOUND_UPPER: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3714
 (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3715
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3716
      ((Not::bool => bool) ((op =::nat => nat => bool) n (0::nat)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3717
      ((op <=::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3718
        ((op ^::nat => nat => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3719
          ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3720
            ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3721
              ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3722
              (bit.B0::bit)))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3723
          ((unif_bound::nat => nat) n))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3724
        ((op *::nat => nat => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3725
          ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3726
            ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3727
              ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3728
              (bit.B0::bit)))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3729
          n)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3730
  by (import prob_uniform UNIF_BOUND_UPPER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3731
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3732
lemma UNIF_BOUND_UPPER_SUC: "ALL n. 2 ^ unif_bound n <= Suc (2 * n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3733
  by (import prob_uniform UNIF_BOUND_UPPER_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3734
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3735
lemma UNIF_DEF_MONAD: "unif 0 = UNIT 0 &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3736
(ALL n.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3737
    unif (Suc n) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3738
    BIND (unif (Suc n div 2))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3739
     (%m. BIND SDEST (%b. UNIT (if b then 2 * m + 1 else 2 * m))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3740
  by (import prob_uniform UNIF_DEF_MONAD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3741
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3742
lemma UNIFORM_DEF_MONAD: "(ALL x. uniform 0 (Suc x) = UNIT 0) &
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3743
(ALL x xa.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3744
    uniform (Suc x) (Suc xa) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3745
    BIND (unif xa) (%m. if m < Suc xa then UNIT m else uniform x (Suc xa)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3746
  by (import prob_uniform UNIFORM_DEF_MONAD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3747
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3748
lemma INDEP_UNIF: "ALL n. indep (unif n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3749
  by (import prob_uniform INDEP_UNIF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3750
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3751
lemma INDEP_UNIFORM: "ALL t n. indep (uniform t (Suc n))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3752
  by (import prob_uniform INDEP_UNIFORM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3753
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3754
lemma PROB_UNIF: "ALL n k.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3755
   prob (%s. fst (unif n s) = k) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3756
   (if k < 2 ^ unif_bound n then (1 / 2) ^ unif_bound n else 0)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3757
  by (import prob_uniform PROB_UNIF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3758
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3759
lemma UNIF_RANGE: "ALL n s. fst (unif n s) < 2 ^ unif_bound n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3760
  by (import prob_uniform UNIF_RANGE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3761
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3762
lemma PROB_UNIF_PAIR: "ALL n k k'.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3763
   (prob (%s. fst (unif n s) = k) = prob (%s. fst (unif n s) = k')) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3764
   ((k < 2 ^ unif_bound n) = (k' < 2 ^ unif_bound n))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3765
  by (import prob_uniform PROB_UNIF_PAIR)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3766
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3767
lemma PROB_UNIF_BOUND: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3768
 (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3769
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3770
      (%k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3771
          (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3772
           ((op <=::nat => nat => bool) k
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3773
             ((op ^::nat => nat => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3774
               ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3775
                 ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3776
                   ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3777
                     (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3778
                   (bit.B0::bit)))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3779
               ((unif_bound::nat => nat) n)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3780
           ((op =::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3781
             ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3782
               (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3783
                   (op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3784
                    ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3785
                      ((unif::nat => (nat => bool) => nat * (nat => bool)) n
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3786
                        s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3787
                    k))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3788
             ((op *::real => real => real) ((real::nat => real) k)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3789
               ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3790
                 ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3791
                   ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3792
                     ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3793
                       ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3794
                         (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3795
                       (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3796
                 ((unif_bound::nat => nat) n))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3797
  by (import prob_uniform PROB_UNIF_BOUND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3798
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3799
lemma PROB_UNIF_GOOD: "ALL n. 1 / 2 <= prob (%s. fst (unif n s) < Suc n)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3800
  by (import prob_uniform PROB_UNIF_GOOD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3801
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3802
lemma UNIFORM_RANGE: "ALL t n s. fst (uniform t (Suc n) s) < Suc n"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3803
  by (import prob_uniform UNIFORM_RANGE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3804
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3805
lemma PROB_UNIFORM_LOWER_BOUND: "(All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3806
 (%b::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3807
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3808
      ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3809
        (%k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3810
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3811
             ((op <::nat => nat => bool) k ((Suc::nat => nat) (n::nat)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3812
             ((op <::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3813
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3814
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3815
                     (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3816
                      ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3817
                        ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3818
                                   => nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3819
=> (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3820
                          (t::nat) ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3821
                      k))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3822
               b)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3823
      ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3824
        (%m::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3825
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3826
             ((op <::nat => nat => bool) m ((Suc::nat => nat) n))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3827
             ((op <::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3828
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3829
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3830
                     (op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3831
                      ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3832
                        ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3833
                                   => nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3834
=> (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3835
                          t ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3836
                      ((Suc::nat => nat) m)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3837
               ((op *::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3838
                 ((real::nat => real) ((Suc::nat => nat) m)) b)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3839
  by (import prob_uniform PROB_UNIFORM_LOWER_BOUND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3840
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3841
lemma PROB_UNIFORM_UPPER_BOUND: "(All::(real => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3842
 (%b::real.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3843
     (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3844
      ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3845
        (%k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3846
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3847
             ((op <::nat => nat => bool) k ((Suc::nat => nat) (n::nat)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3848
             ((op <::real => real => bool) b
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3849
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3850
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3851
                     (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3852
                      ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3853
                        ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3854
                                   => nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3855
=> (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3856
                          (t::nat) ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3857
                      k)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3858
      ((All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3859
        (%m::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3860
            (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3861
             ((op <::nat => nat => bool) m ((Suc::nat => nat) n))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3862
             ((op <::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3863
               ((op *::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3864
                 ((real::nat => real) ((Suc::nat => nat) m)) b)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3865
               ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3866
                 (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3867
                     (op <::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3868
                      ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3869
                        ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3870
                                   => nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3871
=> (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3872
                          t ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3873
                      ((Suc::nat => nat) m)))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3874
  by (import prob_uniform PROB_UNIFORM_UPPER_BOUND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3875
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3876
lemma PROB_UNIFORM_PAIR_SUC: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3877
 (%t::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3878
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3879
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3880
          (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3881
           (%k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3882
               (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3883
                (%k'::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3884
                    (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3885
                     ((op &::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3886
                       ((op <::nat => nat => bool) k ((Suc::nat => nat) n))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3887
                       ((op <::nat => nat => bool) k'
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3888
                         ((Suc::nat => nat) n)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3889
                     ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3890
                       ((abs::real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3891
                         ((op -::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3892
                           ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3893
                             (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3894
                                 (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3895
                                  ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3896
                                    ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3897
         => nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3898
t ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3899
                                  k))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3900
                           ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3901
                             (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3902
                                 (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3903
                                  ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3904
                                    ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3905
         => nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3906
t ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3907
                                  k'))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3908
                       ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3909
                         ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3910
                           ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3911
                             ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3912
                               ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3913
                                 (Numeral.Pls::bin) (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3914
                               (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3915
                         t))))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3916
  by (import prob_uniform PROB_UNIFORM_PAIR_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3917
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3918
lemma PROB_UNIFORM_SUC: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3919
 (%t::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3920
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3921
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3922
          (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3923
           (%k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3924
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3925
                ((op <::nat => nat => bool) k ((Suc::nat => nat) n))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3926
                ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3927
                  ((abs::real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3928
                    ((op -::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3929
                      ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3930
                        (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3931
                            (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3932
                             ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3933
                               ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3934
    => nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3935
                                 t ((Suc::nat => nat) n) s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3936
                             k))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3937
                      ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3938
                        ((real::nat => real) ((Suc::nat => nat) n)))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3939
                  ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3940
                    ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3941
                      ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3942
                        ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3943
                          ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3944
                            (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3945
                          (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3946
                    t)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3947
  by (import prob_uniform PROB_UNIFORM_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3948
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3949
lemma PROB_UNIFORM: "(All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3950
 (%t::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3951
     (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3952
      (%n::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3953
          (All::(nat => bool) => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3954
           (%k::nat.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3955
               (op -->::bool => bool => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3956
                ((op <::nat => nat => bool) k n)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3957
                ((op <=::real => real => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3958
                  ((abs::real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3959
                    ((op -::real => real => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3960
                      ((prob::((nat => bool) => bool) => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3961
                        (%s::nat => bool.
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3962
                            (op =::nat => nat => bool)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3963
                             ((fst::nat * (nat => bool) => nat)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3964
                               ((uniform::nat
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3965
    => nat => (nat => bool) => nat * (nat => bool))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3966
                                 t n s))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3967
                             k))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3968
                      ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3969
                        ((real::nat => real) n))))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3970
                  ((op ^::real => nat => real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3971
                    ((op /::real => real => real) (1::real)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3972
                      ((number_of::bin => real)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3973
                        ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3974
                          ((op BIT::bin => bit => bin) (Numeral.Pls::bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3975
                            (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  3976
                          (bit.B0::bit))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3977
                    t)))))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3978
  by (import prob_uniform PROB_UNIFORM)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3979
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3980
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3981
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3982
end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  3983