src/Tools/isac/Knowledge/Test.thy
changeset 59545 4035ec339062
parent 59505 a1f223658994
child 59546 1ada701c4811
equal deleted inserted replaced
59544:dbe1a10234df 59545:4035ec339062
   863 subsection \<open>differentiate\<close>
   863 subsection \<open>differentiate\<close>
   864 setup \<open>KEStore_Elems.add_mets
   864 setup \<open>KEStore_Elems.add_mets
   865     [Specify.prep_met @{theory "Diff"} "met_test" [] Celem.e_metID
   865     [Specify.prep_met @{theory "Diff"} "met_test" [] Celem.e_metID
   866       (["Test"], [],
   866       (["Test"], [],
   867         {rew_ord'="tless_true",rls'=Atools_erls,calc = [], srls = Rule.e_rls, prls=Rule.e_rls,
   867         {rew_ord'="tless_true",rls'=Atools_erls,calc = [], srls = Rule.e_rls, prls=Rule.e_rls,
   868           crls=Atools_erls, errpats = [], nrls = Rule.e_rls}, "empty_script")]
   868           crls=Atools_erls, errpats = [], nrls = Rule.e_rls}, @{thm refl})]
   869 \<close>
   869 \<close>
   870 (*ok
   870 
   871 partial_function (tailrec) solve_linear :: "bool \<Rightarrow> real \<Rightarrow> bool list"
   871 partial_function (tailrec) solve_linear :: "bool \<Rightarrow> real \<Rightarrow> bool list"
   872   where
   872   where
   873 "solve_linear e_e v_v =
   873 "solve_linear e_e v_v =
   874   (let e_e =
   874   (let e_e =
   875     Repeat
   875     Repeat
   876       (((Rewrite_Set_Inst [(''bdv'', v_v)] ''isolate_bdv'' False) @@
   876       (((Rewrite_Set_Inst [(''bdv'', v_v)] ''isolate_bdv'' False) @@
   877         (Rewrite_Set ''Test_simplify'' False))) e_e
   877         (Rewrite_Set ''Test_simplify'' False))) e_e
   878    in [e_e])"
   878    in [e_e])"
   879 *)
       
   880 setup \<open>KEStore_Elems.add_mets
   879 setup \<open>KEStore_Elems.add_mets
   881     [Specify.prep_met thy "met_test_solvelin" [] Celem.e_metID
   880     [Specify.prep_met thy "met_test_solvelin" [] Celem.e_metID
   882       (["Test","solve_linear"],
   881       (["Test","solve_linear"],
   883         [("#Given" ,["equality e_e","solveFor v_v"]),
   882         [("#Given" ,["equality e_e","solveFor v_v"]),
   884           ("#Where" ,["matches (?a = ?b) e_e"]),
   883           ("#Where" ,["matches (?a = ?b) e_e"]),
   885           ("#Find"  ,["solutions v_v'i'"])],
   884           ("#Find"  ,["solutions v_v'i'"])],
   886         {rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule.e_rls,
   885         {rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule.e_rls,
   887           prls = assoc_rls' @{theory} "matches", calc = [], crls = tval_rls, errpats = [],
   886           prls = assoc_rls' @{theory} "matches", calc = [], crls = tval_rls, errpats = [],
   888           nrls = Test_simplify},
   887           nrls = Test_simplify},
   889         "Script Solve_linear (e_e::bool) (v_v::real)=                     " ^
   888         @{thm solve_linear.simps}
       
   889 	    (*"Script Solve_linear (e_e::bool) (v_v::real)=                     " ^
   890           "(let e_e =                                                       " ^
   890           "(let e_e =                                                       " ^
   891           "  Repeat                                                         " ^
   891           "  Repeat                                                         " ^
   892           "    (((Rewrite_Set_Inst [(''bdv'',v_v::real)] ''isolate_bdv'' False) @@  " ^
   892           "    (((Rewrite_Set_Inst [(''bdv'',v_v::real)] ''isolate_bdv'' False) @@  " ^
   893           "      (Rewrite_Set ''Test_simplify'' False))) e_e" ^
   893           "      (Rewrite_Set ''Test_simplify'' False))) e_e" ^
   894           " in [e_e::bool])")]
   894           " in [e_e::bool])"*))]
   895 \<close>
   895 \<close>
   896 subsection \<open>root equation\<close>
   896 subsection \<open>root equation\<close>
   897 (*ok
   897 
   898 partial_function (tailrec) solve_root_equ :: "bool \<Rightarrow> real \<Rightarrow> bool list"
   898 partial_function (tailrec) solve_root_equ :: "bool \<Rightarrow> real \<Rightarrow> bool list"
   899   where
   899   where
   900 "solve_root_equ e_e v_v =
   900 "solve_root_equ e_e v_v =
   901   (let e_e =
   901   (let e_e =
   902      ((While (contains_root e_e) Do
   902      ((While (contains_root e_e) Do
   908       (Try (Rewrite_Set ''norm_equation'' False)) @@
   908       (Try (Rewrite_Set ''norm_equation'' False)) @@
   909       (Try (Rewrite_Set ''Test_simplify'' False)) @@
   909       (Try (Rewrite_Set ''Test_simplify'' False)) @@
   910       (Rewrite_Set_Inst [(''bdv'', v_v)] ''isolate_bdv'' False) @@
   910       (Rewrite_Set_Inst [(''bdv'', v_v)] ''isolate_bdv'' False) @@
   911       (Try (Rewrite_Set ''Test_simplify'' False))) e_e                                                                
   911       (Try (Rewrite_Set ''Test_simplify'' False))) e_e                                                                
   912    in [e_e])"
   912    in [e_e])"
   913 *)
       
   914 setup \<open>KEStore_Elems.add_mets
   913 setup \<open>KEStore_Elems.add_mets
   915     [Specify.prep_met thy  "met_test_sqrt" [] Celem.e_metID
   914     [Specify.prep_met thy  "met_test_sqrt" [] Celem.e_metID
   916       (*root-equation, version for tests before 8.01.01*)
   915       (*root-equation, version for tests before 8.01.01*)
   917       (["Test","sqrt-equ-test"],
   916       (["Test","sqrt-equ-test"],
   918         [("#Given" ,["equality e_e","solveFor v_v"]),
   917         [("#Given" ,["equality e_e","solveFor v_v"]),
   923               [Rule.Calc ("Test.contains'_root",eval_contains_root "")],
   922               [Rule.Calc ("Test.contains'_root",eval_contains_root "")],
   924           prls = Rule.append_rls "prls_contains_root" Rule.e_rls 
   923           prls = Rule.append_rls "prls_contains_root" Rule.e_rls 
   925               [Rule.Calc ("Test.contains'_root",eval_contains_root "")],
   924               [Rule.Calc ("Test.contains'_root",eval_contains_root "")],
   926           calc=[], crls=tval_rls, errpats = [], nrls = Rule.e_rls (*,asm_rls=[],
   925           calc=[], crls=tval_rls, errpats = [], nrls = Rule.e_rls (*,asm_rls=[],
   927           asm_thm=[("square_equation_left",""), ("square_equation_right","")]*)},
   926           asm_thm=[("square_equation_left",""), ("square_equation_right","")]*)},
   928         "Script Solve_root_equation (e_e::bool) (v_v::real) =  " ^
   927         @{thm solve_root_equ.simps}
       
   928 	    (*"Script Solve_root_equation (e_e::bool) (v_v::real) =  " ^
   929           "(let e_e = " ^
   929           "(let e_e = " ^
   930           "   ((While (contains_root e_e) Do" ^
   930           "   ((While (contains_root e_e) Do" ^
   931           "      ((Rewrite ''square_equation_left'' True) @@" ^
   931           "      ((Rewrite ''square_equation_left'' True) @@" ^
   932           "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
   932           "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
   933           "       (Try (Rewrite_Set ''rearrange_assoc'' False)) @@" ^
   933           "       (Try (Rewrite_Set ''rearrange_assoc'' False)) @@" ^
   936           "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
   936           "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
   937           "    (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
   937           "    (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
   938           "    (Rewrite_Set_Inst [(''bdv'',v_v::real)] ''isolate_bdv'' False) @@" ^
   938           "    (Rewrite_Set_Inst [(''bdv'',v_v::real)] ''isolate_bdv'' False) @@" ^
   939           "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
   939           "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
   940           "   e_e" ^
   940           "   e_e" ^
   941           " in [e_e::bool])")]
   941           " in [e_e::bool])"*))]
   942 \<close>
   942 \<close>
   943 (* UNUSED?
   943 (* UNUSED?
   944 partial_function (tailrec) solve_root_equ2 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
   944 partial_function (tailrec) solve_root_equ2 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
   945   where "solve_root_equ e_e v_v =                   
   945   where "solve_root_equ e_e v_v =                   
   946 (let e_e =                                                           
   946 (let e_e =                                                           
   986           "  L_L = Tac solve_equation_dummy                             " ^
   986           "  L_L = Tac solve_equation_dummy                             " ^
   987           "  in Check_elementwise L_L {(v_v::real). Assumptions})")]
   987           "  in Check_elementwise L_L {(v_v::real). Assumptions})")]
   988 \<close>
   988 \<close>
   989 *)
   989 *)
   990 
   990 
   991 (*ok
   991 partial_function (tailrec) minisubpbl ::
   992 partial_function (tailrec) solve_root_equation ::
       
   993   "bool \<Rightarrow> real \<Rightarrow> bool list"
   992   "bool \<Rightarrow> real \<Rightarrow> bool list"
   994 where "minisubpbl e_e v_v =
   993 where "minisubpbl e_e v_v =
   995   (let e_e = ((Try (Rewrite_Set ''norm_equation'' False)) @@
   994   (let e_e = ((Try (Rewrite_Set ''norm_equation'' False)) @@
   996               (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
   995               (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
   997       (L_L::bool list) =
   996       (L_L::bool list) =
   998              SubProblem (''TestX'', [''LINEAR'', ''univariate'', ''equation'', ''test''],
   997              SubProblem (''TestX'', [''LINEAR'', ''univariate'', ''equation'', ''test''],
   999                  [''Test'', ''solve_linear'']) [BOOL e_e, REAL v_v]
   998                  [''Test'', ''solve_linear'']) [BOOL e_e, REAL v_v]
  1000    in Check_elementwise L_L {(v_v::real). Assumptions})"
   999    in Check_elementwise L_L {(v_v::real). Assumptions})"
  1001 *)
       
  1002 setup \<open>KEStore_Elems.add_mets
  1000 setup \<open>KEStore_Elems.add_mets
  1003     [Specify.prep_met thy "met_test_squ_sub" [] Celem.e_metID
  1001     [Specify.prep_met thy "met_test_squ_sub" [] Celem.e_metID
  1004       (*tests subproblem fixed linear*)
  1002       (*tests subproblem fixed linear*)
  1005       (["Test","squ-equ-test-subpbl1"],
  1003       (["Test","squ-equ-test-subpbl1"],
  1006         [("#Given" ,["equality e_e","solveFor v_v"]),
  1004         [("#Given" ,["equality e_e","solveFor v_v"]),
  1008           ("#Find"  ,["solutions v_v'i'"])],
  1006           ("#Find"  ,["solutions v_v'i'"])],
  1009         {rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule.e_rls,
  1007         {rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule.e_rls,
  1010           prls = Rule.append_rls "prls_met_test_squ_sub" Rule.e_rls
  1008           prls = Rule.append_rls "prls_met_test_squ_sub" Rule.e_rls
  1011               [Rule.Calc ("Test.precond'_rootmet", eval_precond_rootmet "")],
  1009               [Rule.Calc ("Test.precond'_rootmet", eval_precond_rootmet "")],
  1012           calc=[], crls=tval_rls, errpats = [], nrls = Test_simplify},
  1010           calc=[], crls=tval_rls, errpats = [], nrls = Test_simplify},
  1013         "Script Solve_root_equation (e_e::bool) (v_v::real) =                  " ^
  1011         @{thm minisubpbl.simps}
       
  1012 	    (*"Script Solve_root_equation (e_e::bool) (v_v::real) =                  " ^
  1014         " (let e_e = ((Try (Rewrite_Set ''norm_equation'' False)) @@               " ^
  1013         " (let e_e = ((Try (Rewrite_Set ''norm_equation'' False)) @@               " ^
  1015         "             (Try (Rewrite_Set ''Test_simplify'' False))) e_e;            " ^
  1014         "             (Try (Rewrite_Set ''Test_simplify'' False))) e_e;            " ^
  1016         "     (L_L::bool list) =                                               " ^
  1015         "     (L_L::bool list) =                                               " ^
  1017         "            (SubProblem (''Test'',                                    " ^
  1016         "            (SubProblem (''Test'',                                    " ^
  1018         "                [''LINEAR'', ''univariate'', ''equation'', ''test''], " ^
  1017         "                [''LINEAR'', ''univariate'', ''equation'', ''test''], " ^
  1019         "                [''Test'', ''solve_linear''])                         " ^
  1018         "                [''Test'', ''solve_linear''])                         " ^
  1020         "              [BOOL e_e, REAL v_v])                                   " ^
  1019         "              [BOOL e_e, REAL v_v])                                   " ^
  1021         "  in Check_elementwise L_L {(v_v::real). Assumptions})                ")]
  1020         "  in Check_elementwise L_L {(v_v::real). Assumptions})                "*))]
  1022 \<close>
  1021 \<close>
  1023 (*ok
  1022 
  1024 partial_function (tailrec) solve_root_equ2 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1023 partial_function (tailrec) solve_root_equ2 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1025   where "solve_root_equ e_e v_v =
  1024   where "solve_root_equ2 e_e v_v =
  1026 (let e_e =
  1025 (let e_e =
  1027       ((While (contains_root e_e) Do
  1026       ((While (contains_root e_e) Do
  1028          ((Rewrite ''square_equation_left'' True) @@
  1027          ((Rewrite ''square_equation_left'' True) @@
  1029           (Try (Rewrite_Set ''Test_simplify'' False)) @@
  1028           (Try (Rewrite_Set ''Test_simplify'' False)) @@
  1030           (Try (Rewrite_Set ''rearrange_assoc'' False)) @@
  1029           (Try (Rewrite_Set ''rearrange_assoc'' False)) @@
  1033        (Try (Rewrite_Set ''norm_equation'' False)) @@
  1032        (Try (Rewrite_Set ''norm_equation'' False)) @@
  1034        (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
  1033        (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
  1035      L_L = SubProblem (''Test'', [''LINEAR'', ''univariate'', ''equation'', ''test''],
  1034      L_L = SubProblem (''Test'', [''LINEAR'', ''univariate'', ''equation'', ''test''],
  1036              [''Test'', ''solve_linear'']) [BOOL e_e, REAL v_v]
  1035              [''Test'', ''solve_linear'']) [BOOL e_e, REAL v_v]
  1037   in Check_elementwise L_L {(v_v::real). Assumptions})                                       "
  1036   in Check_elementwise L_L {(v_v::real). Assumptions})                                       "
  1038 *)
       
  1039 setup \<open>KEStore_Elems.add_mets
  1037 setup \<open>KEStore_Elems.add_mets
  1040     [Specify.prep_met thy  "met_test_eq1" [] Celem.e_metID
  1038     [Specify.prep_met thy  "met_test_eq1" [] Celem.e_metID
  1041       (*root-equation1:*)
  1039       (*root-equation1:*)
  1042       (["Test","square_equation1"],
  1040       (["Test","square_equation1"],
  1043         [("#Given" ,["equality e_e","solveFor v_v"]),
  1041         [("#Given" ,["equality e_e","solveFor v_v"]),
  1045         {rew_ord'="e_rew_ord",rls'=tval_rls,
  1043         {rew_ord'="e_rew_ord",rls'=tval_rls,
  1046           srls = Rule.append_rls "srls_contains_root" Rule.e_rls 
  1044           srls = Rule.append_rls "srls_contains_root" Rule.e_rls 
  1047             [Rule.Calc ("Test.contains'_root",eval_contains_root"")], prls=Rule.e_rls, calc=[], crls=tval_rls,
  1045             [Rule.Calc ("Test.contains'_root",eval_contains_root"")], prls=Rule.e_rls, calc=[], crls=tval_rls,
  1048               errpats = [], nrls = Rule.e_rls(*,asm_rls=[], asm_thm=[("square_equation_left",""),
  1046               errpats = [], nrls = Rule.e_rls(*,asm_rls=[], asm_thm=[("square_equation_left",""),
  1049               ("square_equation_right","")]*)},
  1047               ("square_equation_right","")]*)},
  1050         "Script Solve_root_equation (e_e::bool) (v_v::real) =  " ^
  1048         @{thm solve_root_equ2.simps}
       
  1049 	    (*"Script Solve_root_equation (e_e::bool) (v_v::real) =  " ^
  1051           "(let e_e = " ^
  1050           "(let e_e = " ^
  1052           "   ((While (contains_root e_e) Do" ^
  1051           "   ((While (contains_root e_e) Do" ^
  1053           "      ((Rewrite ''square_equation_left'' True) @@" ^
  1052           "      ((Rewrite ''square_equation_left'' True) @@" ^
  1054           "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
  1053           "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
  1055           "       (Try (Rewrite_Set ''rearrange_assoc'' False)) @@" ^
  1054           "       (Try (Rewrite_Set ''rearrange_assoc'' False)) @@" ^
  1058           "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
  1057           "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
  1059           "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
  1058           "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
  1060           "   e_e;" ^
  1059           "   e_e;" ^
  1061           "  (L_L::bool list) = (SubProblem (''Test'',[''LINEAR'',''univariate'',''equation'',''test'']," ^
  1060           "  (L_L::bool list) = (SubProblem (''Test'',[''LINEAR'',''univariate'',''equation'',''test'']," ^
  1062           "                    [''Test'',''solve_linear'']) [BOOL e_e, REAL v_v])" ^
  1061           "                    [''Test'',''solve_linear'']) [BOOL e_e, REAL v_v])" ^
  1063           "  in Check_elementwise L_L {(v_v::real). Assumptions})")]
  1062           "  in Check_elementwise L_L {(v_v::real). Assumptions})"*))]
  1064 \<close>
  1063 \<close>
  1065 (*ok
  1064 
  1066 partial_function (tailrec) solve_root_equ3 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1065 partial_function (tailrec) solve_root_equ3 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1067   where
  1066   where
  1068 "solve_root_equ e_e v_v =
  1067 "solve_root_equ3 e_e v_v =
  1069   (let e_e =
  1068   (let e_e =
  1070         ((While (contains_root e_e) Do
  1069         ((While (contains_root e_e) Do
  1071            (((Rewrite ''square_equation_left'' True) Or
  1070            (((Rewrite ''square_equation_left'' True) Or
  1072              (Rewrite ''square_equation_right'' True)) @@
  1071              (Rewrite ''square_equation_right'' True)) @@
  1073             (Try (Rewrite_Set ''Test_simplify'' False)) @@
  1072             (Try (Rewrite_Set ''Test_simplify'' False)) @@
  1077          (Try (Rewrite_Set ''norm_equation'' False)) @@
  1076          (Try (Rewrite_Set ''norm_equation'' False)) @@
  1078          (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
  1077          (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
  1079        L_L = SubProblem (''Test'', [''plain_square'', ''univariate'', ''equation'', ''test''],
  1078        L_L = SubProblem (''Test'', [''plain_square'', ''univariate'', ''equation'', ''test''],
  1080                [''Test'', ''solve_plain_square'']) [BOOL e_e, REAL v_v]
  1079                [''Test'', ''solve_plain_square'']) [BOOL e_e, REAL v_v]
  1081     in Check_elementwise L_L {(v_v::real). Assumptions})"
  1080     in Check_elementwise L_L {(v_v::real). Assumptions})"
  1082 *)
       
  1083 setup \<open>KEStore_Elems.add_mets
  1081 setup \<open>KEStore_Elems.add_mets
  1084     [Specify.prep_met thy "met_test_squ2" [] Celem.e_metID
  1082     [Specify.prep_met thy "met_test_squ2" [] Celem.e_metID
  1085       (*root-equation2*)
  1083       (*root-equation2*)
  1086         (["Test","square_equation2"],
  1084         (["Test","square_equation2"],
  1087           [("#Given" ,["equality e_e","solveFor v_v"]),
  1085           [("#Given" ,["equality e_e","solveFor v_v"]),
  1089         {rew_ord'="e_rew_ord",rls'=tval_rls,
  1087         {rew_ord'="e_rew_ord",rls'=tval_rls,
  1090           srls = Rule.append_rls "srls_contains_root" Rule.e_rls 
  1088           srls = Rule.append_rls "srls_contains_root" Rule.e_rls 
  1091               [Rule.Calc ("Test.contains'_root",eval_contains_root"")],
  1089               [Rule.Calc ("Test.contains'_root",eval_contains_root"")],
  1092           prls=Rule.e_rls,calc=[], crls=tval_rls, errpats = [], nrls = Rule.e_rls(*,asm_rls=[],
  1090           prls=Rule.e_rls,calc=[], crls=tval_rls, errpats = [], nrls = Rule.e_rls(*,asm_rls=[],
  1093           asm_thm=[("square_equation_left",""), ("square_equation_right","")]*)},
  1091           asm_thm=[("square_equation_left",""), ("square_equation_right","")]*)},
  1094         "Script Solve_root_equation (e_e::bool) (v_v::real)  =  " ^
  1092         @{thm solve_root_equ3.simps}
       
  1093 	    (*"Script Solve_root_equation (e_e::bool) (v_v::real)  =  " ^
  1095         "(let e_e = " ^
  1094         "(let e_e = " ^
  1096         "   ((While (contains_root e_e) Do" ^
  1095         "   ((While (contains_root e_e) Do" ^
  1097         "      (((Rewrite ''square_equation_left'' True) Or " ^
  1096         "      (((Rewrite ''square_equation_left'' True) Or " ^
  1098         "        (Rewrite ''square_equation_right'' True)) @@" ^
  1097         "        (Rewrite ''square_equation_right'' True)) @@" ^
  1099         "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
  1098         "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
  1103         "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
  1102         "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
  1104         "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
  1103         "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
  1105         "   e_e;" ^
  1104         "   e_e;" ^
  1106         "  (L_L::bool list) = (SubProblem (''Test'',[''plain_square'',''univariate'',''equation'',''test'']," ^
  1105         "  (L_L::bool list) = (SubProblem (''Test'',[''plain_square'',''univariate'',''equation'',''test'']," ^
  1107         "                    [''Test'',''solve_plain_square'']) [BOOL e_e, REAL v_v])" ^
  1106         "                    [''Test'',''solve_plain_square'']) [BOOL e_e, REAL v_v])" ^
  1108         "  in Check_elementwise L_L {(v_v::real). Assumptions})")]
  1107         "  in Check_elementwise L_L {(v_v::real). Assumptions})"*))]
  1109 \<close>
  1108 \<close>
  1110 (*ok
  1109 
  1111 partial_function (tailrec) solve_root_equ4 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1110 partial_function (tailrec) solve_root_equ4 :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1112   where
  1111   where
  1113 "solve_root_equ e_e v_v =
  1112 "solve_root_equ4 e_e v_v =
  1114 (let e_e =
  1113 (let e_e =
  1115       ((While (contains_root e_e) Do
  1114       ((While (contains_root e_e) Do
  1116          (((Rewrite ''square_equation_left'' True) Or
  1115          (((Rewrite ''square_equation_left'' True) Or
  1117            (Rewrite ''square_equation_right'' True)) @@
  1116            (Rewrite ''square_equation_right'' True)) @@
  1118           (Try (Rewrite_Set ''Test_simplify'' False)) @@
  1117           (Try (Rewrite_Set ''Test_simplify'' False)) @@
  1122        (Try (Rewrite_Set ''norm_equation'' False)) @@
  1121        (Try (Rewrite_Set ''norm_equation'' False)) @@
  1123        (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
  1122        (Try (Rewrite_Set ''Test_simplify'' False))) e_e;
  1124      L_L = SubProblem (''Test'', [''univariate'', ''equation'', ''test''],
  1123      L_L = SubProblem (''Test'', [''univariate'', ''equation'', ''test''],
  1125              [''no_met'']) [BOOL e_e, REAL v_v]
  1124              [''no_met'']) [BOOL e_e, REAL v_v]
  1126   in Check_elementwise L_L {(v_v::real). Assumptions})"
  1125   in Check_elementwise L_L {(v_v::real). Assumptions})"
  1127 *)
       
  1128 setup \<open>KEStore_Elems.add_mets
  1126 setup \<open>KEStore_Elems.add_mets
  1129     [Specify.prep_met thy "met_test_squeq" [] Celem.e_metID
  1127     [Specify.prep_met thy "met_test_squeq" [] Celem.e_metID
  1130       (*root-equation*)
  1128       (*root-equation*)
  1131       (["Test","square_equation"],
  1129       (["Test","square_equation"],
  1132         [("#Given" ,["equality e_e","solveFor v_v"]),
  1130         [("#Given" ,["equality e_e","solveFor v_v"]),
  1134         {rew_ord'="e_rew_ord",rls'=tval_rls,
  1132         {rew_ord'="e_rew_ord",rls'=tval_rls,
  1135           srls = Rule.append_rls "srls_contains_root" Rule.e_rls 
  1133           srls = Rule.append_rls "srls_contains_root" Rule.e_rls 
  1136               [Rule.Calc ("Test.contains'_root",eval_contains_root"")],
  1134               [Rule.Calc ("Test.contains'_root",eval_contains_root"")],
  1137           prls=Rule.e_rls,calc=[], crls=tval_rls, errpats = [], nrls = Rule.e_rls (*,asm_rls=[],
  1135           prls=Rule.e_rls,calc=[], crls=tval_rls, errpats = [], nrls = Rule.e_rls (*,asm_rls=[],
  1138           asm_thm=[("square_equation_left",""), ("square_equation_right","")]*)},
  1136           asm_thm=[("square_equation_left",""), ("square_equation_right","")]*)},
  1139         "Script Solve_root_equation (e_e::bool) (v_v::real) =  " ^
  1137         @{thm solve_root_equ4.simps}
       
  1138 	    (*"Script Solve_root_equation (e_e::bool) (v_v::real) =  " ^
  1140           "(let e_e = " ^
  1139           "(let e_e = " ^
  1141           "   ((While (contains_root e_e) Do" ^
  1140           "   ((While (contains_root e_e) Do" ^
  1142           "      (((Rewrite ''square_equation_left'' True) Or" ^
  1141           "      (((Rewrite ''square_equation_left'' True) Or" ^
  1143           "        (Rewrite ''square_equation_right'' True)) @@" ^
  1142           "        (Rewrite ''square_equation_right'' True)) @@" ^
  1144           "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
  1143           "       (Try (Rewrite_Set ''Test_simplify'' False)) @@" ^
  1148           "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
  1147           "    (Try (Rewrite_Set ''norm_equation'' False)) @@" ^
  1149           "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
  1148           "    (Try (Rewrite_Set ''Test_simplify'' False)))" ^
  1150           "   e_e;" ^
  1149           "   e_e;" ^
  1151           "  (L_L::bool list) = (SubProblem (''Test'',[''univariate'',''equation'',''test'']," ^
  1150           "  (L_L::bool list) = (SubProblem (''Test'',[''univariate'',''equation'',''test'']," ^
  1152           "                    [''no_met'']) [BOOL e_e, REAL v_v])" ^
  1151           "                    [''no_met'']) [BOOL e_e, REAL v_v])" ^
  1153           "  in Check_elementwise L_L {(v_v::real). Assumptions})")]
  1152           "  in Check_elementwise L_L {(v_v::real). Assumptions})"*))]
  1154 \<close>
  1153 \<close>
  1155 (*ok
  1154 
  1156 partial_function (tailrec) solve_plain_square :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1155 partial_function (tailrec) solve_plain_square :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1157   where
  1156   where
  1158 "solve_plain_square e_e v_v =         
  1157 "solve_plain_square e_e v_v =         
  1159  (let e_e = ((Try (Rewrite_Set ''isolate_bdv'' False)) @@
  1158  (let e_e = ((Try (Rewrite_Set ''isolate_bdv'' False)) @@
  1160              (Try (Rewrite_Set ''Test_simplify'' False))    @@
  1159              (Try (Rewrite_Set ''Test_simplify'' False))    @@
  1161              ((Rewrite ''square_equality_0'' False) Or
  1160              ((Rewrite ''square_equality_0'' False) Or
  1162               (Rewrite ''square_equality'' True)) @@
  1161               (Rewrite ''square_equality'' True)) @@
  1163              (Try (Rewrite_Set ''tval_rls'' False))) e_e
  1162              (Try (Rewrite_Set ''tval_rls'' False))) e_e
  1164   in Or_to_List e_e)"
  1163   in Or_to_List e_e)"
  1165 *)
       
  1166 setup \<open>KEStore_Elems.add_mets
  1164 setup \<open>KEStore_Elems.add_mets
  1167     [Specify.prep_met thy "met_test_eq_plain" [] Celem.e_metID
  1165     [Specify.prep_met thy "met_test_eq_plain" [] Celem.e_metID
  1168       (*solve_plain_square*)
  1166       (*solve_plain_square*)
  1169       (["Test","solve_plain_square"],
  1167       (["Test","solve_plain_square"],
  1170         [("#Given",["equality e_e","solveFor v_v"]),
  1168         [("#Given",["equality e_e","solveFor v_v"]),
  1174               "(matches (        v_v ^^^2 = 0) e_e)"]), 
  1172               "(matches (        v_v ^^^2 = 0) e_e)"]), 
  1175           ("#Find"  ,["solutions v_v'i'"])],
  1173           ("#Find"  ,["solutions v_v'i'"])],
  1176         {rew_ord'="e_rew_ord",rls'=tval_rls,calc=[],srls=Rule.e_rls,
  1174         {rew_ord'="e_rew_ord",rls'=tval_rls,calc=[],srls=Rule.e_rls,
  1177           prls = assoc_rls' @{theory} "matches", crls=tval_rls, errpats = [], nrls = Rule.e_rls(*,
  1175           prls = assoc_rls' @{theory} "matches", crls=tval_rls, errpats = [], nrls = Rule.e_rls(*,
  1178           asm_rls=[],asm_thm=[]*)},
  1176           asm_rls=[],asm_thm=[]*)},
  1179         "Script Solve_plain_square (e_e::bool) (v_v::real) =           " ^
  1177         @{thm solve_plain_square.simps}
       
  1178 	    (*"Script Solve_plain_square (e_e::bool) (v_v::real) =           " ^
  1180           " (let e_e = ((Try (Rewrite_Set ''isolate_bdv'' False)) @@         " ^
  1179           " (let e_e = ((Try (Rewrite_Set ''isolate_bdv'' False)) @@         " ^
  1181           "            (Try (Rewrite_Set ''Test_simplify'' False)) @@     " ^
  1180           "            (Try (Rewrite_Set ''Test_simplify'' False)) @@     " ^
  1182           "            ((Rewrite ''square_equality_0'' False) Or        " ^
  1181           "            ((Rewrite ''square_equality_0'' False) Or        " ^
  1183           "             (Rewrite ''square_equality'' True)) @@            " ^
  1182           "             (Rewrite ''square_equality'' True)) @@            " ^
  1184           "            (Try (Rewrite_Set ''tval_rls'' False))) e_e             " ^
  1183           "            (Try (Rewrite_Set ''tval_rls'' False))) e_e             " ^
  1185           "  in ((Or_to_List e_e)::bool list))")]
  1184           "  in ((Or_to_List e_e)::bool list))"*))]
  1186 \<close>
  1185 \<close>
  1187 subsection \<open>polynomial equation\<close>
  1186 subsection \<open>polynomial equation\<close>
  1188 (*ok
  1187 
  1189 partial_function (tailrec) norm_univariate_equ :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1188 partial_function (tailrec) norm_univariate_equ :: "bool \<Rightarrow> real \<Rightarrow> bool list"
  1190   where
  1189   where
  1191 "norm_univariate_equ e_e v_v =
  1190 "norm_univariate_equ e_e v_v =
  1192  (let e_e = ((Try (Rewrite ''rnorm_equation_add'' False)) @@
  1191  (let e_e = ((Try (Rewrite ''rnorm_equation_add'' False)) @@
  1193              (Try (Rewrite_Set ''Test_simplify'' False))) e_e
  1192              (Try (Rewrite_Set ''Test_simplify'' False))) e_e
  1194   in SubProblem (''Test'', [''univariate'', ''equation'', ''test''],
  1193   in SubProblem (''Test'', [''univariate'', ''equation'', ''test''],
  1195         [''no_met'']) [BOOL e_e, REAL v_v])"
  1194         [''no_met'']) [BOOL e_e, REAL v_v])"
  1196 *)
       
  1197 setup \<open>KEStore_Elems.add_mets
  1195 setup \<open>KEStore_Elems.add_mets
  1198     [Specify.prep_met thy "met_test_norm_univ" [] Celem.e_metID
  1196     [Specify.prep_met thy "met_test_norm_univ" [] Celem.e_metID
  1199       (["Test","norm_univar_equation"],
  1197       (["Test","norm_univar_equation"],
  1200         [("#Given",["equality e_e","solveFor v_v"]),
  1198         [("#Given",["equality e_e","solveFor v_v"]),
  1201           ("#Where" ,[]), 
  1199           ("#Where" ,[]), 
  1202           ("#Find"  ,["solutions v_v'i'"])],
  1200           ("#Find"  ,["solutions v_v'i'"])],
  1203         {rew_ord'="e_rew_ord",rls'=tval_rls,srls = Rule.e_rls,prls=Rule.e_rls, calc=[], crls=tval_rls,
  1201         {rew_ord'="e_rew_ord",rls'=tval_rls,srls = Rule.e_rls,prls=Rule.e_rls, calc=[], crls=tval_rls,
  1204           errpats = [], nrls = Rule.e_rls},
  1202           errpats = [], nrls = Rule.e_rls},
  1205         "Script Norm_univar_equation (e_e::bool) (v_v::real) =      " ^
  1203         @{thm norm_univariate_equ.simps}
       
  1204 	    (*"Script Norm_univar_equation (e_e::bool) (v_v::real) =      " ^
  1206           " (let e_e = ((Try (Rewrite ''rnorm_equation_add'' False)) @@   " ^
  1205           " (let e_e = ((Try (Rewrite ''rnorm_equation_add'' False)) @@   " ^
  1207           "            (Try (Rewrite_Set ''Test_simplify'' False))) e_e   " ^
  1206           "            (Try (Rewrite_Set ''Test_simplify'' False))) e_e   " ^
  1208           "  in (SubProblem (''Test'',[''univariate'',''equation'',''test''],         " ^
  1207           "  in (SubProblem (''Test'',[''univariate'',''equation'',''test''],         " ^
  1209           "                    [''no_met'']) [BOOL e_e, REAL v_v]))")]
  1208           "                    [''no_met'']) [BOOL e_e, REAL v_v]))"*))]
  1210 \<close>
  1209 \<close>
  1211 subsection \<open>diophantine equation\<close>
  1210 subsection \<open>diophantine equation\<close>
  1212 (*ok
  1211 
  1213 partial_function (tailrec) test_simplify :: "int \<Rightarrow> int"
  1212 partial_function (tailrec) test_simplify :: "int \<Rightarrow> int"
  1214   where
  1213   where
  1215 "test_simplify t_t =           
  1214 "test_simplify t_t =           
  1216   (Repeat                                    
  1215   (Repeat                                    
  1217       ((Try (Calculate ''PLUS'')) @@         
  1216       ((Try (Calculate ''PLUS'')) @@         
  1218        (Try (Calculate ''TIMES''))) t_t)"
  1217        (Try (Calculate ''TIMES''))) t_t)"
  1219 *)
       
  1220 setup \<open>KEStore_Elems.add_mets
  1218 setup \<open>KEStore_Elems.add_mets
  1221     [Specify.prep_met thy "met_test_intsimp" [] Celem.e_metID
  1219     [Specify.prep_met thy "met_test_intsimp" [] Celem.e_metID
  1222       (["Test","intsimp"],
  1220       (["Test","intsimp"],
  1223         [("#Given" ,["intTestGiven t_t"]),
  1221         [("#Given" ,["intTestGiven t_t"]),
  1224           ("#Where" ,[]),
  1222           ("#Where" ,[]),
  1225           ("#Find"  ,["intTestFind s_s"])],
  1223           ("#Find"  ,["intTestFind s_s"])],
  1226         {rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule.e_rls,  prls = Rule.e_rls, calc = [],
  1224         {rew_ord' = "e_rew_ord", rls' = tval_rls, srls = Rule.e_rls,  prls = Rule.e_rls, calc = [],
  1227           crls = tval_rls, errpats = [], nrls = Test_simplify},
  1225           crls = tval_rls, errpats = [], nrls = Test_simplify},
  1228         "Script STest_simplify (t_t::int) =                  " ^
  1226         @{thm test_simplify.simps}
       
  1227 	    (*"Script STest_simplify (t_t::int) =                  " ^
  1229           "(Repeat                                                          " ^
  1228           "(Repeat                                                          " ^
  1230           "    ((Try (Calculate ''PLUS'')) @@  " ^
  1229           "    ((Try (Calculate ''PLUS'')) @@  " ^
  1231           "     (Try (Calculate ''TIMES''))) t_t::int)")]
  1230           "     (Try (Calculate ''TIMES''))) t_t::int)"*))]
  1232 \<close>
  1231 \<close>
  1233 
  1232 
  1234 end
  1233 end