tolerate Var in rewriting
authorWalther Neuper <neuper@ist.tugraz.at>
Mon, 16 Sep 2013 10:46:51 +0200
changeset 521030d13f07d8e2a
parent 52102 cd5494eb08fd
child 52104 83166e7c7e52
tolerate Var in rewriting
src/Tools/isac/Knowledge/Rational.thy
src/Tools/isac/ProgLang/termC.sml
test/Tools/isac/Knowledge/partial_fractions.sml
     1.1 --- a/src/Tools/isac/Knowledge/Rational.thy	Fri Sep 13 18:57:11 2013 +0200
     1.2 +++ b/src/Tools/isac/Knowledge/Rational.thy	Mon Sep 16 10:46:51 2013 +0200
     1.3 @@ -112,7 +112,9 @@
     1.4        handle ERROR _ => NONE)
     1.5  
     1.6  fun is_poly t =
     1.7 -  let val vs = t |> vars |> map free2str |> sort string_ord
     1.8 +  let 
     1.9 +    val vs = t |> vars |> map str_of_free_opt (* tolerate Var in simplification *)
    1.10 +      |> filter is_some |> map the |> sort string_ord
    1.11    in 
    1.12      case poly_of_term vs t of SOME _ => true | NONE => false
    1.13    end
    1.14 @@ -310,7 +312,8 @@
    1.15        NONE => NONE
    1.16      | SOME (numerator, denominator) =>
    1.17        let 
    1.18 -        val vs = t |> vars |> map free2str |> sort string_ord
    1.19 +        val vs = t |> vars |> map str_of_free_opt (* tolerate Var in simplification *)
    1.20 +          |> filter is_some |> map the |> sort string_ord
    1.21          val baseT = type_of numerator
    1.22          val expT = HOLogic.realT
    1.23        in
    1.24 @@ -353,7 +356,8 @@
    1.25        NONE => NONE
    1.26      | SOME (numerator, denominator) =>
    1.27        let 
    1.28 -        val vs = t |> vars |> map free2str |> sort string_ord
    1.29 +        val vs = t |> vars |> map str_of_free_opt (* tolerate Var in simplification *)
    1.30 +          |> filter is_some |> map the |> sort string_ord
    1.31          val baseT = type_of numerator
    1.32          val expT = HOLogic.realT
    1.33        in
    1.34 @@ -405,7 +409,9 @@
    1.35      case opt of 
    1.36        NONE => NONE
    1.37      | SOME ((n1, d1), (n2, d2)) =>
    1.38 -      let val vs = t |> vars |> map free2str |> sort string_ord
    1.39 +      let 
    1.40 +        val vs = t |> vars |> map str_of_free_opt (* tolerate Var in simplification *)
    1.41 +          |> filter is_some |> map the |> sort string_ord
    1.42        in
    1.43          case (poly_of_term vs d1, poly_of_term vs d2) of
    1.44            (SOME a, SOME b) =>
    1.45 @@ -442,7 +448,8 @@
    1.46      NONE => NONE
    1.47    | SOME ((n1, d1), (n2, d2)) =>
    1.48      let 
    1.49 -      val vs = t |> vars |> map free2str |> sort string_ord
    1.50 +      val vs = t |> vars |> map str_of_free_opt (* tolerate Var in simplification *)
    1.51 +        |> filter is_some |> map the |> sort string_ord
    1.52      in
    1.53        case (poly_of_term vs n1, poly_of_term vs d1, poly_of_term vs n2, poly_of_term vs d2) of
    1.54          (SOME _, SOME a, SOME _, SOME b) =>
     2.1 --- a/src/Tools/isac/ProgLang/termC.sml	Fri Sep 13 18:57:11 2013 +0200
     2.2 +++ b/src/Tools/isac/ProgLang/termC.sml	Mon Sep 16 10:46:51 2013 +0200
     2.3 @@ -261,6 +261,8 @@
     2.4  
     2.5  fun free2str (Free (s,_)) = s
     2.6    | free2str t = error ("free2str not for "^ term2str t);
     2.7 +fun str_of_free_opt (Free (s,_)) = SOME s
     2.8 +  | str_of_free_opt _ = NONE
     2.9  fun free2int (t as Free (s, _)) = ((str2int s)
    2.10      handle _ => error ("free2int: "^term_detail2str t))
    2.11    | free2int t = error ("free2int: "^term_detail2str t);
     3.1 --- a/test/Tools/isac/Knowledge/partial_fractions.sml	Fri Sep 13 18:57:11 2013 +0200
     3.2 +++ b/test/Tools/isac/Knowledge/partial_fractions.sml	Mon Sep 16 10:46:51 2013 +0200
     3.3 @@ -322,9 +322,9 @@
     3.4  term2str t'' = "(z - 1 / 2) * (z - -1 / 4) * 3 / ((-1 + -2 * z + 8 * z ^^^ 2) * 3 / 24) =\n" ^
     3.5    "?A * (z - -1 / 4) + ?B * (z - 1 / 2)"; (*true*)
     3.6  
     3.7 -val SOME (t''', _) = rewrite_set_ @{theory Isac} true norm_Rational t'';
     3.8 -if term2str t''' = "3 = ?A * (1 + 4 * z) / 4 + ?B * (-1 + 2 * z) / 2" then ()
     3.9 -else error "ansatz_rls - multiply_ansatz - norm_Rational broken";
    3.10 +val SOME (t''', _) = rewrite_set_ @{theory Isac} true norm_Rational t''; 
    3.11 +if term2str t''' = "3 = ?A * (1 + 4 * z) / 4 + ?B * (-1 + 2 * z) / 2" then () 
    3.12 +else error "ansatz_rls - multiply_ansatz - norm_Rational broken"; 
    3.13  
    3.14  (*test for outcommented 3 lines in script: empower erls for x = a*b ==> ...*)
    3.15  val xxx = append_rls "multiply_ansatz_erls" norm_Rational