changeset 62219 | dbac573b27e7 |
parent 61330 | 20af2ad9261e |
child 62505 | 9e2a65912111 |
62218:42202671777c | 62219:dbac573b27e7 |
---|---|
61 |> the_default unknownN |
61 |> the_default unknownN |
62 |
62 |
63 fun is_metis_method (Metis_Method _) = true |
63 fun is_metis_method (Metis_Method _) = true |
64 | is_metis_method _ = false |
64 | is_metis_method _ = false |
65 |
65 |
66 fun add_chained [] t = t |
|
67 | add_chained chained ((t as Const (@{const_name Pure.all}, _)) $ Abs (s, T, u)) = |
|
68 t $ Abs (s, T, add_chained chained u) |
|
69 | add_chained chained t = Logic.list_implies (chained, t) |
|
70 |
|
71 fun play_one_line_proof minimize timeout used_facts0 state i (preferred_meth, methss) = |
66 fun play_one_line_proof minimize timeout used_facts0 state i (preferred_meth, methss) = |
72 let val used_facts = filter_out (fn (_, (sc, _)) => sc = Chained) used_facts0 in |
67 let val used_facts = filter_out (fn (_, (sc, _)) => sc = Chained) used_facts0 in |
73 if timeout = Time.zeroTime then |
68 if timeout = Time.zeroTime then |
74 (used_facts, (preferred_meth, Play_Timed_Out Time.zeroTime)) |
69 (used_facts, (preferred_meth, Play_Timed_Out Time.zeroTime)) |
75 else |
70 else |
77 val ctxt = Proof.context_of state |
72 val ctxt = Proof.context_of state |
78 |
73 |
79 val fact_names = map fst used_facts |
74 val fact_names = map fst used_facts |
80 val {facts = chained, goal, ...} = Proof.goal state |
75 val {facts = chained, goal, ...} = Proof.goal state |
81 val goal_t = Logic.get_goal (Thm.prop_of goal) i |
76 val goal_t = Logic.get_goal (Thm.prop_of goal) i |
82 |> add_chained (map (Thm.prop_of o forall_intr_vars) chained) |
|
83 |
77 |
84 fun try_methss [] [] = (used_facts, (preferred_meth, Play_Timed_Out Time.zeroTime)) |
78 fun try_methss [] [] = (used_facts, (preferred_meth, Play_Timed_Out Time.zeroTime)) |
85 | try_methss ress [] = |
79 | try_methss ress [] = |
86 (used_facts, |
80 (used_facts, |
87 (case AList.lookup (op =) ress preferred_meth of |
81 (case AList.lookup (op =) ress preferred_meth of |
90 | try_methss ress (meths :: methss) = |
84 | try_methss ress (meths :: methss) = |
91 let |
85 let |
92 fun mk_step fact_names meths = |
86 fun mk_step fact_names meths = |
93 Prove ([], [], ("", 0), goal_t, [], ([], fact_names), meths, "") |
87 Prove ([], [], ("", 0), goal_t, [], ([], fact_names), meths, "") |
94 in |
88 in |
95 (case preplay_isar_step ctxt timeout [] (mk_step fact_names meths) of |
89 (case preplay_isar_step ctxt chained timeout [] (mk_step fact_names meths) of |
96 (res as (meth, Played time)) :: _ => |
90 (res as (meth, Played time)) :: _ => |
97 (* if a fact is needed by an ATP, it will be needed by "metis" *) |
91 (* if a fact is needed by an ATP, it will be needed by "metis" *) |
98 if not minimize orelse is_metis_method meth then |
92 if not minimize orelse is_metis_method meth then |
99 (used_facts, res) |
93 (used_facts, res) |
100 else |
94 else |