src/HOL/Integ/Presburger.thy
changeset 14139 ca3dd7ed5ac5
parent 13876 68f4ed8311ac
child 14271 8ed6989228bb
equal deleted inserted replaced
14138:ca5029d391d1 14139:ca3dd7ed5ac5
   205 (ALL x. Q(x::int) \<and> ~(EX (j::int) : {1..d}. EX (b::int) : B. Q(b+j)) -->P(x) --> P(x - d)) 
   205 (ALL x. Q(x::int) \<and> ~(EX (j::int) : {1..d}. EX (b::int) : B. Q(b+j)) -->P(x) --> P(x - d)) 
   206 ==> ( P = Q )
   206 ==> ( P = Q )
   207 ==> (ALL x. ~(EX (j::int) : {1..d}. EX (b::int) : B. P(b+j)) -->P(x) --> P(x - d))"
   207 ==> (ALL x. ~(EX (j::int) : {1..d}. EX (b::int) : B. P(b+j)) -->P(x) --> P(x - d))"
   208 by blast
   208 by blast
   209 (*=============================================================================*)
   209 (*=============================================================================*)
   210 (*The Theorem for the second proof step- about bset. it is trivial too. *)
   210 
   211 lemma bst_thm: " (EX (j::int) : {1..d}. EX (b::int) : B. P (b+j) )--> (EX x::int. P (x)) "
       
   212 by blast
       
   213 
       
   214 (*The Theorem for the second proof step- about aset. it is trivial too. *)
       
   215 lemma ast_thm: " (EX (j::int) : {1..d}. EX (a::int) : A. P (a - j) )--> (EX x::int. P (x)) "
       
   216 by blast
       
   217 
       
   218 
       
   219 (*=============================================================================*)
       
   220 (*This is the first direction of cooper's theorem*)
   211 (*This is the first direction of cooper's theorem*)
   221 lemma cooper_thm: "(R --> (EX x::int. P x))  ==> (Q -->(EX x::int.  P x )) ==> ((R|Q) --> (EX x::int. P x )) "
   212 lemma cooper_thm: "(R --> (EX x::int. P x))  ==> (Q -->(EX x::int.  P x )) ==> ((R|Q) --> (EX x::int. P x )) "
   222 by blast
   213 by blast
   223 
   214 
   224 (*=============================================================================*)
   215 (*=============================================================================*)
   736     ultimately show "P x \<longrightarrow> P(x + (i + 1) * d)" by blast
   727     ultimately show "P x \<longrightarrow> P(x + (i + 1) * d)" by blast
   737   qed
   728   qed
   738 qed
   729 qed
   739 
   730 
   740 lemma cpmi_eq: "0 < D \<Longrightarrow> (EX z::int. ALL x. x < z --> (P x = P1 x))
   731 lemma cpmi_eq: "0 < D \<Longrightarrow> (EX z::int. ALL x. x < z --> (P x = P1 x))
   741 ==> (EX (j::int) : {1..D}. EX (b::int) : B. P (b+j)) --> (EX (x::int). P x) 
       
   742 ==> ALL x.~(EX (j::int) : {1..D}. EX (b::int) : B. P(b+j)) --> P (x) --> P (x - D) 
   732 ==> ALL x.~(EX (j::int) : {1..D}. EX (b::int) : B. P(b+j)) --> P (x) --> P (x - D) 
   743 ==> (ALL (x::int). ALL (k::int). ((P1 x)= (P1 (x-k*D))))
   733 ==> (ALL (x::int). ALL (k::int). ((P1 x)= (P1 (x-k*D))))
   744 ==> (EX (x::int). P(x)) = ((EX (j::int) : {1..D} . (P1(j))) | (EX (j::int) : {1..D}. EX (b::int) : B. P (b+j)))"
   734 ==> (EX (x::int). P(x)) = ((EX (j::int) : {1..D} . (P1(j))) | (EX (j::int) : {1..D}. EX (b::int) : B. P (b+j)))"
   745 apply(rule iffI)
   735 apply(rule iffI)
   746 prefer 2
   736 prefer 2
   760 apply(blast dest:decr_mult_lemma)
   750 apply(blast dest:decr_mult_lemma)
   761 done
   751 done
   762 
   752 
   763 (* Cooper Thm `, plus infinity version*)
   753 (* Cooper Thm `, plus infinity version*)
   764 lemma cppi_eq: "0 < D \<Longrightarrow> (EX z::int. ALL x. z < x --> (P x = P1 x))
   754 lemma cppi_eq: "0 < D \<Longrightarrow> (EX z::int. ALL x. z < x --> (P x = P1 x))
   765 ==> (EX (j::int) : {1..D}. EX (a::int) : A. P (a - j)) --> (EX (x::int). P x) 
       
   766 ==> ALL x.~(EX (j::int) : {1..D}. EX (a::int) : A. P(a - j)) --> P (x) --> P (x + D) 
   755 ==> ALL x.~(EX (j::int) : {1..D}. EX (a::int) : A. P(a - j)) --> P (x) --> P (x + D) 
   767 ==> (ALL (x::int). ALL (k::int). ((P1 x)= (P1 (x+k*D))))
   756 ==> (ALL (x::int). ALL (k::int). ((P1 x)= (P1 (x+k*D))))
   768 ==> (EX (x::int). P(x)) = ((EX (j::int) : {1..D} . (P1(j))) | (EX (j::int) : {1..D}. EX (a::int) : A. P (a - j)))"
   757 ==> (EX (x::int). P(x)) = ((EX (j::int) : {1..D} . (P1(j))) | (EX (j::int) : {1..D}. EX (a::int) : A. P (a - j)))"
   769   apply(rule iffI)
   758   apply(rule iffI)
   770   prefer 2
   759   prefer 2