neuper@41931
|
1 |
(* Title: Knowledge/DiophantEq.thy
|
neuper@41931
|
2 |
Author: Mathias Lehnfeld 2011
|
neuper@41931
|
3 |
(c) due to copyright terms
|
neuper@41931
|
4 |
12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
neuper@41931
|
5 |
10 20 30 40 50 60 70 80
|
neuper@41931
|
6 |
*)
|
neuper@41931
|
7 |
|
wneuper@59424
|
8 |
theory DiophantEq imports Base_Tools Equation Test
|
neuper@41931
|
9 |
begin
|
neuper@41921
|
10 |
|
neuper@52148
|
11 |
axiomatization where
|
neuper@41931
|
12 |
int_isolate_add: "(bdv + a = b) = (bdv = b + (-1)*(a::int))"
|
neuper@41921
|
13 |
|
wneuper@59472
|
14 |
text \<open>problemclass for the usecase\<close>
|
wneuper@59472
|
15 |
setup \<open>KEStore_Elems.add_pbts
|
wenzelm@60290
|
16 |
[(Problem.prep_input @{theory} "pbl_equ_dio" [] Problem.id_empty
|
walther@59997
|
17 |
(["diophantine", "equation"],
|
walther@59997
|
18 |
[("#Given" ,["boolTestGiven e_e", "intTestGiven (v_v::int)"]),
|
s1210629013@55339
|
19 |
(* TODO: drop ^^^^^*)
|
s1210629013@55339
|
20 |
("#Where" ,[]),
|
s1210629013@55339
|
21 |
("#Find" ,["boolTestFind s_s"])],
|
walther@59997
|
22 |
Rule_Set.empty, SOME "solve (e_e::bool, v_v::int)", [["LinEq", "solve_lineq_equation"]]))]\<close>
|
neuper@41921
|
23 |
|
wneuper@59472
|
24 |
text \<open>method solving the usecase\<close>
|
wneuper@59545
|
25 |
|
wneuper@59504
|
26 |
partial_function (tailrec) diophant_equation :: "bool => int => bool"
|
wneuper@59504
|
27 |
where
|
walther@59635
|
28 |
"diophant_equation e_e v_v = (
|
walther@59635
|
29 |
Repeat (
|
walther@59637
|
30 |
(Try (Rewrite_Inst [(''bdv'', v_v)] ''int_isolate_add'' )) #>
|
walther@59637
|
31 |
(Try (Calculate ''PLUS'')) #>
|
walther@59635
|
32 |
(Try (Calculate ''TIMES''))) e_e)"
|
wenzelm@60303
|
33 |
|
wenzelm@60303
|
34 |
method met_test_diophant : "Test/solve_diophant" =
|
wenzelm@60303
|
35 |
\<open>{rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule_Set.empty, prls = Rule_Set.empty, calc = [],
|
wenzelm@60303
|
36 |
crls = tval_rls, errpats = [], nrls = Test_simplify}\<close>
|
wenzelm@60303
|
37 |
Program: diophant_equation.simps
|
wenzelm@60303
|
38 |
Given: "boolTestGiven e_e" "intTestGiven (v_v::int)"
|
wenzelm@60303
|
39 |
(* TODO: drop ^^^^^*)
|
wenzelm@60303
|
40 |
Where:
|
wenzelm@60303
|
41 |
Find: "boolTestFind s_s"
|
wenzelm@60303
|
42 |
ML \<open>
|
walther@60278
|
43 |
\<close> ML \<open>
|
wneuper@59472
|
44 |
\<close>
|
neuper@41921
|
45 |
|
walther@60278
|
46 |
end
|