src/HOL/Nitpick_Examples/Integer_Nits.thy
author blanchet
Tue, 09 Feb 2010 16:07:51 +0100
changeset 35075 6fd1052fe463
parent 35073 cc19e2aef17e
child 35695 80b2c22f8f00
permissions -rw-r--r--
optimization to quantifiers in Nitpick's handling of simp rules + renamed some SAT solvers
blanchet@34123
     1
(*  Title:      HOL/Nitpick_Examples/Integer_Nits.thy
blanchet@34123
     2
    Author:     Jasmin Blanchette, TU Muenchen
blanchet@35073
     3
    Copyright   2009, 2010
blanchet@34123
     4
blanchet@34123
     5
Examples featuring Nitpick applied to natural numbers and integers.
blanchet@34123
     6
*)
blanchet@34123
     7
blanchet@34123
     8
header {* Examples Featuring Nitpick Applied to Natural Numbers and Integers *} 
blanchet@34123
     9
blanchet@34123
    10
theory Integer_Nits
blanchet@34123
    11
imports Nitpick
blanchet@34123
    12
begin
blanchet@34123
    13
blanchet@35075
    14
nitpick_params [sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s,
blanchet@34123
    15
                card = 1\<midarrow>6, bits = 1,2,3,4,6,8]
blanchet@34123
    16
blanchet@34123
    17
lemma "Suc x = x + 1"
blanchet@34123
    18
nitpick [unary_ints, expect = none]
blanchet@34123
    19
nitpick [binary_ints, expect = none]
blanchet@34123
    20
sorry
blanchet@34123
    21
blanchet@34123
    22
lemma "x < Suc x"
blanchet@34123
    23
nitpick [unary_ints, expect = none]
blanchet@34123
    24
nitpick [binary_ints, expect = none]
blanchet@34123
    25
sorry
blanchet@34123
    26
blanchet@34123
    27
lemma "x + y \<ge> (x::nat)"
blanchet@34123
    28
nitpick [unary_ints, expect = none]
blanchet@34123
    29
nitpick [binary_ints, expect = none]
blanchet@34123
    30
sorry
blanchet@34123
    31
blanchet@34123
    32
lemma "y \<noteq> 0 \<Longrightarrow> x + y > (x::nat)"
blanchet@34123
    33
nitpick [unary_ints, expect = none]
blanchet@34123
    34
nitpick [binary_ints, expect = none]
blanchet@34123
    35
sorry
blanchet@34123
    36
blanchet@34123
    37
lemma "x + y = y + (x::nat)"
blanchet@34123
    38
nitpick [unary_ints, expect = none]
blanchet@34123
    39
nitpick [binary_ints, expect = none]
blanchet@34123
    40
sorry
blanchet@34123
    41
blanchet@34123
    42
lemma "x > y \<Longrightarrow> x - y \<noteq> (0::nat)"
blanchet@34123
    43
nitpick [unary_ints, expect = none]
blanchet@34123
    44
nitpick [binary_ints, expect = none]
blanchet@34123
    45
sorry
blanchet@34123
    46
blanchet@34123
    47
lemma "x \<le> y \<Longrightarrow> x - y = (0::nat)"
blanchet@34123
    48
nitpick [unary_ints, expect = none]
blanchet@34123
    49
nitpick [binary_ints, expect = none]
blanchet@34123
    50
sorry
blanchet@34123
    51
blanchet@34123
    52
lemma "x - (0::nat) = x"
blanchet@34123
    53
nitpick [unary_ints, expect = none]
blanchet@34123
    54
nitpick [binary_ints, expect = none]
blanchet@34123
    55
sorry
blanchet@34123
    56
blanchet@34123
    57
lemma "\<lbrakk>x \<noteq> 0; y \<noteq> 0\<rbrakk> \<Longrightarrow> x * y \<noteq> (0::nat)"
blanchet@34123
    58
nitpick [unary_ints, expect = none]
blanchet@34123
    59
nitpick [binary_ints, expect = none]
blanchet@34123
    60
sorry
blanchet@34123
    61
blanchet@34123
    62
lemma "0 * y = (0::nat)"
blanchet@34123
    63
nitpick [unary_ints, expect = none]
blanchet@34123
    64
nitpick [binary_ints, expect = none]
blanchet@34123
    65
sorry
blanchet@34123
    66
blanchet@34123
    67
lemma "y * 0 = (0::nat)"
blanchet@34123
    68
nitpick [unary_ints, expect = none]
blanchet@34123
    69
nitpick [binary_ints, expect = none]
blanchet@34123
    70
sorry
blanchet@34123
    71
blanchet@34123
    72
lemma "\<lbrakk>x \<noteq> 0; y \<noteq> 0\<rbrakk> \<Longrightarrow> x * y \<ge> (x::nat)"
blanchet@34123
    73
nitpick [unary_ints, expect = none]
blanchet@34123
    74
nitpick [binary_ints, expect = none]
blanchet@34123
    75
sorry
blanchet@34123
    76
blanchet@34123
    77
lemma "\<lbrakk>x \<noteq> 0; y \<noteq> 0\<rbrakk> \<Longrightarrow> x * y \<ge> (y::nat)"
blanchet@34123
    78
nitpick [unary_ints, expect = none]
blanchet@34123
    79
nitpick [binary_ints, expect = none]
blanchet@34123
    80
sorry
blanchet@34123
    81
blanchet@34123
    82
lemma "x * y div y = (x::nat)"
blanchet@34123
    83
nitpick [unary_ints, expect = genuine]
blanchet@34123
    84
nitpick [binary_ints, expect = genuine]
blanchet@34123
    85
oops
blanchet@34123
    86
blanchet@34123
    87
lemma "y \<noteq> 0 \<Longrightarrow> x * y div y = (x::nat)"
blanchet@34123
    88
nitpick [unary_ints, expect = none]
blanchet@34123
    89
nitpick [binary_ints, expect = none]
blanchet@34123
    90
sorry
blanchet@34123
    91
blanchet@34123
    92
lemma "5 * 55 < (260::nat)"
blanchet@34123
    93
nitpick [unary_ints, expect = none]
blanchet@34123
    94
nitpick [binary_ints, expect = none]
blanchet@34123
    95
nitpick [binary_ints, bits = 9, expect = genuine]
blanchet@34123
    96
oops
blanchet@34123
    97
blanchet@34123
    98
lemma "nat (of_nat n) = n"
blanchet@34123
    99
nitpick [unary_ints, expect = none]
blanchet@34123
   100
nitpick [binary_ints, expect = none]
blanchet@34123
   101
sorry
blanchet@34123
   102
blanchet@34123
   103
lemma "x + y \<ge> (x::int)"
blanchet@34123
   104
nitpick [unary_ints, expect = genuine]
blanchet@34123
   105
nitpick [binary_ints, expect = genuine]
blanchet@34123
   106
oops
blanchet@34123
   107
blanchet@34123
   108
lemma "\<lbrakk>x \<ge> 0; y \<ge> 0\<rbrakk> \<Longrightarrow> x + y \<ge> (0::int)"
blanchet@34123
   109
nitpick [unary_ints, expect = none]
blanchet@34123
   110
nitpick [binary_ints, expect = none]
blanchet@34123
   111
sorry
blanchet@34123
   112
blanchet@34123
   113
lemma "y \<ge> 0 \<Longrightarrow> x + y \<ge> (x::int)"
blanchet@34123
   114
nitpick [unary_ints, expect = none]
blanchet@34123
   115
nitpick [binary_ints, expect = none]
blanchet@34123
   116
sorry
blanchet@34123
   117
blanchet@34123
   118
lemma "x \<ge> 0 \<Longrightarrow> x + y \<ge> (y::int)"
blanchet@34123
   119
nitpick [unary_ints, expect = none]
blanchet@34123
   120
nitpick [binary_ints, expect = none]
blanchet@34123
   121
sorry
blanchet@34123
   122
blanchet@34123
   123
lemma "x \<ge> 0 \<Longrightarrow> x + y \<ge> (x::int)"
blanchet@34123
   124
nitpick [unary_ints, expect = genuine]
blanchet@34123
   125
nitpick [binary_ints, expect = genuine]
blanchet@34123
   126
oops
blanchet@34123
   127
blanchet@34123
   128
lemma "\<lbrakk>x \<le> 0; y \<le> 0\<rbrakk> \<Longrightarrow> x + y \<le> (0::int)"
blanchet@34123
   129
nitpick [unary_ints, expect = none]
blanchet@34123
   130
nitpick [binary_ints, expect = none]
blanchet@34123
   131
sorry
blanchet@34123
   132
blanchet@34123
   133
lemma "y \<noteq> 0 \<Longrightarrow> x + y > (x::int)"
blanchet@34123
   134
nitpick [unary_ints, expect = genuine]
blanchet@34123
   135
nitpick [binary_ints, expect = genuine]
blanchet@34123
   136
oops
blanchet@34123
   137
blanchet@34123
   138
lemma "x + y = y + (x::int)"
blanchet@34123
   139
nitpick [unary_ints, expect = none]
blanchet@34123
   140
nitpick [binary_ints, expect = none]
blanchet@34123
   141
sorry
blanchet@34123
   142
blanchet@34123
   143
lemma "x > y \<Longrightarrow> x - y \<noteq> (0::int)"
blanchet@34123
   144
nitpick [unary_ints, expect = none]
blanchet@34123
   145
nitpick [binary_ints, expect = none]
blanchet@34123
   146
sorry
blanchet@34123
   147
blanchet@34123
   148
lemma "x \<le> y \<Longrightarrow> x - y = (0::int)"
blanchet@34123
   149
nitpick [unary_ints, expect = genuine]
blanchet@34123
   150
nitpick [binary_ints, expect = genuine]
blanchet@34123
   151
oops
blanchet@34123
   152
blanchet@34123
   153
lemma "x - (0::int) = x"
blanchet@34123
   154
nitpick [unary_ints, expect = none]
blanchet@34123
   155
nitpick [binary_ints, expect = none]
blanchet@34123
   156
sorry
blanchet@34123
   157
blanchet@34123
   158
lemma "\<lbrakk>x \<noteq> 0; y \<noteq> 0\<rbrakk> \<Longrightarrow> x * y \<noteq> (0::int)"
blanchet@34123
   159
nitpick [unary_ints, expect = none]
blanchet@34123
   160
nitpick [binary_ints, expect = none]
blanchet@34123
   161
sorry
blanchet@34123
   162
blanchet@34123
   163
lemma "0 * y = (0::int)"
blanchet@34123
   164
nitpick [unary_ints, expect = none]
blanchet@34123
   165
nitpick [binary_ints, expect = none]
blanchet@34123
   166
sorry
blanchet@34123
   167
blanchet@34123
   168
lemma "y * 0 = (0::int)"
blanchet@34123
   169
nitpick [unary_ints, expect = none]
blanchet@34123
   170
nitpick [binary_ints, expect = none]
blanchet@34123
   171
sorry
blanchet@34123
   172
blanchet@34123
   173
lemma "\<lbrakk>x \<noteq> 0; y \<noteq> 0\<rbrakk> \<Longrightarrow> x * y \<ge> (x::int)"
blanchet@34123
   174
nitpick [unary_ints, expect = genuine]
blanchet@34123
   175
nitpick [binary_ints, expect = genuine]
blanchet@34123
   176
oops
blanchet@34123
   177
blanchet@34123
   178
lemma "\<lbrakk>x \<noteq> 0; y \<noteq> 0\<rbrakk> \<Longrightarrow> x * y \<ge> (y::int)"
blanchet@34123
   179
nitpick [unary_ints, expect = genuine]
blanchet@34123
   180
nitpick [binary_ints, expect = genuine]
blanchet@34123
   181
oops
blanchet@34123
   182
blanchet@34123
   183
lemma "x * y div y = (x::int)"
blanchet@34123
   184
nitpick [unary_ints, expect = genuine]
blanchet@34123
   185
nitpick [binary_ints, expect = genuine]
blanchet@34123
   186
oops
blanchet@34123
   187
blanchet@34123
   188
lemma "y \<noteq> 0 \<Longrightarrow> x * y div y = (x::int)"
blanchet@34123
   189
nitpick [unary_ints, expect = none]
blanchet@34123
   190
nitpick [binary_ints, expect = none, card = 1\<midarrow>5, bits = 1\<midarrow>5]
blanchet@34123
   191
sorry
blanchet@34123
   192
blanchet@34123
   193
lemma "(x * y < 0) \<longleftrightarrow> (x > 0 \<and> y < 0) \<or> (x < 0 \<and> y > (0::int))"
blanchet@34123
   194
nitpick [unary_ints, expect = none]
blanchet@34123
   195
nitpick [binary_ints, expect = none]
blanchet@34123
   196
sorry
blanchet@34123
   197
blanchet@34123
   198
lemma "-5 * 55 > (-260::int)"
blanchet@34123
   199
nitpick [unary_ints, expect = none]
blanchet@34123
   200
nitpick [binary_ints, expect = none]
blanchet@34123
   201
nitpick [binary_ints, bits = 9, expect = genuine]
blanchet@34123
   202
oops
blanchet@34123
   203
blanchet@34123
   204
lemma "nat (of_nat n) = n"
blanchet@34123
   205
nitpick [unary_ints, expect = none]
blanchet@34123
   206
nitpick [binary_ints, expect = none]
blanchet@34123
   207
sorry
blanchet@34123
   208
blanchet@34123
   209
end