src/HOL/ex/PresburgerEx.thy
author dixon
Wed, 02 Mar 2005 10:33:10 +0100
changeset 15560 c862d556fb18
parent 15075 a6cd1a454751
child 16417 9bc16273c2d4
permissions -rw-r--r--
lucas - fixed bug with name capture variables bound outside redex could (previously)conflict with scheme variables that occur in the conditions of an equation, and which were renamed to avoid conflict with another instantiation. This has now been fixed.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     1
(*  Title:      HOL/ex/PresburgerEx.thy
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     2
    ID:         $Id$
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     3
    Author:     Amine Chaieb, TU Muenchen
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     4
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     5
Some examples for Presburger Arithmetic
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     6
*)
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     7
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     8
theory PresburgerEx = Main:
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
     9
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    10
theorem "(\<forall>(y::int). 3 dvd y) ==> \<forall>(x::int). b < x --> a \<le> x"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    11
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    12
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    13
theorem "!! (y::int) (z::int) (n::int). 3 dvd z ==> 2 dvd (y::int) ==>
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    14
  (\<exists>(x::int).  2*x =  y) & (\<exists>(k::int). 3*k = z)"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    15
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    16
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    17
theorem "!! (y::int) (z::int) n. Suc(n::nat) < 6 ==>  3 dvd z ==>
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    18
  2 dvd (y::int) ==> (\<exists>(x::int).  2*x =  y) & (\<exists>(k::int). 3*k = z)"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    19
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    20
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    21
theorem "\<forall>(x::nat). \<exists>(y::nat). (0::nat) \<le> 5 --> y = 5 + x "
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    22
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    23
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    24
text{*Very slow: about 55 seconds on a 1.8GHz machine.*}
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    25
theorem "\<forall>(x::nat). \<exists>(y::nat). y = 5 + x | x div 6 + 1= 2"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    26
  by presburger
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    27
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    28
theorem "\<exists>(x::int). 0 < x"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    29
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    30
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    31
theorem "\<forall>(x::int) y. x < y --> 2 * x + 1 < 2 * y"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    32
  by presburger
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    33
 
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    34
theorem "\<forall>(x::int) y. 2 * x + 1 \<noteq> 2 * y"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    35
  by presburger
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    36
 
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    37
theorem "\<exists>(x::int) y. 0 < x  & 0 \<le> y  & 3 * x - 5 * y = 1"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    38
  by presburger
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    39
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    40
theorem "~ (\<exists>(x::int) (y::int) (z::int). 4*x + (-6::int)*y = 1)"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    41
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    42
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    43
theorem "\<forall>(x::int). b < x --> a \<le> x"
14758
af3b71a46a1c A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller.
chaieb
parents: 14353
diff changeset
    44
  apply (presburger (no_quantify))
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    45
  oops
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    46
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    47
theorem "~ (\<exists>(x::int). False)"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    48
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    49
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    50
theorem "\<forall>(x::int). (a::int) < 3 * x --> b < 3 * x"
14758
af3b71a46a1c A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller.
chaieb
parents: 14353
diff changeset
    51
  apply (presburger (no_quantify))
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    52
  oops
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    53
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    54
theorem "\<forall>(x::int). (2 dvd x) --> (\<exists>(y::int). x = 2*y)"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    55
  by presburger 
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    56
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    57
theorem "\<forall>(x::int). (2 dvd x) --> (\<exists>(y::int). x = 2*y)"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    58
  by presburger 
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    59
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    60
theorem "\<forall>(x::int). (2 dvd x) = (\<exists>(y::int). x = 2*y)"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    61
  by presburger 
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    62
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    63
theorem "\<forall>(x::int). ((2 dvd x) = (\<forall>(y::int). x \<noteq> 2*y + 1))"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    64
  by presburger 
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    65
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    66
theorem "~ (\<forall>(x::int). 
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    67
            ((2 dvd x) = (\<forall>(y::int). x \<noteq> 2*y+1) | 
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    68
             (\<exists>(q::int) (u::int) i. 3*i + 2*q - u < 17)
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    69
             --> 0 < x | ((~ 3 dvd x) &(x + 8 = 0))))"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    70
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    71
 
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    72
theorem "~ (\<forall>(i::int). 4 \<le> i --> (\<exists>x y. 0 \<le> x & 0 \<le> y & 3 * x + 5 * y = i))"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    73
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    74
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    75
theorem "\<forall>(i::int). 8 \<le> i --> (\<exists>x y. 0 \<le> x & 0 \<le> y & 3 * x + 5 * y = i)"
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    76
  by presburger
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    77
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    78
theorem "\<exists>(j::int). \<forall>i. j \<le> i --> (\<exists>x y. 0 \<le> x & 0 \<le> y & 3 * x + 5 * y = i)"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    79
  by presburger
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    80
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    81
theorem "~ (\<forall>j (i::int). j \<le> i --> (\<exists>x y. 0 \<le> x & 0 \<le> y & 3 * x + 5 * y = i))"
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    82
  by presburger
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    83
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13880
diff changeset
    84
text{*Very slow: about 80 seconds on a 1.8GHz machine.*}
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    85
theorem "(\<exists>m::nat. n = 2 * m) --> (n + 1) div 2 = n div 2"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    86
  by presburger
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    87
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    88
theorem "(\<exists>m::int. n = 2 * m) --> (n + 1) div 2 = n div 2"
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    89
  by presburger
13880
4f7f30f68926 Added examples for Presburger arithmetic.
berghofe
parents:
diff changeset
    90
15075
a6cd1a454751 minor formatting fixes
webertj
parents: 14981
diff changeset
    91
end