fixed explosion when computing accessibility
authorblanchet
Fri, 20 Jul 2012 22:19:45 +0200
changeset 493924a11914fd530
parent 49391 416e4123baf3
child 49393 9e96486d53ad
fixed explosion when computing accessibility
src/HOL/Tools/Sledgehammer/sledgehammer_filter_mash.ML
     1.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_filter_mash.ML	Fri Jul 20 22:19:45 2012 +0200
     1.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_filter_mash.ML	Fri Jul 20 22:19:45 2012 +0200
     1.3 @@ -470,16 +470,17 @@
     1.4    let
     1.5      val facts = [] |> fold (cons o Thm.get_name_hint o snd) facts
     1.6      val tab = Symtab.empty |> fold (fn name => Symtab.update (name, ())) facts
     1.7 -    fun insert_not_parent parents name =
     1.8 -      not (member (op =) parents name) ? insert (op =) name
     1.9 -    fun parents_of parents [] = parents
    1.10 -      | parents_of parents (name :: names) =
    1.11 +    fun insert_not_seen seen name =
    1.12 +      not (member (op =) seen name) ? insert (op =) name
    1.13 +    fun parents_of seen parents [] = parents
    1.14 +      | parents_of seen parents (name :: names) =
    1.15          if Symtab.defined tab name then
    1.16 -          parents_of (name :: parents) names
    1.17 +          parents_of (name :: seen) (name :: parents) names
    1.18          else
    1.19 -          parents_of parents (Graph.Keys.fold (insert_not_parent parents)
    1.20 -                                  (Graph.imm_preds fact_graph name) names)
    1.21 -  in parents_of [] (Graph.maximals fact_graph) end
    1.22 +          parents_of (name :: seen) parents
    1.23 +                     (Graph.Keys.fold (insert_not_seen seen)
    1.24 +                                      (Graph.imm_preds fact_graph name) names)
    1.25 +  in parents_of [] [] (Graph.maximals fact_graph) end
    1.26  
    1.27  (* Generate more suggestions than requested, because some might be thrown out
    1.28     later for various reasons and "meshing" gives better results with some