src/Tools/isac/Knowledge/Equation.thy
author Walther Neuper <neuper@ist.tugraz.at>
Tue, 31 Aug 2010 16:38:22 +0200
branchisac-update-Isa09-2
changeset 37967 bd4f7a35e892
parent 37953 369b3012f6f6
child 37972 66fc615a1e89
permissions -rw-r--r--
updating Knowledge/Simplify, changes ahead + in test

# overwritelnthy thy --> overwritelnthy @{theory}
# test: thms-replace-Isa02-Isa09-2.sml @{thm ..}
neuper@37906
     1
(* equations and functions; functions NOT as lambda-terms
neuper@37906
     2
   author: Walther Neuper 2005, 2006
neuper@37906
     3
   (c) due to copyright terms
neuper@37906
     4
*)
neuper@37906
     5
neuper@37950
     6
theory Equation imports Atools begin
neuper@37906
     7
neuper@37906
     8
consts
neuper@37906
     9
neuper@37906
    10
  (*descriptions in the related problems TODOshift here from Descriptions.thy*)
neuper@37950
    11
  substitution      :: "bool => una"
neuper@37906
    12
neuper@37906
    13
  (*the CAS-commands*)
neuper@37950
    14
  solve             :: "[bool * 'a] => bool list" (* solve (x+1=2, x) *)
neuper@37950
    15
  solveTest         :: "[bool * 'a] => bool list" (* for test collection *)
neuper@37906
    16
  
neuper@37906
    17
  (*Script-names*)
neuper@37950
    18
  Function2Equality :: "[bool, bool,       bool] 
neuper@37950
    19
					 => bool"
neuper@37906
    20
                  ("((Script Function2Equality (_ _ =))// (_))" 9)
neuper@37906
    21
neuper@37950
    22
text {* defines equation and univariate-equation
neuper@37950
    23
        created by: rlang 
neuper@37950
    24
              date: 02.09
neuper@37950
    25
        changed by: rlang
neuper@37950
    26
        last change by: rlang
neuper@37950
    27
                  date: 02.11.29
neuper@37950
    28
        (c) by Richard Lang, 2003 *}
neuper@37950
    29
neuper@37950
    30
ML {*
neuper@37950
    31
val univariate_equation_prls = 
neuper@37950
    32
    append_rls "univariate_equation_prls" e_rls 
neuper@37950
    33
	       [Calc ("Tools.matches",eval_matches "")];
neuper@37950
    34
ruleset' := 
neuper@37967
    35
overwritelthy @{theory} (!ruleset',
neuper@37950
    36
		   [("univariate_equation_prls",
neuper@37950
    37
		     prep_rls univariate_equation_prls)]);
neuper@37950
    38
neuper@37950
    39
neuper@37950
    40
store_pbt 
neuper@37953
    41
 (prep_pbt (theory "Equation") "pbl_equ" [] e_pblID
neuper@37950
    42
 (["equation"],
neuper@37950
    43
  [("#Given" ,["equality e_","solveFor v_"]),
neuper@37950
    44
   ("#Where" ,["matches (?a = ?b) e_"]),
neuper@37950
    45
   ("#Find"  ,["solutions v_i_"])
neuper@37950
    46
  ],
neuper@37950
    47
  append_rls "equation_prls" e_rls 
neuper@37950
    48
	     [Calc ("Tools.matches",eval_matches "")],
neuper@37950
    49
  SOME "solve (e_::bool, v_)",
neuper@37950
    50
  []));
neuper@37950
    51
neuper@37950
    52
store_pbt
neuper@37953
    53
 (prep_pbt (theory "Equation") "pbl_equ_univ" [] e_pblID
neuper@37950
    54
 (["univariate","equation"],
neuper@37950
    55
  [("#Given" ,["equality e_","solveFor v_"]),
neuper@37950
    56
   ("#Where" ,["matches (?a = ?b) e_"]),
neuper@37950
    57
   ("#Find"  ,["solutions v_i_"])
neuper@37950
    58
  ],
neuper@37950
    59
  univariate_equation_prls,SOME "solve (e_::bool, v_)",[]));
neuper@37950
    60
neuper@37950
    61
neuper@37950
    62
(*.function for handling the cas-input "solve (x+1=2, x)":
neuper@37950
    63
   make a model which is already in ptree-internal format.*)
neuper@37950
    64
(* val (h,argl) = strip_comb (str2term "solve (x+1=2, x)");
neuper@37950
    65
   val (h,argl) = strip_comb ((term_of o the o (parse thy)) 
neuper@37950
    66
				  "solveTest (x+1=2, x)");
neuper@37950
    67
   *)
neuper@37950
    68
fun argl2dtss [Const ("Pair", _) $ eq $ bdv] =
neuper@37950
    69
    [((term_of o the o (parse thy)) "equality", [eq]),
neuper@37950
    70
     ((term_of o the o (parse thy)) "solveFor", [bdv]),
neuper@37950
    71
     ((term_of o the o (parse thy)) "solutions", 
neuper@37950
    72
      [(term_of o the o (parse thy)) "L"])
neuper@37950
    73
     ]
neuper@37950
    74
  | argl2dtss _ = raise error "Equation.ML: wrong argument for argl2dtss";
neuper@37950
    75
neuper@37950
    76
castab := 
neuper@37950
    77
overwritel (!castab, 
neuper@37950
    78
	    [((term_of o the o (parse thy)) "solveTest", 
neuper@37950
    79
	      (("Test.thy", ["univariate","equation","test"], ["no_met"]), 
neuper@37950
    80
	       argl2dtss)),
neuper@37950
    81
	     ((term_of o the o (parse thy)) "solve",  
neuper@37950
    82
	      (("Isac.thy", ["univariate","equation"], ["no_met"]), 
neuper@37950
    83
	       argl2dtss))
neuper@37950
    84
	     ]);
neuper@37950
    85
neuper@37950
    86
neuper@37950
    87
neuper@37950
    88
store_met
neuper@37953
    89
    (prep_met (theory "Equation") "met_equ" [] e_metID
neuper@37950
    90
	      (["Equation"],
neuper@37950
    91
	       [],
neuper@37950
    92
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37950
    93
		srls = e_rls, 
neuper@37950
    94
		prls=e_rls,
neuper@37950
    95
	     crls = Atools_erls, nrls = e_rls},
neuper@37950
    96
"empty_script"
neuper@37950
    97
));
neuper@37950
    98
*}
neuper@37950
    99
neuper@37906
   100
end