src/Tools/isac/Knowledge/LinEq.thy
changeset 59406 509d70b507e5
parent 59389 627d25067f2f
child 59411 3e241a6938ce
     1.1 --- a/src/Tools/isac/Knowledge/LinEq.thy	Thu Mar 15 10:17:44 2018 +0100
     1.2 +++ b/src/Tools/isac/Knowledge/LinEq.thy	Thu Mar 15 12:42:04 2018 +0100
     1.3 @@ -32,41 +32,41 @@
     1.4  val thy = @{theory};
     1.5  
     1.6  val LinEq_prls = (*3.10.02:just the following order due to subterm evaluation*)
     1.7 -  append_rls "LinEq_prls" e_rls 
     1.8 -	     [Calc ("HOL.eq",eval_equal "#equal_"),
     1.9 -	      Calc ("Tools.matches",eval_matches ""),
    1.10 -	      Calc ("Tools.lhs"    ,eval_lhs ""),
    1.11 -	      Calc ("Tools.rhs"    ,eval_rhs ""),
    1.12 -	      Calc ("Poly.has'_degree'_in",eval_has_degree_in ""),
    1.13 - 	      Calc ("Poly.is'_polyrat'_in",eval_is_polyrat_in ""),
    1.14 -	      Calc ("Atools.occurs'_in",eval_occurs_in ""),    
    1.15 -	      Calc ("Atools.ident",eval_ident "#ident_"),
    1.16 -	      Thm ("not_true",TermC.num_str @{thm not_true}),
    1.17 -	      Thm ("not_false",TermC.num_str @{thm not_false}),
    1.18 -	      Thm ("and_true",TermC.num_str @{thm and_true}),
    1.19 -	      Thm ("and_false",TermC.num_str @{thm and_false}),
    1.20 -	      Thm ("or_true",TermC.num_str @{thm or_true}),
    1.21 -	      Thm ("or_false",TermC.num_str @{thm or_false})
    1.22 +  Celem.append_rls "LinEq_prls" Celem.e_rls 
    1.23 +	     [Celem.Calc ("HOL.eq",eval_equal "#equal_"),
    1.24 +	      Celem.Calc ("Tools.matches",eval_matches ""),
    1.25 +	      Celem.Calc ("Tools.lhs"    ,eval_lhs ""),
    1.26 +	      Celem.Calc ("Tools.rhs"    ,eval_rhs ""),
    1.27 +	      Celem.Calc ("Poly.has'_degree'_in",eval_has_degree_in ""),
    1.28 + 	      Celem.Calc ("Poly.is'_polyrat'_in",eval_is_polyrat_in ""),
    1.29 +	      Celem.Calc ("Atools.occurs'_in",eval_occurs_in ""),    
    1.30 +	      Celem.Calc ("Atools.ident",eval_ident "#ident_"),
    1.31 +	      Celem.Thm ("not_true",TermC.num_str @{thm not_true}),
    1.32 +	      Celem.Thm ("not_false",TermC.num_str @{thm not_false}),
    1.33 +	      Celem.Thm ("and_true",TermC.num_str @{thm and_true}),
    1.34 +	      Celem.Thm ("and_false",TermC.num_str @{thm and_false}),
    1.35 +	      Celem.Thm ("or_true",TermC.num_str @{thm or_true}),
    1.36 +	      Celem.Thm ("or_false",TermC.num_str @{thm or_false})
    1.37                ];
    1.38  (* ----- erls ----- *)
    1.39  val LinEq_crls = 
    1.40 -   append_rls "LinEq_crls" poly_crls
    1.41 -   [Thm  ("real_assoc_1",TermC.num_str @{thm real_assoc_1})
    1.42 +   Celem.append_rls "LinEq_crls" poly_crls
    1.43 +   [Celem.Thm  ("real_assoc_1",TermC.num_str @{thm real_assoc_1})
    1.44      (*		
    1.45       Don't use
    1.46 -     Calc ("Rings.divide_class.divide", eval_cancel "#divide_e"),
    1.47 -     Calc ("Atools.pow" ,eval_binop "#power_"),
    1.48 +     Celem.Calc ("Rings.divide_class.divide", eval_cancel "#divide_e"),
    1.49 +     Celem.Calc ("Atools.pow" ,eval_binop "#power_"),
    1.50       *)
    1.51      ];
    1.52  
    1.53  (* ----- crls ----- *)
    1.54  val LinEq_erls = 
    1.55 -   append_rls "LinEq_erls" Poly_erls
    1.56 -   [Thm  ("real_assoc_1",TermC.num_str @{thm real_assoc_1})
    1.57 +   Celem.append_rls "LinEq_erls" Poly_erls
    1.58 +   [Celem.Thm  ("real_assoc_1",TermC.num_str @{thm real_assoc_1})
    1.59      (*		
    1.60       Don't use
    1.61 -     Calc ("Rings.divide_class.divide", eval_cancel "#divide_e"),
    1.62 -     Calc ("Atools.pow" ,eval_binop "#power_"),
    1.63 +     Celem.Calc ("Rings.divide_class.divide", eval_cancel "#divide_e"),
    1.64 +     Celem.Calc ("Atools.pow" ,eval_binop "#power_"),
    1.65       *)
    1.66      ];
    1.67  *}
    1.68 @@ -75,23 +75,23 @@
    1.69  ML {*
    1.70      
    1.71  val LinPoly_simplify = prep_rls'(
    1.72 -  Rls {id = "LinPoly_simplify", preconds = [], 
    1.73 +  Celem.Rls {id = "LinPoly_simplify", preconds = [], 
    1.74         rew_ord = ("termlessI",termlessI), 
    1.75         erls = LinEq_erls, 
    1.76 -       srls = Erls, 
    1.77 +       srls = Celem.Erls, 
    1.78         calc = [], errpatts = [],
    1.79         rules = [
    1.80 -		Thm  ("real_assoc_1",TermC.num_str @{thm real_assoc_1}),
    1.81 -		Calc ("Groups.plus_class.plus",eval_binop "#add_"),
    1.82 -		Calc ("Groups.minus_class.minus",eval_binop "#sub_"),
    1.83 -		Calc ("Groups.times_class.times",eval_binop "#mult_"),
    1.84 +		Celem.Thm  ("real_assoc_1",TermC.num_str @{thm real_assoc_1}),
    1.85 +		Celem.Calc ("Groups.plus_class.plus",eval_binop "#add_"),
    1.86 +		Celem.Calc ("Groups.minus_class.minus",eval_binop "#sub_"),
    1.87 +		Celem.Calc ("Groups.times_class.times",eval_binop "#mult_"),
    1.88  		(*  Dont use  
    1.89 -		 Calc ("Rings.divide_class.divide", eval_cancel "#divide_e"),		
    1.90 -		 Calc ("NthRoot.sqrt",eval_sqrt "#sqrt_"),
    1.91 +		 Celem.Calc ("Rings.divide_class.divide", eval_cancel "#divide_e"),		
    1.92 +		 Celem.Calc ("NthRoot.sqrt",eval_sqrt "#sqrt_"),
    1.93  		 *)
    1.94 -		Calc ("Atools.pow" ,eval_binop "#power_")
    1.95 +		Celem.Calc ("Atools.pow" ,eval_binop "#power_")
    1.96  		],
    1.97 -       scr = EmptyScr}:rls);
    1.98 +       scr = Celem.EmptyScr});
    1.99  *}
   1.100  setup {* KEStore_Elems.add_rlss 
   1.101    [("LinPoly_simplify", (Context.theory_name @{theory}, LinPoly_simplify))] *}
   1.102 @@ -99,20 +99,20 @@
   1.103  
   1.104  (*isolate the bound variable in an linear equation; 'bdv' is a meta-constant*)
   1.105  val LinEq_simplify = prep_rls'(
   1.106 -Rls {id = "LinEq_simplify", preconds = [],
   1.107 -     rew_ord = ("e_rew_ord",e_rew_ord),
   1.108 +Celem.Rls {id = "LinEq_simplify", preconds = [],
   1.109 +     rew_ord = ("xxxe_rew_ordxxx", Celem.e_rew_ord),
   1.110       erls = LinEq_erls,
   1.111 -     srls = Erls,
   1.112 +     srls = Celem.Erls,
   1.113       calc = [], errpatts = [],
   1.114       rules = [
   1.115 -	      Thm("lin_isolate_add1",TermC.num_str @{thm lin_isolate_add1}), 
   1.116 +	      Celem.Thm("lin_isolate_add1",TermC.num_str @{thm lin_isolate_add1}), 
   1.117  	      (* a+bx=0 -> bx=-a *)
   1.118 -	      Thm("lin_isolate_add2",TermC.num_str @{thm lin_isolate_add2}), 
   1.119 +	      Celem.Thm("lin_isolate_add2",TermC.num_str @{thm lin_isolate_add2}), 
   1.120  	      (* a+ x=0 ->  x=-a *)
   1.121 -	      Thm("lin_isolate_div",TermC.num_str @{thm lin_isolate_div})    
   1.122 +	      Celem.Thm("lin_isolate_div",TermC.num_str @{thm lin_isolate_div})    
   1.123  	      (*   bx=c -> x=c/b *)  
   1.124  	      ],
   1.125 -     scr = EmptyScr}:rls);
   1.126 +     scr = Celem.EmptyScr});
   1.127  *}
   1.128  setup {* KEStore_Elems.add_rlss 
   1.129    [("LinEq_simplify", (Context.theory_name @{theory}, LinEq_simplify))] *}
   1.130 @@ -120,7 +120,7 @@
   1.131  (*----------------------------- problem types --------------------------------*)
   1.132  (* ---------linear----------- *)
   1.133  setup {* KEStore_Elems.add_pbts
   1.134 -  [(Specify.prep_pbt thy "pbl_equ_univ_lin" [] e_pblID
   1.135 +  [(Specify.prep_pbt thy "pbl_equ_univ_lin" [] Celem.e_pblID
   1.136        (["LINEAR", "univariate", "equation"],
   1.137          [("#Given" ,["equality e_e", "solveFor v_v"]),
   1.138            ("#Where" ,["HOL.False", (*WN0509 just detected: this pbl can never be used?!?*)
   1.139 @@ -133,18 +133,18 @@
   1.140  
   1.141  (*-------------- methods------------------------------------------------------*)
   1.142  setup {* KEStore_Elems.add_mets
   1.143 -  [Specify.prep_met thy "met_eqlin" [] e_metID
   1.144 +  [Specify.prep_met thy "met_eqlin" [] Celem.e_metID
   1.145        (["LinEq"], [],
   1.146 -        {rew_ord' = "tless_true",rls' = Atools_erls,calc = [], srls = e_rls, prls = e_rls,
   1.147 +        {rew_ord' = "tless_true",rls' = Atools_erls,calc = [], srls = Celem.e_rls, prls = Celem.e_rls,
   1.148            crls = LinEq_crls, errpats = [], nrls = norm_Poly},
   1.149          "empty_script"),
   1.150      (* ansprechen mit ["LinEq","solve_univar_equation"] *)
   1.151 -    Specify.prep_met thy "met_eq_lin" [] e_metID
   1.152 +    Specify.prep_met thy "met_eq_lin" [] Celem.e_metID
   1.153        (["LinEq","solve_lineq_equation"],
   1.154          [("#Given", ["equality e_e", "solveFor v_v"]),
   1.155            ("#Where", ["Not ((lhs e_e) is_polyrat_in v_v)", "((lhs e_e)  has_degree_in v_v) = 1"]),
   1.156            ("#Find",  ["solutions v_v'i'"])],
   1.157 -        {rew_ord' = "termlessI", rls' = LinEq_erls, srls = e_rls, prls = LinEq_prls, calc = [],
   1.158 +        {rew_ord' = "termlessI", rls' = LinEq_erls, srls = Celem.e_rls, prls = LinEq_prls, calc = [],
   1.159            crls = LinEq_crls, errpats = [], nrls = norm_Poly},
   1.160          "Script Solve_lineq_equation (e_e::bool) (v_v::real) =                 " ^
   1.161            "(let e_e =((Try         (Rewrite      all_left           False)) @@   " ^