equal
deleted
inserted
replaced
48 -> string list * (string * real) list * string list -> string list |
48 -> string list * (string * real) list * string list -> string list |
49 end |
49 end |
50 |
50 |
51 val mash_unlearn : Proof.context -> unit |
51 val mash_unlearn : Proof.context -> unit |
52 val nickname_of_thm : thm -> string |
52 val nickname_of_thm : thm -> string |
53 val find_suggested_facts : ('b * thm) list -> string list -> ('b * thm) list |
53 val find_suggested_facts : |
|
54 Proof.context -> ('b * thm) list -> string list -> ('b * thm) list |
54 val mesh_facts : |
55 val mesh_facts : |
55 ('a * 'a -> bool) -> int -> (real * (('a * real) list * 'a list)) list |
56 ('a * 'a -> bool) -> int -> (real * (('a * real) list * 'a list)) list |
56 -> 'a list |
57 -> 'a list |
57 val theory_ord : theory * theory -> order |
58 val theory_ord : theory * theory -> order |
58 val thm_ord : thm * thm -> order |
59 val thm_ord : thm * thm -> order |
70 -> string Symtab.table * string Symtab.table -> thm |
71 -> string Symtab.table * string Symtab.table -> thm |
71 -> bool * string list |
72 -> bool * string list |
72 val weight_mepo_facts : 'a list -> ('a * real) list |
73 val weight_mepo_facts : 'a list -> ('a * real) list |
73 val weight_mash_facts : 'a list -> ('a * real) list |
74 val weight_mash_facts : 'a list -> ('a * real) list |
74 val find_mash_suggestions : |
75 val find_mash_suggestions : |
75 int -> string list -> ('b * thm) list -> ('b * thm) list -> ('b * thm) list |
76 Proof.context -> int -> string list -> ('b * thm) list -> ('b * thm) list |
76 -> ('b * thm) list * ('b * thm) list |
77 -> ('b * thm) list -> ('b * thm) list * ('b * thm) list |
77 val mash_suggested_facts : |
78 val mash_suggested_facts : |
78 Proof.context -> params -> string -> int -> term list -> term |
79 Proof.context -> params -> string -> int -> term list -> term |
79 -> raw_fact list -> fact list * fact list |
80 -> raw_fact list -> fact list * fact list |
80 val mash_learn_proof : |
81 val mash_learn_proof : |
81 Proof.context -> params -> string -> term -> ('a * thm) list -> thm list |
82 Proof.context -> params -> string -> term -> ('a * thm) list -> thm list |
448 | NONE => hint |
449 | NONE => hint |
449 end |
450 end |
450 else |
451 else |
451 elided_backquote_thm 200 th |
452 elided_backquote_thm 200 th |
452 |
453 |
453 fun find_suggested_facts facts = |
454 fun find_suggested_facts ctxt facts = |
454 let |
455 let |
455 fun add_fact (fact as (_, th)) = Symtab.default (nickname_of_thm th, fact) |
456 fun add (fact as (_, th)) = Symtab.default (nickname_of_thm th, fact) |
456 val tab = fold add_fact facts Symtab.empty |
457 val tab = fold add facts Symtab.empty |
457 in map_filter (Symtab.lookup tab) end |
458 fun lookup nick = |
|
459 Symtab.lookup tab nick |
|
460 |> tap (fn NONE => trace_msg ctxt (fn () => "Cannot find " ^ quote nick) |
|
461 | _ => ()) |
|
462 in map_filter lookup end |
458 |
463 |
459 fun scaled_avg [] = 0 |
464 fun scaled_avg [] = 0 |
460 | scaled_avg xs = |
465 | scaled_avg xs = |
461 Real.ceil (100000000.0 * fold (curry (op +)) xs 0.0) div length xs |
466 Real.ceil (100000000.0 * fold (curry (op +)) xs 0.0) div length xs |
462 |
467 |
787 fun weight_proximity_facts facts = |
792 fun weight_proximity_facts facts = |
788 facts ~~ map weight_of_proximity_fact (0 upto length facts - 1) |
793 facts ~~ map weight_of_proximity_fact (0 upto length facts - 1) |
789 |
794 |
790 val max_proximity_facts = 100 |
795 val max_proximity_facts = 100 |
791 |
796 |
792 fun find_mash_suggestions _ [] _ _ raw_unknown = ([], raw_unknown) |
797 fun find_mash_suggestions _ _ [] _ _ raw_unknown = ([], raw_unknown) |
793 | find_mash_suggestions max_facts suggs facts chained raw_unknown = |
798 | find_mash_suggestions ctxt max_facts suggs facts chained raw_unknown = |
794 let |
799 let |
795 val raw_mash = find_suggested_facts facts suggs |
800 val raw_mash = find_suggested_facts ctxt facts suggs |
796 val unknown_chained = |
801 val unknown_chained = |
797 inter (Thm.eq_thm_prop o pairself snd) chained raw_unknown |
802 inter (Thm.eq_thm_prop o pairself snd) chained raw_unknown |
798 val proximity = |
803 val proximity = |
799 facts |> sort (thm_ord o pairself snd o swap) |
804 facts |> sort (thm_ord o pairself snd o swap) |
800 |> take max_proximity_facts |
805 |> take max_proximity_facts |
829 (access_G, MaSh.query ctxt overlord learn max_facts |
834 (access_G, MaSh.query ctxt overlord learn max_facts |
830 (parents, feats, hints)) |
835 (parents, feats, hints)) |
831 end) |
836 end) |
832 val unknown = facts |> filter_out (is_fact_in_graph access_G snd) |
837 val unknown = facts |> filter_out (is_fact_in_graph access_G snd) |
833 in |
838 in |
834 find_mash_suggestions max_facts suggs facts chained unknown |
839 find_mash_suggestions ctxt max_facts suggs facts chained unknown |
835 |> pairself (map fact_of_raw_fact) |
840 |> pairself (map fact_of_raw_fact) |
836 end |
841 end |
837 |
842 |
838 fun learn_wrt_access_graph ctxt (name, parents, feats, deps) (learns, graph) = |
843 fun learn_wrt_access_graph ctxt (name, parents, feats, deps) (learns, graph) = |
839 let |
844 let |