neuper@37906
|
1 |
(* all outcommented in order to demonstrate authoring:
|
neuper@37906
|
2 |
WN071203
|
neuper@37906
|
3 |
*)
|
neuper@37954
|
4 |
|
neuper@37954
|
5 |
theory LogExp imports PolyEq begin
|
neuper@37906
|
6 |
|
neuper@37906
|
7 |
consts
|
neuper@37906
|
8 |
|
neuper@37906
|
9 |
ln :: "real => real"
|
neuper@37906
|
10 |
alog :: "[real, real] => real" ("_ log _" 90)
|
neuper@37906
|
11 |
|
neuper@52148
|
12 |
axiomatization where
|
neuper@37906
|
13 |
|
walther@60242
|
14 |
equality_pow: "0 < a ==> (l = r) = (a \<up> l = a \<up> r)" and
|
walther@60242
|
15 |
(* this is what students \<up> \<up> ^... are told to do *)
|
walther@60242
|
16 |
equality_power: "((a log b) = c) = (a \<up> (a log b) = a \<up> c)" and
|
walther@60242
|
17 |
exp_invers_log: "a \<up> (a log b) = b"
|
neuper@37954
|
18 |
|
neuper@37954
|
19 |
(** problems **)
|
wenzelm@60306
|
20 |
|
wenzelm@60306
|
21 |
problem pbl_test_equ_univ_log : "logarithmic/univariate/equation" =
|
wenzelm@60306
|
22 |
\<open>PolyEq_prls\<close>
|
Walther@60449
|
23 |
Method_Ref: "Equation/solve_log"
|
wenzelm@60306
|
24 |
CAS: "solve (e_e::bool, v_v)"
|
wenzelm@60306
|
25 |
Given: "equality e_e" "solveFor v_v"
|
wenzelm@60306
|
26 |
Where: "matches ((?a log ?v_v) = ?b) e_e"
|
wenzelm@60306
|
27 |
Find: "solutions v_v'i'"
|
wenzelm@60306
|
28 |
(*With: FIXME !? "||(lhs (Subst (v'i', v_v) e_e) - (rhs (Subst (v'i', v_v) e_e) || < eps)" *)
|
s1210629013@55380
|
29 |
|
s1210629013@55373
|
30 |
(** methods **)
|
wneuper@59545
|
31 |
|
wneuper@59504
|
32 |
partial_function (tailrec) solve_log :: "bool \<Rightarrow> real \<Rightarrow> bool list"
|
wneuper@59504
|
33 |
where
|
walther@59635
|
34 |
"solve_log e_e v_v = (
|
walther@59635
|
35 |
let
|
walther@59635
|
36 |
e_e = (
|
walther@59637
|
37 |
(Rewrite ''equality_power'') #>
|
walther@59637
|
38 |
(Rewrite ''exp_invers_log'') #>
|
walther@59635
|
39 |
(Rewrite_Set ''norm_Poly'') ) e_e
|
walther@59635
|
40 |
in
|
walther@59635
|
41 |
[e_e])"
|
wenzelm@60303
|
42 |
|
wenzelm@60303
|
43 |
method met_equ_log : "Equation/solve_log" =
|
Walther@60586
|
44 |
\<open>{rew_ord = "termlessI", rls' = PolyEq_erls, prog_rls = Rule_Set.empty, where_rls = PolyEq_prls, calc = [],
|
Walther@60587
|
45 |
errpats = [], rew_rls = norm_Rational}\<close>
|
wenzelm@60303
|
46 |
Program: solve_log.simps
|
wenzelm@60303
|
47 |
Given: "equality e_e" "solveFor v_v"
|
wenzelm@60303
|
48 |
Where: "matches ((?a log ?v_v) = ?b) e_e"
|
wenzelm@60303
|
49 |
Find: "solutions v_v'i'"
|
wenzelm@60303
|
50 |
|
wenzelm@60303
|
51 |
ML \<open>
|
walther@60278
|
52 |
\<close> ML \<open>
|
wneuper@59472
|
53 |
\<close>
|
neuper@37906
|
54 |
end |