src/Tools/isac/Knowledge/Rational.thy
changeset 52103 0d13f07d8e2a
parent 52101 c3f399ce32af
child 52105 2786cc9704c8
     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) =>