equal
deleted
inserted
replaced
293 end handle Subscript => no_tac st | CooperDec.COOPER => no_tac st); |
293 end handle Subscript => no_tac st | CooperDec.COOPER => no_tac st); |
294 |
294 |
295 fun presburger_args meth = |
295 fun presburger_args meth = |
296 let val parse_flag = |
296 let val parse_flag = |
297 Args.$$$ "no_quantify" >> K (apfst (K false)) |
297 Args.$$$ "no_quantify" >> K (apfst (K false)) |
298 || Args.$$$ "abs" >> K (apsnd (K true)); |
298 || Args.$$$ "no_abs" >> K (apsnd (K false)); |
299 in |
299 in |
300 Method.simple_args |
300 Method.simple_args |
301 (Scan.optional (Args.$$$ "(" |-- Scan.repeat1 parse_flag --| Args.$$$ ")") [] >> |
301 (Scan.optional (Args.$$$ "(" |-- Scan.repeat1 parse_flag --| Args.$$$ ")") [] >> |
302 curry (Library.foldl op |>) (true, false)) |
302 curry (Library.foldl op |>) (true, true)) |
303 (fn (q,a) => fn _ => meth q a 1) |
303 (fn (q,a) => fn _ => meth q a 1) |
304 end; |
304 end; |
305 |
305 |
306 fun presburger_method q a i = Method.METHOD (fn facts => |
306 fun presburger_method q a i = Method.METHOD (fn facts => |
307 Method.insert_tac facts 1 THEN presburger_tac q a i) |
307 Method.insert_tac facts 1 THEN presburger_tac q a i) |
310 [Method.add_method ("presburger", |
310 [Method.add_method ("presburger", |
311 presburger_args presburger_method, |
311 presburger_args presburger_method, |
312 "decision procedure for Presburger arithmetic"), |
312 "decision procedure for Presburger arithmetic"), |
313 ArithTheoryData.map (fn {splits, inj_consts, discrete, presburger} => |
313 ArithTheoryData.map (fn {splits, inj_consts, discrete, presburger} => |
314 {splits = splits, inj_consts = inj_consts, discrete = discrete, |
314 {splits = splits, inj_consts = inj_consts, discrete = discrete, |
315 presburger = SOME (presburger_tac true false)})]; |
315 presburger = SOME (presburger_tac true true)})]; |
316 |
316 |
317 end; |
317 end; |
318 |
318 |
319 val presburger_tac = Presburger.presburger_tac true false; |
319 val presburger_tac = Presburger.presburger_tac true true; |