348 Rls {id="prls_triangular", preconds = [], |
358 Rls {id="prls_triangular", preconds = [], |
349 rew_ord = ("e_rew_ord", e_rew_ord), |
359 rew_ord = ("e_rew_ord", e_rew_ord), |
350 erls = Rls {id="erls_prls_triangular", preconds = [], |
360 erls = Rls {id="erls_prls_triangular", preconds = [], |
351 rew_ord = ("e_rew_ord", e_rew_ord), |
361 rew_ord = ("e_rew_ord", e_rew_ord), |
352 erls = Erls, srls = Erls, calc = [], |
362 erls = Erls, srls = Erls, calc = [], |
353 rules = [(*for precond nth_Cons_ ...*) |
363 rules = [(*for precond NTH_CONS ...*) |
354 Calc ("op <",eval_equ "#less_"), |
364 Calc ("op <",eval_equ "#less_"), |
355 Calc ("op +", eval_binop "#add_") |
365 Calc ("op +", eval_binop "#add_") |
356 (*immediately repeated rewrite pushes |
366 (*immediately repeated rewrite pushes |
357 '+' into precondition !*) |
367 '+' into precondition !*) |
358 ], |
368 ], |
359 scr = EmptyScr}, |
369 scr = EmptyScr}, |
360 srls = Erls, calc = [], |
370 srls = Erls, calc = [], |
361 rules = [Thm ("nth_Cons_",num_str @{thm nth_Cons_}), |
371 rules = [Thm ("NTH_CONS",num_str @{thm NTH_CONS}), |
362 Calc ("op +", eval_binop "#add_"), |
372 Calc ("op +", eval_binop "#add_"), |
363 Thm ("nth_Nil_",num_str @{thm nth_Nil_}), |
373 Thm ("NTH_NIL",num_str @{thm NTH_NIL}), |
364 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
374 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
365 Thm ("tl_Nil",num_str @{thm tl_Nil}), |
375 Thm ("tl_Nil",num_str @{thm tl_Nil}), |
366 Calc ("EqSystem.occur'_exactly'_in", |
376 Calc ("EqSystem.occur'_exactly'_in", |
367 eval_occur_exactly_in |
377 eval_occur_exactly_in |
368 "#eval_occur_exactly_in_") |
378 "#eval_occur_exactly_in_") |
369 ], |
379 ], |
370 scr = EmptyScr}; |
380 scr = EmptyScr}; |
|
381 *} |
|
382 ML {* |
371 |
383 |
372 (*WN060914 quickly created for 4x4; |
384 (*WN060914 quickly created for 4x4; |
373 more similarity to prls_triangular desirable*) |
385 more similarity to prls_triangular desirable*) |
374 val prls_triangular4 = |
386 val prls_triangular4 = |
375 Rls {id="prls_triangular4", preconds = [], |
387 Rls {id="prls_triangular4", preconds = [], |
376 rew_ord = ("e_rew_ord", e_rew_ord), |
388 rew_ord = ("e_rew_ord", e_rew_ord), |
377 erls = Rls {id="erls_prls_triangular4", preconds = [], |
389 erls = Rls {id="erls_prls_triangular4", preconds = [], |
378 rew_ord = ("e_rew_ord", e_rew_ord), |
390 rew_ord = ("e_rew_ord", e_rew_ord), |
379 erls = Erls, srls = Erls, calc = [], |
391 erls = Erls, srls = Erls, calc = [], |
380 rules = [(*for precond nth_Cons_ ...*) |
392 rules = [(*for precond NTH_CONS ...*) |
381 Calc ("op <",eval_equ "#less_"), |
393 Calc ("op <",eval_equ "#less_"), |
382 Calc ("op +", eval_binop "#add_") |
394 Calc ("op +", eval_binop "#add_") |
383 (*immediately repeated rewrite pushes |
395 (*immediately repeated rewrite pushes |
384 '+' into precondition !*) |
396 '+' into precondition !*) |
385 ], |
397 ], |
386 scr = EmptyScr}, |
398 scr = EmptyScr}, |
387 srls = Erls, calc = [], |
399 srls = Erls, calc = [], |
388 rules = [Thm ("nth_Cons_",num_str @{thm nth_Cons_}), |
400 rules = [Thm ("NTH_CONS",num_str @{thm NTH_CONS}), |
389 Calc ("op +", eval_binop "#add_"), |
401 Calc ("op +", eval_binop "#add_"), |
390 Thm ("nth_Nil_",num_str @{thm thm nth_Nil_}), |
402 Thm ("NTH_NIL",num_str @{thm NTH_NIL}), |
391 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
403 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
392 Thm ("tl_Nil",num_str @{thm tl_Nil}), |
404 Thm ("tl_Nil",num_str @{thm tl_Nil}), |
393 Calc ("EqSystem.occur'_exactly'_in", |
405 Calc ("EqSystem.occur'_exactly'_in", |
394 eval_occur_exactly_in |
406 eval_occur_exactly_in |
395 "#eval_occur_exactly_in_") |
407 "#eval_occur_exactly_in_") |
396 ], |
408 ], |
397 scr = EmptyScr}; |
409 scr = EmptyScr}; |
|
410 *} |
|
411 ML {* |
398 |
412 |
399 ruleset' := |
413 ruleset' := |
400 overwritelthy @{theory} |
414 overwritelthy @{theory} |
401 (!ruleset', |
415 (!ruleset', |
402 [("simplify_System_parenthesized", prep_rls simplify_System_parenthesized), |
416 [("simplify_System_parenthesized", prep_rls simplify_System_parenthesized), |
406 ("order_system", prep_rls order_system), |
420 ("order_system", prep_rls order_system), |
407 ("order_add_mult_System", prep_rls order_add_mult_System), |
421 ("order_add_mult_System", prep_rls order_add_mult_System), |
408 ("norm_System_noadd_fractions", prep_rls norm_System_noadd_fractions), |
422 ("norm_System_noadd_fractions", prep_rls norm_System_noadd_fractions), |
409 ("norm_System", prep_rls norm_System) |
423 ("norm_System", prep_rls norm_System) |
410 ]); |
424 ]); |
|
425 *} |
|
426 ML {* |
411 |
427 |
412 |
428 |
413 (** problems **) |
429 (** problems **) |
414 |
430 |
415 store_pbt |
431 store_pbt |
416 (prep_pbt thy "pbl_equsys" [] e_pblID |
432 (prep_pbt thy "pbl_equsys" [] e_pblID |
417 (["system"], |
433 (["system"], |
418 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
434 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
419 ("#Find" ,["solution ss___"](*___ is copy-named*)) |
435 ("#Find" ,["solution ss'''"](*''' is copy-named*)) |
420 ], |
436 ], |
421 append_rls "e_rls" e_rls [(*for preds in where_*)], |
437 append_rls "e_rls" e_rls [(*for preds in where_*)], |
422 SOME "solveSystem es_ v_s", |
438 SOME "solveSystem e_s v_s", |
423 [])); |
439 [])); |
424 store_pbt |
440 store_pbt |
425 (prep_pbt thy "pbl_equsys_lin" [] e_pblID |
441 (prep_pbt thy "pbl_equsys_lin" [] e_pblID |
426 (["linear", "system"], |
442 (["linear", "system"], |
427 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
443 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
428 (*TODO.WN050929 check linearity*) |
444 (*TODO.WN050929 check linearity*) |
429 ("#Find" ,["solution ss___"]) |
445 ("#Find" ,["solution ss'''"]) |
430 ], |
446 ], |
431 append_rls "e_rls" e_rls [(*for preds in where_*)], |
447 append_rls "e_rls" e_rls [(*for preds in where_*)], |
432 SOME "solveSystem es_ v_s", |
448 SOME "solveSystem e_s v_s", |
433 [])); |
449 [])); |
434 store_pbt |
450 store_pbt |
435 (prep_pbt thy "pbl_equsys_lin_2x2" [] e_pblID |
451 (prep_pbt thy "pbl_equsys_lin_2x2" [] e_pblID |
436 (["2x2", "linear", "system"], |
452 (["2x2", "linear", "system"], |
437 (*~~~~~~~~~~~~~~~~~~~~~~~~~*) |
453 (*~~~~~~~~~~~~~~~~~~~~~~~~~*) |
438 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
454 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
439 ("#Where" ,["length_ (es_:: bool list) = 2", "length_ v_s = 2"]), |
455 ("#Where" ,["LENGTH (e_s:: bool list) = 2", "LENGTH v_s = 2"]), |
440 ("#Find" ,["solution ss___"]) |
456 ("#Find" ,["solution ss'''"]) |
441 ], |
457 ], |
442 append_rls "prls_2x2_linear_system" e_rls |
458 append_rls "prls_2x2_linear_system" e_rls |
443 [Thm ("length_Cons_",num_str @{thm length_Cons_}), |
459 [Thm ("LENGTH_CONS",num_str @{thm LENGTH_CONS}), |
444 Thm ("length_Nil_",num_str @{thm length_Nil_}), |
460 Thm ("LENGTH_NIL",num_str @{thm LENGTH_NIL}), |
445 Calc ("op +", eval_binop "#add_"), |
461 Calc ("op +", eval_binop "#add_"), |
446 Calc ("op =",eval_equal "#equal_") |
462 Calc ("op =",eval_equal "#equal_") |
447 ], |
463 ], |
448 SOME "solveSystem es_ v_s", |
464 SOME "solveSystem e_s v_s", |
449 [])); |
465 [])); |
|
466 *} |
|
467 ML {* |
450 store_pbt |
468 store_pbt |
451 (prep_pbt thy "pbl_equsys_lin_2x2_tri" [] e_pblID |
469 (prep_pbt thy "pbl_equsys_lin_2x2_tri" [] e_pblID |
452 (["triangular", "2x2", "linear", "system"], |
470 (["triangular", "2x2", "linear", "system"], |
453 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
471 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
454 ("#Where" , |
472 ("#Where" , |
455 ["(tl v_s) from_ v_s occur_exactly_in (nth_ 1 (es_::bool list))", |
473 ["(tl v_s) from_ v_s occur_exactly_in (NTH 1 (e_s::bool list))", |
456 " v_s from_ v_s occur_exactly_in (nth_ 2 (es_::bool list))"]), |
474 " v_s from_ v_s occur_exactly_in (NTH 2 (e_s::bool list))"]), |
457 ("#Find" ,["solution ss___"]) |
475 ("#Find" ,["solution ss'''"]) |
458 ], |
476 ], |
459 prls_triangular, |
477 prls_triangular, |
460 SOME "solveSystem es_ v_s", |
478 SOME "solveSystem e_s v_s", |
461 [["EqSystem","top_down_substitution","2x2"]])); |
479 [["EqSystem","top_down_substitution","2x2"]])); |
462 store_pbt |
480 store_pbt |
463 (prep_pbt thy "pbl_equsys_lin_2x2_norm" [] e_pblID |
481 (prep_pbt thy "pbl_equsys_lin_2x2_norm" [] e_pblID |
464 (["normalize", "2x2", "linear", "system"], |
482 (["normalize", "2x2", "linear", "system"], |
465 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
483 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
466 ("#Find" ,["solution ss___"]) |
484 ("#Find" ,["solution ss'''"]) |
467 ], |
485 ], |
468 append_rls "e_rls" e_rls [(*for preds in where_*)], |
486 append_rls "e_rls" e_rls [(*for preds in where_*)], |
469 SOME "solveSystem es_ v_s", |
487 SOME "solveSystem e_s v_s", |
470 [["EqSystem","normalize","2x2"]])); |
488 [["EqSystem","normalize","2x2"]])); |
471 store_pbt |
489 store_pbt |
472 (prep_pbt thy "pbl_equsys_lin_3x3" [] e_pblID |
490 (prep_pbt thy "pbl_equsys_lin_3x3" [] e_pblID |
473 (["3x3", "linear", "system"], |
491 (["3x3", "linear", "system"], |
474 (*~~~~~~~~~~~~~~~~~~~~~~~~~*) |
492 (*~~~~~~~~~~~~~~~~~~~~~~~~~*) |
475 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
493 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
476 ("#Where" ,["length_ (es_:: bool list) = 3", "length_ v_s = 3"]), |
494 ("#Where" ,["LENGTH (e_s:: bool list) = 3", "LENGTH v_s = 3"]), |
477 ("#Find" ,["solution ss___"]) |
495 ("#Find" ,["solution ss'''"]) |
478 ], |
496 ], |
479 append_rls "prls_3x3_linear_system" e_rls |
497 append_rls "prls_3x3_linear_system" e_rls |
480 [Thm ("length_Cons_",num_str @{thm length_Cons_}), |
498 [Thm ("LENGTH_CONS",num_str @{thm LENGTH_CONS}), |
481 Thm ("length_Nil_",num_str @{thm length_Nil_}), |
499 Thm ("LENGTH_NIL",num_str @{thm LENGTH_NIL}), |
482 Calc ("op +", eval_binop "#add_"), |
500 Calc ("op +", eval_binop "#add_"), |
483 Calc ("op =",eval_equal "#equal_") |
501 Calc ("op =",eval_equal "#equal_") |
484 ], |
502 ], |
485 SOME "solveSystem es_ v_s", |
503 SOME "solveSystem e_s v_s", |
486 [])); |
504 [])); |
487 store_pbt |
505 store_pbt |
488 (prep_pbt thy "pbl_equsys_lin_4x4" [] e_pblID |
506 (prep_pbt thy "pbl_equsys_lin_4x4" [] e_pblID |
489 (["4x4", "linear", "system"], |
507 (["4x4", "linear", "system"], |
490 (*~~~~~~~~~~~~~~~~~~~~~~~~~*) |
508 (*~~~~~~~~~~~~~~~~~~~~~~~~~*) |
491 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
509 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
492 ("#Where" ,["length_ (es_:: bool list) = 4", "length_ v_s = 4"]), |
510 ("#Where" ,["LENGTH (e_s:: bool list) = 4", "LENGTH v_s = 4"]), |
493 ("#Find" ,["solution ss___"]) |
511 ("#Find" ,["solution ss'''"]) |
494 ], |
512 ], |
495 append_rls "prls_4x4_linear_system" e_rls |
513 append_rls "prls_4x4_linear_system" e_rls |
496 [Thm ("length_Cons_",num_str @{thm length_Cons_}), |
514 [Thm ("LENGTH_CONS",num_str @{thm LENGTH_CONS}), |
497 Thm ("length_Nil_",num_str @{thm length_Nil_}), |
515 Thm ("LENGTH_NIL",num_str @{thm LENGTH_NIL}), |
498 Calc ("op +", eval_binop "#add_"), |
516 Calc ("op +", eval_binop "#add_"), |
499 Calc ("op =",eval_equal "#equal_") |
517 Calc ("op =",eval_equal "#equal_") |
500 ], |
518 ], |
501 SOME "solveSystem es_ v_s", |
519 SOME "solveSystem e_s v_s", |
502 [])); |
520 [])); |
|
521 *} |
|
522 ML {* |
503 store_pbt |
523 store_pbt |
504 (prep_pbt thy "pbl_equsys_lin_4x4_tri" [] e_pblID |
524 (prep_pbt thy "pbl_equsys_lin_4x4_tri" [] e_pblID |
505 (["triangular", "4x4", "linear", "system"], |
525 (["triangular", "4x4", "linear", "system"], |
506 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
526 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
507 ("#Where" , (*accepts missing variables up to diagional form*) |
527 ("#Where" , (*accepts missing variables up to diagional form*) |
508 ["(nth_ 1 (v_s::real list)) occurs_in (nth_ 1 (es_::bool list))", |
528 ["(NTH 1 (v_s::real list)) occurs_in (NTH 1 (e_s::bool list))", |
509 "(nth_ 2 (v_s::real list)) occurs_in (nth_ 2 (es_::bool list))", |
529 "(NTH 2 (v_s::real list)) occurs_in (NTH 2 (e_s::bool list))", |
510 "(nth_ 3 (v_s::real list)) occurs_in (nth_ 3 (es_::bool list))", |
530 "(NTH 3 (v_s::real list)) occurs_in (NTH 3 (e_s::bool list))", |
511 "(nth_ 4 (v_s::real list)) occurs_in (nth_ 4 (es_::bool list))" |
531 "(NTH 4 (v_s::real list)) occurs_in (NTH 4 (e_s::bool list))" |
512 ]), |
532 ]), |
513 ("#Find" ,["solution ss___"]) |
533 ("#Find" ,["solution ss'''"]) |
514 ], |
534 ], |
515 append_rls "prls_tri_4x4_lin_sys" prls_triangular |
535 append_rls "prls_tri_4x4_lin_sys" prls_triangular |
516 [Calc ("Atools.occurs'_in",eval_occurs_in "")], |
536 [Calc ("Atools.occurs'_in",eval_occurs_in "")], |
517 SOME "solveSystem es_ v_s", |
537 SOME "solveSystem e_s v_s", |
518 [["EqSystem","top_down_substitution","4x4"]])); |
538 [["EqSystem","top_down_substitution","4x4"]])); |
519 |
539 *} |
|
540 ML {* |
520 store_pbt |
541 store_pbt |
521 (prep_pbt thy "pbl_equsys_lin_4x4_norm" [] e_pblID |
542 (prep_pbt thy "pbl_equsys_lin_4x4_norm" [] e_pblID |
522 (["normalize", "4x4", "linear", "system"], |
543 (["normalize", "4x4", "linear", "system"], |
523 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
544 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
524 (*length_ is checked 1 level above*) |
545 (*LENGTH is checked 1 level above*) |
525 ("#Find" ,["solution ss___"]) |
546 ("#Find" ,["solution ss'''"]) |
526 ], |
547 ], |
527 append_rls "e_rls" e_rls [(*for preds in where_*)], |
548 append_rls "e_rls" e_rls [(*for preds in where_*)], |
528 SOME "solveSystem es_ v_s", |
549 SOME "solveSystem e_s v_s", |
529 [["EqSystem","normalize","4x4"]])); |
550 [["EqSystem","normalize","4x4"]])); |
530 |
551 |
531 |
552 |
532 (* show_ptyps(); |
553 (* show_ptyps(); |
533 *) |
554 *) |
534 |
555 |
|
556 *} |
|
557 ML {* |
535 (** methods **) |
558 (** methods **) |
536 |
559 |
537 store_met |
560 store_met |
538 (prep_met thy "met_eqsys" [] e_metID |
561 (prep_met thy "met_eqsys" [] e_metID |
539 (["EqSystem"], |
562 (["EqSystem"], |
548 [], |
571 [], |
549 {rew_ord'="tless_true", rls' = Erls, calc = [], |
572 {rew_ord'="tless_true", rls' = Erls, calc = [], |
550 srls = Erls, prls = Erls, crls = Erls, nrls = Erls}, |
573 srls = Erls, prls = Erls, crls = Erls, nrls = Erls}, |
551 "empty_script" |
574 "empty_script" |
552 )); |
575 )); |
|
576 *} |
|
577 ML {* |
553 store_met |
578 store_met |
554 (prep_met thy "met_eqsys_topdown_2x2" [] e_metID |
579 (prep_met thy "met_eqsys_topdown_2x2" [] e_metID |
555 (["EqSystem","top_down_substitution","2x2"], |
580 (["EqSystem","top_down_substitution","2x2"], |
556 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
581 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
557 ("#Where" , |
582 ("#Where" , |
558 ["(tl v_s) from_ v_s occur_exactly_in (nth_ 1 (es_::bool list))", |
583 ["(tl v_s) from_ v_s occur_exactly_in (NTH 1 (e_s::bool list))", |
559 " v_s from_ v_s occur_exactly_in (nth_ 2 (es_::bool list))"]), |
584 " v_s from_ v_s occur_exactly_in (NTH 2 (e_s::bool list))"]), |
560 ("#Find" ,["solution ss___"]) |
585 ("#Find" ,["solution ss'''"]) |
561 ], |
586 ], |
562 {rew_ord'="ord_simplify_System", rls' = Erls, calc = [], |
587 {rew_ord'="ord_simplify_System", rls' = Erls, calc = [], |
563 srls = append_rls "srls_top_down_2x2" e_rls |
588 srls = append_rls "srls_top_down_2x2" e_rls |
564 [Thm ("hd_thm",num_str @{thm hd_thm}), |
589 [Thm ("hd_thm",num_str @{thm hd_thm}), |
565 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
590 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
566 Thm ("tl_Nil",num_str @{thm tl_Nil}) |
591 Thm ("tl_Nil",num_str @{thm tl_Nil}) |
567 ], |
592 ], |
568 prls = prls_triangular, crls = Erls, nrls = Erls}, |
593 prls = prls_triangular, crls = Erls, nrls = Erls}, |
569 "Script SolveSystemScript (es_::bool list) (v_s::real list) = " ^ |
594 "Script SolveSystemScript (e_s::bool list) (v_s::real list) = " ^ |
570 " (let e1__ = Take (hd es_); " ^ |
595 " (let e_1 = Take (hd e_s); " ^ |
571 " e1__ = ((Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
596 " e_1 = ((Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
572 " isolate_bdvs False)) @@ " ^ |
597 " isolate_bdvs False)) @@ " ^ |
573 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
598 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
574 " simplify_System False))) e1__; " ^ |
599 " simplify_System False))) e_1; " ^ |
575 " e2__ = Take (hd (tl es_)); " ^ |
600 " e_2 = Take (hd (tl e_s)); " ^ |
576 " e2__ = ((Substitute [e1__]) @@ " ^ |
601 " e_2 = ((Substitute [e_1]) @@ " ^ |
577 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
602 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
578 " simplify_System_parenthesized False)) @@ " ^ |
603 " simplify_System_parenthesized False)) @@ " ^ |
579 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
604 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
580 " isolate_bdvs False)) @@ " ^ |
605 " isolate_bdvs False)) @@ " ^ |
581 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
606 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
582 " simplify_System False))) e2__; " ^ |
607 " simplify_System False))) e_2; " ^ |
583 " es__ = Take [e1__, e2__] " ^ |
608 " e__s = Take [e_1, e_2] " ^ |
584 " in (Try (Rewrite_Set order_system False)) es__)" |
609 " in (Try (Rewrite_Set order_system False)) e__s)" |
585 (*--------------------------------------------------------------------------- |
610 (*--------------------------------------------------------------------------- |
586 this script does NOT separate the equations as abolve, |
611 this script does NOT separate the equations as above, |
587 but it does not yet work due to preliminary script-interpreter, |
612 but it does not yet work due to preliminary script-interpreter, |
588 see eqsystem.sml 'script [EqSystem,top_down_substitution,2x2] Vers.2' |
613 see eqsystem.sml 'script [EqSystem,top_down_substitution,2x2] Vers.2' |
589 |
614 |
590 "Script SolveSystemScript (es_::bool list) (v_s::real list) = " ^ |
615 "Script SolveSystemScript (e_s::bool list) (v_s::real list) = " ^ |
591 " (let es__ = Take es_; " ^ |
616 " (let e__s = Take e_s; " ^ |
592 " e1__ = hd es__; " ^ |
617 " e_1 = hd e__s; " ^ |
593 " e2__ = hd (tl es__); " ^ |
618 " e_2 = hd (tl e__s); " ^ |
594 " es__ = [e1__, Substitute [e1__] e2__] " ^ |
619 " e__s = [e_1, Substitute [e_1] e_2] " ^ |
595 " in ((Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
620 " in ((Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
596 " simplify_System_parenthesized False)) @@ " ^ |
621 " simplify_System_parenthesized False)) @@ " ^ |
597 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))] " ^ |
622 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))] " ^ |
598 " isolate_bdvs False)) @@ " ^ |
623 " isolate_bdvs False)) @@ " ^ |
599 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
624 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
600 " simplify_System False))) es__)" |
625 " simplify_System False))) e__s)" |
601 ---------------------------------------------------------------------------*) |
626 ---------------------------------------------------------------------------*) |
602 )); |
627 )); |
|
628 *} |
|
629 ML {* |
603 store_met |
630 store_met |
604 (prep_met thy "met_eqsys_norm" [] e_metID |
631 (prep_met thy "met_eqsys_norm" [] e_metID |
605 (["EqSystem","normalize"], |
632 (["EqSystem","normalize"], |
606 [], |
633 [], |
607 {rew_ord'="tless_true", rls' = Erls, calc = [], |
634 {rew_ord'="tless_true", rls' = Erls, calc = [], |
609 "empty_script" |
636 "empty_script" |
610 )); |
637 )); |
611 store_met |
638 store_met |
612 (prep_met thy "met_eqsys_norm_2x2" [] e_metID |
639 (prep_met thy "met_eqsys_norm_2x2" [] e_metID |
613 (["EqSystem","normalize","2x2"], |
640 (["EqSystem","normalize","2x2"], |
614 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
641 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
615 ("#Find" ,["solution ss___"])], |
642 ("#Find" ,["solution ss'''"])], |
616 {rew_ord'="tless_true", rls' = Erls, calc = [], |
643 {rew_ord'="tless_true", rls' = Erls, calc = [], |
617 srls = append_rls "srls_normalize_2x2" e_rls |
644 srls = append_rls "srls_normalize_2x2" e_rls |
618 [Thm ("hd_thm",num_str @{thm hd_thm}), |
645 [Thm ("hd_thm",num_str @{thm hd_thm}), |
619 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
646 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
620 Thm ("tl_Nil",num_str @{thm tl_Nil}) |
647 Thm ("tl_Nil",num_str @{thm tl_Nil}) |
621 ], |
648 ], |
622 prls = Erls, crls = Erls, nrls = Erls}, |
649 prls = Erls, crls = Erls, nrls = Erls}, |
623 "Script SolveSystemScript (es_::bool list) (v_s::real list) = " ^ |
650 "Script SolveSystemScript (e_s::bool list) (v_s::real list) = " ^ |
624 " (let es__ = ((Try (Rewrite_Set norm_Rational False)) @@ " ^ |
651 " (let e__s = ((Try (Rewrite_Set norm_Rational False)) @@ " ^ |
625 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
652 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
626 " simplify_System_parenthesized False)) @@ " ^ |
653 " simplify_System_parenthesized False)) @@ " ^ |
627 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
654 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
628 " isolate_bdvs False)) @@ " ^ |
655 " isolate_bdvs False)) @@ " ^ |
629 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
656 " (Try (Rewrite_Set_Inst [(bdv_1, hd v_s),(bdv_2, hd (tl v_s))]" ^ |
630 " simplify_System_parenthesized False)) @@ " ^ |
657 " simplify_System_parenthesized False)) @@ " ^ |
631 " (Try (Rewrite_Set order_system False))) es_ " ^ |
658 " (Try (Rewrite_Set order_system False))) e_s " ^ |
632 " in (SubProblem (EqSystem_,[linear,system],[no_met]) " ^ |
659 " in (SubProblem (EqSystem_,[linear,system],[no_met]) " ^ |
633 " [BOOL_LIST es__, REAL_LIST v_s]))" |
660 " [BOOL_LIST e__s, REAL_LIST v_s]))" |
634 )); |
661 )); |
635 |
662 |
636 (*this is for nth_ only*) |
663 (*this is for NTH only*) |
637 val srls = Rls {id="srls_normalize_4x4", |
664 val srls = Rls {id="srls_normalize_4x4", |
638 preconds = [], |
665 preconds = [], |
639 rew_ord = ("termlessI",termlessI), |
666 rew_ord = ("termlessI",termlessI), |
640 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls |
667 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls |
641 [(*for asm in nth_Cons_ ...*) |
668 [(*for asm in NTH_CONS ...*) |
642 Calc ("op <",eval_equ "#less_"), |
669 Calc ("op <",eval_equ "#less_"), |
643 (*2nd nth_Cons_ pushes n+-1 into asms*) |
670 (*2nd NTH_CONS pushes n+-1 into asms*) |
644 Calc("op +", eval_binop "#add_") |
671 Calc("op +", eval_binop "#add_") |
645 ], |
672 ], |
646 srls = Erls, calc = [], |
673 srls = Erls, calc = [], |
647 rules = [Thm ("nth_Cons_",num_str @{thm nth_Cons_}), |
674 rules = [Thm ("NTH_CONS",num_str @{thm NTH_CONS}), |
648 Calc("op +", eval_binop "#add_"), |
675 Calc("op +", eval_binop "#add_"), |
649 Thm ("nth_Nil_",num_str @{thm nth_Nil_})], |
676 Thm ("NTH_NIL",num_str @{thm NTH_NIL})], |
650 scr = EmptyScr}; |
677 scr = EmptyScr}; |
651 store_met |
678 store_met |
652 (prep_met thy "met_eqsys_norm_4x4" [] e_metID |
679 (prep_met thy "met_eqsys_norm_4x4" [] e_metID |
653 (["EqSystem","normalize","4x4"], |
680 (["EqSystem","normalize","4x4"], |
654 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
681 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
655 ("#Find" ,["solution ss___"])], |
682 ("#Find" ,["solution ss'''"])], |
656 {rew_ord'="tless_true", rls' = Erls, calc = [], |
683 {rew_ord'="tless_true", rls' = Erls, calc = [], |
657 srls = append_rls "srls_normalize_4x4" srls |
684 srls = append_rls "srls_normalize_4x4" srls |
658 [Thm ("hd_thm",num_str @{thm hd_thm}), |
685 [Thm ("hd_thm",num_str @{thm hd_thm}), |
659 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
686 Thm ("tl_Cons",num_str @{thm tl_Cons}), |
660 Thm ("tl_Nil",num_str @{thm tl_Nil}) |
687 Thm ("tl_Nil",num_str @{thm tl_Nil}) |
661 ], |
688 ], |
662 prls = Erls, crls = Erls, nrls = Erls}, |
689 prls = Erls, crls = Erls, nrls = Erls}, |
663 (*GOON met ["EqSystem","normalize","4x4"] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*) |
690 (*GOON met ["EqSystem","normalize","4x4"] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*) |
664 "Script SolveSystemScript (es_::bool list) (v_s::real list) = " ^ |
691 "Script SolveSystemScript (e_s::bool list) (v_s::real list) = " ^ |
665 " (let es__ = " ^ |
692 " (let e__s = " ^ |
666 " ((Try (Rewrite_Set norm_Rational False)) @@ " ^ |
693 " ((Try (Rewrite_Set norm_Rational False)) @@ " ^ |
667 " (Repeat (Rewrite commute_0_equality False)) @@ " ^ |
694 " (Repeat (Rewrite commute_0_equality False)) @@ " ^ |
668 " (Try (Rewrite_Set_Inst [(bdv_1, nth_ 1 v_s),(bdv_2, nth_ 2 v_s ), " ^ |
695 " (Try (Rewrite_Set_Inst [(bdv_1, NTH 1 v_s),(bdv_2, NTH 2 v_s ), " ^ |
669 " (bdv_3, nth_ 3 v_s),(bdv_3, nth_ 4 v_s )] " ^ |
696 " (bdv_3, NTH 3 v_s),(bdv_3, NTH 4 v_s )] " ^ |
670 " simplify_System_parenthesized False)) @@ " ^ |
697 " simplify_System_parenthesized False)) @@ " ^ |
671 " (Try (Rewrite_Set_Inst [(bdv_1, nth_ 1 v_s),(bdv_2, nth_ 2 v_s ), " ^ |
698 " (Try (Rewrite_Set_Inst [(bdv_1, NTH 1 v_s),(bdv_2, NTH 2 v_s ), " ^ |
672 " (bdv_3, nth_ 3 v_s),(bdv_3, nth_ 4 v_s )] " ^ |
699 " (bdv_3, NTH 3 v_s),(bdv_3, NTH 4 v_s )] " ^ |
673 " isolate_bdvs_4x4 False)) @@ " ^ |
700 " isolate_bdvs_4x4 False)) @@ " ^ |
674 " (Try (Rewrite_Set_Inst [(bdv_1, nth_ 1 v_s),(bdv_2, nth_ 2 v_s ), " ^ |
701 " (Try (Rewrite_Set_Inst [(bdv_1, NTH 1 v_s),(bdv_2, NTH 2 v_s ), " ^ |
675 " (bdv_3, nth_ 3 v_s),(bdv_3, nth_ 4 v_s )] " ^ |
702 " (bdv_3, NTH 3 v_s),(bdv_3, NTH 4 v_s )] " ^ |
676 " simplify_System_parenthesized False)) @@ " ^ |
703 " simplify_System_parenthesized False)) @@ " ^ |
677 " (Try (Rewrite_Set order_system False))) es_ " ^ |
704 " (Try (Rewrite_Set order_system False))) e_s " ^ |
678 " in (SubProblem (EqSystem_,[linear,system],[no_met]) " ^ |
705 " in (SubProblem (EqSystem_,[linear,system],[no_met]) " ^ |
679 " [BOOL_LIST es__, REAL_LIST v_s]))" |
706 " [BOOL_LIST e__s, REAL_LIST v_s]))" |
680 )); |
707 )); |
681 store_met |
708 store_met |
682 (prep_met thy "met_eqsys_topdown_4x4" [] e_metID |
709 (prep_met thy "met_eqsys_topdown_4x4" [] e_metID |
683 (["EqSystem","top_down_substitution","4x4"], |
710 (["EqSystem","top_down_substitution","4x4"], |
684 [("#Given" ,["equalities es_", "solveForVars v_s"]), |
711 [("#Given" ,["equalities e_s", "solveForVars v_s"]), |
685 ("#Where" , (*accepts missing variables up to diagonal form*) |
712 ("#Where" , (*accepts missing variables up to diagonal form*) |
686 ["(nth_ 1 (v_s::real list)) occurs_in (nth_ 1 (es_::bool list))", |
713 ["(NTH 1 (v_s::real list)) occurs_in (NTH 1 (e_s::bool list))", |
687 "(nth_ 2 (v_s::real list)) occurs_in (nth_ 2 (es_::bool list))", |
714 "(NTH 2 (v_s::real list)) occurs_in (NTH 2 (e_s::bool list))", |
688 "(nth_ 3 (v_s::real list)) occurs_in (nth_ 3 (es_::bool list))", |
715 "(NTH 3 (v_s::real list)) occurs_in (NTH 3 (e_s::bool list))", |
689 "(nth_ 4 (v_s::real list)) occurs_in (nth_ 4 (es_::bool list))" |
716 "(NTH 4 (v_s::real list)) occurs_in (NTH 4 (e_s::bool list))" |
690 ]), |
717 ]), |
691 ("#Find" ,["solution ss___"]) |
718 ("#Find" ,["solution ss'''"]) |
692 ], |
719 ], |
693 {rew_ord'="ord_simplify_System", rls' = Erls, calc = [], |
720 {rew_ord'="ord_simplify_System", rls' = Erls, calc = [], |
694 srls = append_rls "srls_top_down_4x4" srls [], |
721 srls = append_rls "srls_top_down_4x4" srls [], |
695 prls = append_rls "prls_tri_4x4_lin_sys" prls_triangular |
722 prls = append_rls "prls_tri_4x4_lin_sys" prls_triangular |
696 [Calc ("Atools.occurs'_in",eval_occurs_in "")], |
723 [Calc ("Atools.occurs'_in",eval_occurs_in "")], |
697 crls = Erls, nrls = Erls}, |
724 crls = Erls, nrls = Erls}, |
698 (*FIXXXXME.WN060916: this script works ONLY for exp 7.79 @@@@@@@@@@@@@@@@@@@@*) |
725 (*FIXXXXME.WN060916: this script works ONLY for exp 7.79 @@@@@@@@@@@@@@@@@@@@*) |
699 "Script SolveSystemScript (es_::bool list) (v_s::real list) = " ^ |
726 "Script SolveSystemScript (e_s::bool list) (v_s::real list) = " ^ |
700 " (let e1_ = nth_ 1 es_; " ^ |
727 " (let e_1 = NTH 1 e_s; " ^ |
701 " e2_ = Take (nth_ 2 es_); " ^ |
728 " e_2 = Take (NTH 2 e_s); " ^ |
702 " e2_ = ((Substitute [e1_]) @@ " ^ |
729 " e_2 = ((Substitute [e_1]) @@ " ^ |
703 " (Try (Rewrite_Set_Inst [(bdv_1,nth_ 1 v_s),(bdv_2,nth_ 2 v_s)," ^ |
730 " (Try (Rewrite_Set_Inst [(bdv_1,NTH 1 v_s),(bdv_2,NTH 2 v_s)," ^ |
704 " (bdv_3,nth_ 3 v_s),(bdv_4,nth_ 4 v_s)]" ^ |
731 " (bdv_3,NTH 3 v_s),(bdv_4,NTH 4 v_s)]" ^ |
705 " simplify_System_parenthesized False)) @@ " ^ |
732 " simplify_System_parenthesized False)) @@ " ^ |
706 " (Try (Rewrite_Set_Inst [(bdv_1,nth_ 1 v_s),(bdv_2,nth_ 2 v_s)," ^ |
733 " (Try (Rewrite_Set_Inst [(bdv_1,NTH 1 v_s),(bdv_2,NTH 2 v_s)," ^ |
707 " (bdv_3,nth_ 3 v_s),(bdv_4,nth_ 4 v_s)]" ^ |
734 " (bdv_3,NTH 3 v_s),(bdv_4,NTH 4 v_s)]" ^ |
708 " isolate_bdvs False)) @@ " ^ |
735 " isolate_bdvs False)) @@ " ^ |
709 " (Try (Rewrite_Set_Inst [(bdv_1,nth_ 1 v_s),(bdv_2,nth_ 2 v_s)," ^ |
736 " (Try (Rewrite_Set_Inst [(bdv_1,NTH 1 v_s),(bdv_2,NTH 2 v_s)," ^ |
710 " (bdv_3,nth_ 3 v_s),(bdv_4,nth_ 4 v_s)]" ^ |
737 " (bdv_3,NTH 3 v_s),(bdv_4,NTH 4 v_s)]" ^ |
711 " norm_Rational False))) e2_ " ^ |
738 " norm_Rational False))) e_2 " ^ |
712 " in [e1_, e2_, nth_ 3 es_, nth_ 4 es_])" |
739 " in [e_1, e_2, NTH 3 e_s, NTH 4 e_s])" |
713 )); |
740 )); |
714 *} |
741 *} |
715 |
742 |
716 end |
743 end |