src/Tools/isac/Knowledge/DiophantEq.thy
author wenzelm
Tue, 15 Jun 2021 22:24:20 +0200
changeset 60303 815b0dc8b589
parent 60291 52921aa0e14a
child 60306 51ec2e101e9f
permissions -rw-r--r--
Isar command 'method' as combination of KEStore_Elems.add_mets + MethodC.prep_import, without change of semantics;
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