src/HOL/Presburger.thy
changeset 30549 d2d7874648bd
parent 30510 4120fc59dd85
child 30656 ddb1fafa2dcb
equal deleted inserted replaced
30548:2eef5e71edd6 30549:d2d7874648bd
   453  val delN = "del"
   453  val delN = "del"
   454  val elimN = "elim"
   454  val elimN = "elim"
   455  val any_keyword = keyword addN || keyword delN || simple_keyword elimN
   455  val any_keyword = keyword addN || keyword delN || simple_keyword elimN
   456  val thms = Scan.repeat (Scan.unless any_keyword Attrib.multi_thm) >> flat;
   456  val thms = Scan.repeat (Scan.unless any_keyword Attrib.multi_thm) >> flat;
   457 in
   457 in
   458   fn src => Method.syntax 
   458   Scan.optional (simple_keyword elimN >> K false) true --
   459    ((Scan.optional (simple_keyword elimN >> K false) true) -- 
   459   Scan.optional (keyword addN |-- thms) [] --
   460     (Scan.optional (keyword addN |-- thms) []) -- 
   460   Scan.optional (keyword delN |-- thms) [] >>
   461     (Scan.optional (keyword delN |-- thms) [])) src 
   461   (fn ((elim, add_ths), del_ths) => fn ctxt =>
   462   #> (fn (((elim, add_ths), del_ths),ctxt) => 
   462     SIMPLE_METHOD' (Presburger.cooper_tac elim add_ths del_ths ctxt))
   463          SIMPLE_METHOD' (Presburger.cooper_tac elim add_ths del_ths ctxt))
       
   464 end
   463 end
   465 *} "Cooper's algorithm for Presburger arithmetic"
   464 *} "Cooper's algorithm for Presburger arithmetic"
   466 
   465 
   467 lemma [presburger, algebra]: "m mod 2 = (1::nat) \<longleftrightarrow> \<not> 2 dvd m " by presburger
   466 lemma [presburger, algebra]: "m mod 2 = (1::nat) \<longleftrightarrow> \<not> 2 dvd m " by presburger
   468 lemma [presburger, algebra]: "m mod 2 = Suc 0 \<longleftrightarrow> \<not> 2 dvd m " by presburger
   467 lemma [presburger, algebra]: "m mod 2 = Suc 0 \<longleftrightarrow> \<not> 2 dvd m " by presburger