neuper@42394: (* Title: Test for rational equations neuper@42394: Author: Richard Lang 2009 neuper@42394: (c) copyright due to lincense terms. neuper@42394: *) neuper@37906: neuper@42394: "-----------------------------------------------------------------"; neuper@42394: "table of contents -----------------------------------------------"; neuper@42394: "-----------------------------------------------------------------"; neuper@42394: "------------ pbl: rational, univariate, equation ----------------"; neuper@42394: "------------ solve (1/x = 5, x) by me ---------------------------"; neuper@42394: "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--"; neuper@42394: "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x"; neuper@42394: "-----------------------------------------------------------------"; neuper@42394: "-----------------------------------------------------------------"; neuper@37906: neuper@42394: val thy = @{theory "RatEq"}; neuper@48761: val ctxt = Proof_Context.init_global thy; neuper@37906: neuper@42394: "------------ pbl: rational, univariate, equation ----------------"; neuper@42394: "------------ pbl: rational, univariate, equation ----------------"; neuper@42394: "------------ pbl: rational, univariate, equation ----------------"; wneuper@59188: val t = (Thm.term_of o the o (parse thy)) "(1/b+1/x=1) is_ratequation_in x"; neuper@42394: val SOME (t_, _) = rewrite_set_ thy false RatEq_prls t; neuper@42394: val result = term2str t_; neuper@42394: if result <> "True" then error "rateq.sml: new behaviour 1:" else (); neuper@41943: wneuper@59188: val t = (Thm.term_of o the o (parse thy)) "(sqrt(x)=1) is_ratequation_in x"; neuper@42394: val SOME (t_, _) = rewrite_set_ thy false RatEq_prls t; neuper@37906: val result = term2str t_; neuper@42394: if result <> "False" then error "rateq.sml: new behaviour 2:" else (); neuper@37906: wneuper@59188: val t = (Thm.term_of o the o (parse thy)) "(x=-1) is_ratequation_in x"; neuper@42394: val SOME (t_,_) = rewrite_set_ thy false RatEq_prls t; neuper@37906: val result = term2str t_; neuper@42394: if result <> "False" then error "rateq.sml: new behaviour 3:" else (); neuper@37906: wneuper@59188: val t = (Thm.term_of o the o (parse thy)) "(3 + x^^^2 + 1/(x^^^2+3)=1) is_ratequation_in x"; neuper@42394: val SOME (t_,_) = rewrite_set_ thy false RatEq_prls t; neuper@37906: val result = term2str t_; neuper@42394: if result <> "True" then error "rateq.sml: new behaviour 4:" else (); neuper@37906: neuper@42394: val result = match_pbl ["equality (x=(1::real))","solveFor x","solutions L"] neuper@42394: (get_pbt ["rational","univariate","equation"]); neuper@38031: case result of NoMatch' _ => () | _ => error "rateq.sml: new behaviour: 5"; neuper@37906: neuper@37906: val result = match_pbl ["equality (3 + x^^^2 + 1/(x^^^2+3)=1)","solveFor x","solutions L"] neuper@42394: (get_pbt ["rational","univariate","equation"]); neuper@38031: case result of Matches' _ => () | _ => error "rateq.sml: new behaviour: 6"; neuper@37906: neuper@42394: "------------ solve (1/x = 5, x) by me ---------------------------"; neuper@42394: "------------ solve (1/x = 5, x) by me ---------------------------"; neuper@42394: "------------ solve (1/x = 5, x) by me ---------------------------"; neuper@42394: val fmz = ["equality (1/x=(5::real))","solveFor x","solutions L"]; neuper@37991: val (dI',pI',mI') = ("RatEq",["univariate","equation"],["no_met"]); neuper@37906: val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))]; neuper@42394: (* val (p,_,f,nxt,_,pt) = me nxt p [1] pt;------------- now Refine_Tacitly*) neuper@37906: (* nxt = ("Model_Problem",Model_Problem ["rational","univariate","equation"]) *) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: wneuper@59253: case nxt of ("Rewrite_Set", Rewrite_Set "RatEq_eliminate") => () | _ => ((*not checked before*)); neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: (* neuper@42394: WN120317.TODO dropped rateq: here "x ~= 0 should go to ctxt, but it does not: neuper@42394: --- repair NO asms from rls RatEq_eliminate --- shows why. neuper@42394: so it needs more effort to find out, how Check_elementwise worked in 2002, see below. neuper@42394: *) neuper@42394: neuper@42394: (* val nxt = (_,Subproblem ("RatEq",["univariate","equation"] ======= *) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: (* val (p,_,f,nxt,_,pt) = me nxt p [1] pt;------------- now Refine_Tacitly*) neuper@37906: (*val nxt = ("Model_Problem", Model_Problem ["normalize","polynomial","univariate","equation"])*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: (*val nxt = Apply_Method ["PolyEq", "normalize_poly"])*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: (* val nxt = (_,Subproblem ("PolyEq",["polynomial","univariate","equation"]=======*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: (* ("Model_Problem", Model_Problem ["degree_1","polynomial","univariate","equation"])*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p''',_,f,nxt''',_,pt''') = me nxt p [1] pt; neuper@42394: f2str f = "[x = 1 / 5]"; wneuper@59253: case nxt of ("Check_elementwise", Check_elementwise "Assumptions") => () | _ => ((*not checked before*)); wneuper@59279: "~~~~~ fun me, args:"; val (((_,tac):tac'_), (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt); neuper@42394: val (pt, p) = case locatetac tac (pt,p) of neuper@42394: ("ok", (_, _, ptp)) => ptp | _ => error "--- solve (1/x = 5.. locatetac"; neuper@42394: "~~~~~ fun step, args:"; val (ip as (_,p_), (ptp as (pt,p), tacis)) = (p, ((pt, e_pos'), [])) neuper@42394: val pIopt = get_pblID (pt,ip); (*= SOME ["rational", "univariate", "equation"] neuper@42394: 1-1 associated to metID ["RatEq", "solve_rat_equation"]*) neuper@42394: tacis; (*= []*) neuper@42394: member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (*= false*) neuper@42394: "~~~~~ fun nxt_solve_, args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip); neuper@42394: val thy' = get_obj g_domID pt (par_pblobj pt p); neuper@42394: val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt; (*is: which ctxt?*) wneuper@59279: "~~~~~ fun next_tac, args:"; val (thy, (ptp as (pt, pos as (p, _)):ctree * pos'), neuper@48790: (sc as Prog (h $ body)), neuper@42394: (ScrState (E,l,a,v,s,b), ctxt)) = ((thy',srls), (pt,pos), sc, is); neuper@48790: "~~~~~ fun nstep_up, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) = neuper@42394: (thy, ptp, sc, E, l, Skip_, a, v); neuper@42394: 1 < length l; (*true*) neuper@42394: val up = drop_last l; neuper@42394: go up sc; (* = Const ("HOL.Let", *) neuper@48790: "~~~~~ fun nxt_up, args:"; val (thy, ptp, (scr as (Prog sc)), E, l, ay, neuper@48790: (t as Const ("HOL.Let",_) $ _), a, v) = (thy, ptp, (Prog sc), E, up, ay, (go up sc), a, v); neuper@42394: ay = Napp_; (*false*) neuper@42394: val up = drop_last l; neuper@42394: val (Const ("HOL.Let",_) $ e $ (Abs (i,T,body))) = go up sc; (*Const ("Script.SubProblem",..*) neuper@42394: val i = mk_Free (i, T); neuper@42394: val E = upd_env E (i, v); neuper@42394: "~~~~~ fun appy, args:"; val ((thy as (th,sr)), (pt, p), E, l, t, a, v) = neuper@42394: (thy, ptp, E, (up@[R,D]), body, a, v); neuper@42394: "~~~~~ fun handle_leaf, args:"; val (call, thy, srls, E, a, v, t) = ("next ", th, sr, E, a, v, t); neuper@42394: "~~~~~ fun subst_stacexpr, args:"; val (E, a, v, neuper@42394: (t as (Const ("Script.Check'_elementwise",_) $ _ $ _ ))) = (E, a, v, t); neuper@42394: val STac tm = STac (subst_atomic E t); neuper@42394: term2str tm = "Check_elementwise [x = 1 / 5] {v_v. Assumptions}"; neuper@42394: (* ------ ^^^ ----- ? "x" ?*) neuper@42394: "~~~~~ to handle_leaf return val:"; val ((a', STac stac)) = ((NONE, STac (subst_atomic E t))); neuper@42394: val stac' = eval_listexpr_ (assoc_thy thy) srls (subst_atomic (upd_env_opt E (a,v)) stac); neuper@42394: term2str stac' = "Check_elementwise [x = 1 / 5] {v_v. Assumptions}"; neuper@42394: "~~~~~ to appy return val:"; val ((a', STac stac)) = ((a', STac stac')); neuper@42394: val (m,m') = stac2tac_ pt (assoc_thy th) stac; wneuper@59253: case m of Check_elementwise "Assumptions" => () | _ => (); (*m' = Empty_Tac_ ???!??? *); neuper@42394: val (p''''', pt''''', m''''') = (p, pt, m); neuper@42394: "~~~~~ fun applicable_in, args:"; val ((p,p_), pt, (m as Check_elementwise pred)) = (p, pt, m); neuper@42394: member op = [Pbl,Met] p_; (* = false*) neuper@42394: val pp = par_pblobj pt p; neuper@42394: val thy' = (get_obj g_domID pt pp):theory'; neuper@42394: val thy = assoc_thy thy' neuper@42394: val metID = (get_obj g_metID pt pp) neuper@42394: val {crls,...} = get_met metID neuper@42394: val (f,asm) = case p_ of Frm => (get_obj g_form pt p , []) neuper@42394: | Res => get_obj g_result pt p; neuper@42394: term2str f = "[x = 1 / 5]"; (*the current formula*) neuper@42394: val vp = (thy2ctxt thy, pred) |-> parseNEW |> the |> mk_set thy pt p f; neuper@42394: val (bdv, asms) = vp; neuper@42394: neuper@42394: term2str bdv = "x"; neuper@42394: terms2str asms = (* GOON: asms from rewriting are missing : vvv *) neuper@42394: ("[\"~ matches (?a = 0) (1 = 5 * x) | ~ lhs (1 = 5 * x) is_poly_in x\",\"x = 1 / 5\"," ^ neuper@42394: "\"lhs (1 + -5 * x = 0) is_poly_in x\",\"lhs (1 + -5 * x = 0) has_degree_in x = 1\"," ^ neuper@42394: "\"1 / x = 5 is_ratequation_in x\"]"); neuper@42394: (* neuper@42394: WN120317.TODO dropped rateq: ctxt should contain "x ~= 0 here, but it does not, see above. neuper@42394: *) neuper@42394: neuper@42394: val Appl (Check_elementwise' (curr_form, pred, (res, asms))) = applicable_in p''''' pt''''' m'''''; neuper@42394: term2str curr_form = "[x = 1 / 5]"; neuper@42394: pred = "Assumptions"; neuper@42394: res = str2term "[]::bool list"; neuper@42394: asms = []; neuper@42394: neuper@42394: val (p,_,f,nxt,_,pt) = me nxt''' p''' [] pt'''; (*<<<----- this caused the error*) neuper@42394: f2str f = "[]"; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: neuper@42394: (*============ inhibit exn WN120316 ============================================== neuper@42394: if p = ([], Res) andalso nxt = ("End_Proof'", End_Proof') andalso f2str f = "[x = 1 / 5]" then () neuper@42394: else error "rateq.sml: new behaviour: [x = 1 / 5]"; neuper@42394: (*WN120317.TODO dropped rateq*) neuper@42394: ============ inhibit exn WN120316 ==============================================*) wneuper@59253: if p = ([], Res) andalso f2str f = "[]" wneuper@59253: then case nxt of ("End_Proof'", End_Proof') => () wneuper@59253: | _ => error "rateq.sml: new behaviour: [x = 1 / 5] 1" wneuper@59253: else error "rateq.sml: new behaviour: [x = 1 / 5] 2" neuper@37906: neuper@42394: "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--"; neuper@42394: "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--"; neuper@42394: "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--"; neuper@37906: (*EP Schalk_II_p68_n40*) neuper@42394: val fmz = ["equality ((x)/(x - 8) + (x - 8)/(x) = 26/(5::real))","solveFor x","solutions L"]; neuper@37991: val (dI',pI',mI') = ("RatEq",["univariate","equation"],["no_met"]); neuper@37906: val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))]; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: (* nxt = ("Model_Problem",Model_Problem ["rational","univariate","equation"])*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37991: (* nxt = ("Subproblem",Subproblem ("RatEq",["univariate","equation"]))*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: (* nxt = ("Model_Problem", Model_Problem ["normalize","polynomial","univariate","equation"])*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37991: (* ("Subproblem", Subproblem ("PolyEq",["polynomial","univariate","equation"])) *) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: (* nxt = ("Model_Problem", Model_Problem neuper@37906: ["abcFormula","degree_2","polynomial","univariate","equation"])*) neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@37906: val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: (*============ inhibit exn WN120316 ============================================== neuper@37906: if mout2str(f) = "Form' FormKF (~1,EdUndef,0,Nundef,([x = -2, x = 10])" then() neuper@38031: else error "rateq.sml: new behaviour: [x = -2, x = 10]"; neuper@42394: (*WN120317.TODO dropped rateq*) neuper@42394: ============ inhibit exn WN120316 ==============================================*) neuper@42394: if f2str f = "[]" then () neuper@42394: else error "rateq.sml: new behaviour: [x = -2, x = 10]"; neuper@37906: neuper@42394: "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x"; neuper@42394: "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x"; neuper@42394: "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x"; neuper@42394: (*ER-7*) (*Schalk I s.87 Bsp 55b*) neuper@42394: val fmz = ["equality (x/(x^^^2 - 6*x+9) - 1/(x^^^2 - 3*x) =1/x)", neuper@42394: "solveFor x","solutions L"]; neuper@42394: val (dI',pI',mI') = ("RatEq",["univariate","equation"],["no_met"]); neuper@42394: val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))]; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; wneuper@59253: case nxt of ("Apply_Method", Apply_Method ["RatEq", "solve_rat_equation"]) => () wneuper@59253: | _ => error "55b root specification broken"; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; wneuper@59253: case nxt of ("Apply_Method", Apply_Method ["PolyEq", "normalize_poly"]) => () wneuper@59253: | _ => error "55b normalize_poly specification broken"; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; wneuper@59267: case f of FormKF "-6 * x + 5 * x ^^^ 2 = 0" => () wneuper@59253: | _ => error "rlang.sml: diff.behav. in Schalk I s.87 Bsp 55b"; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; wneuper@59253: case nxt of ("Apply_Method", Apply_Method ["PolyEq", "solve_d2_polyeq_bdvonly_equation"]) => () wneuper@59253: | _ => error "55b normalize_poly specification broken"; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@41943: wneuper@59253: f2str f = "[x = 0, x = 6 / 5]"; (*= GUI*) wneuper@59253: case snd nxt of Check_elementwise "Assumptions" => () | _ => ((*not checked before*)); (*= GUI*) neuper@42394: if terms2str (get_assumptions_ pt p) = neuper@42394: ("[\"~ matches (?a = 0)\n" ^ neuper@42394: " ((3 + -1 * x + x ^^^ 2) * x = 1 * (9 * x + -6 * x ^^^ 2 + x ^^^ 3)) |\n" ^ neuper@42394: "~ lhs ((3 + -1 * x + x ^^^ 2) * x =\n " ^ neuper@42394: " 1 * (9 * x + -6 * x ^^^ 2 + x ^^^ 3)) is_poly_in x\"," ^ neuper@42394: "\"x = 6 / 5\"," ^ neuper@42394: "\"x = 0\"," ^ neuper@42394: "\"lhs (-6 * x + 5 * x ^^^ 2 = 0) is_poly_in x\"," ^ neuper@42394: "\"lhs (-6 * x + 5 * x ^^^ 2 = 0) has_degree_in x = 2\"," ^ neuper@42394: "\"9 * x + -6 * x ^^^ 2 + x ^^^ 3 ~= 0\"," ^ neuper@42394: "\"x / (x ^^^ 2 - 6 * x + 9) - 1 / (x ^^^ 2 - 3 * x) =\n1 / x is_ratequation_in x\"]") neuper@42394: then () else error "rateq.sml: diff.behav. in I s.87 Bsp 55b [x = 6 / 5], asms"; neuper@42394: neuper@42394: (* neuper@42394: WN120317.TODO dropped rateq: ctxt should contain "x ~= 0 here, but it does not. neuper@42394: neuper@42394: The step-into-source contains an error; this error can be detected by neuper@42394: test --- 'trace_script' from outside 'fun me '--- neuper@42394: *) neuper@42394: val (pt''', p''') = (pt, p); wneuper@59279: "~~~~~ fun me, args:"; val (((_,tac):tac'_), (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt); neuper@42394: val (pt, p) = case locatetac tac (pt,p) of neuper@42394: ("ok", (_, _, ptp)) => ptp | _ => error "error in test setup"; neuper@42394: "~~~~~ step, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) = neuper@42394: (p, ((pt, e_pos'),[])); neuper@42394: val pIopt = get_pblID (pt,ip); neuper@42394: ip = ([],Res); (* = false*) neuper@42394: tacis; (* = []*) neuper@42394: member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (* = false*) neuper@42394: "~~~~~ and nxt_solve_, args:"; val ((ptp as (pt, pos as (p,p_)))) = ((pt,ip)); neuper@42394: e_metID = get_obj g_metID pt (par_pblobj pt p); (* = false*) neuper@42394: val thy' = get_obj g_domID pt (par_pblobj pt p); neuper@42394: val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt; wneuper@59279: "~~~~~ fun next_tac, args:"; val (thy, (ptp as (pt, pos as (p, _)):ctree * pos'), neuper@48790: (sc as Prog (h $ body)), (ScrState (E,l,a,v,s,b), ctxt)) = ((thy',srls), (pt,pos), sc, is); neuper@42394: l = []; (* = false*) neuper@48790: "~~~~~ and nstep_up, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) = neuper@42394: (thy, ptp, sc, E, l, Skip_, a, v); neuper@42394: 1 < length l; (* = true*) neuper@42394: val up = drop_last l; neuper@42394: (*val (t as Abs (_,_,_)) = *)(go up sc); neuper@42394: "~~~~~ fun nxt_up, args:"; val (thy, ptp, scr, E, l, ay, (t as Abs (_,_,_)), a, v) = neuper@48790: (thy, ptp, (Prog sc), E, up, ay, (go up sc), a, v); neuper@42394: term2str t = "%L_La. Check_elementwise L_L {v_v. Assumptions}"; neuper@48790: "~~~~~ and nstep_up, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) = neuper@42394: (thy, ptp, scr, E, l, ay, a, v); neuper@42394: 1 < length l; (* = true*) neuper@42394: val up = drop_last l; neuper@42394: (*val (t as Const ("HOL.Let",_) $ e $ (Abs (i,T,b))) = *)(go up sc); neuper@42394: "~~~~~ fun nxt_up, args:"; val (thy, ptp, scr, E, l, ay, neuper@48790: (t as Const ("HOL.Let",_) $ e $ (Abs (i,T,b))), a, v) = (thy, ptp, (Prog sc), E, up, ay, (go up sc), a, v); neuper@42394: neuper@42394: term2str t = "let L_La =\n SubProblem (RatEq', [univariate, equation], [no_met])\n [BOOL e_e, REAL v_v]\nin Check_elementwise L_L {v_v. Assumptions}"; neuper@42394: neuper@42394: (* comment from BEFORE Isabelle2002 --> 2011: neuper@48790: nxt_up thy ptp (Prog sc) E up ay (go up sc) a v; neuper@42394: nstep_up thy ptp scr E l ay a v; neuper@48790: nxt_up thy ptp (Prog sc) E up ay (go up sc) a v; neuper@42394: nstep_up thy ptp sc E l Skip_ a v; neuper@42394: next_tac (thy',srls) (pt,pos) sc is; neuper@42394: nxt_solve_ (pt,ip); neuper@42394: step p ((pt, e_pos'),[]); neuper@42394: *) neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p''' [1] pt'''; neuper@42394: val (p,_,f,nxt,_,pt) = me nxt p [1] pt; neuper@42394: neuper@42394: (*============ inhibit exn WN120316 ============================================== neuper@42394: if p = ([], Res) andalso nxt = ("End_Proof'", End_Proof') andalso f2str f = [x = 6 / 5] then () neuper@42394: else error "rlang.sml: diff.behav. in Schalk I s.87 Bsp 55b [x = 6 / 5]"; neuper@42394: (*WN120317.TODO dropped rateq*) neuper@42394: ============ inhibit exn WN120316 ==============================================*) wneuper@59253: if p = ([], Res) andalso f2str f = "[]" wneuper@59253: then case nxt of ("End_Proof'", End_Proof') => () wneuper@59253: | _ => error "rlang.sml: diff.behav. in Schalk I s.87 Bsp 55b [x = 6 / 5] 1" wneuper@59253: else error "rlang.sml: diff.behav. in Schalk I s.87 Bsp 55b [x = 6 / 5] 2"; neuper@42394: