110 |
110 |
111 fun generate_isar_or_prover_dependencies ctxt params_opt thys include_thys |
111 fun generate_isar_or_prover_dependencies ctxt params_opt thys include_thys |
112 file_name = |
112 file_name = |
113 let |
113 let |
114 val path = file_name |> Path.explode |
114 val path = file_name |> Path.explode |
115 val _ = File.write path "" |
|
116 val facts = |
115 val facts = |
117 all_facts ctxt |> not include_thys ? filter_out (has_thys thys o snd) |
116 all_facts ctxt |> not include_thys ? filter_out (has_thys thys o snd) |
118 val all_names = build_all_names nickname_of facts |
117 val all_names = build_all_names nickname_of facts |
119 fun do_fact (_, th) = |
118 fun do_fact (_, th) = |
120 let |
119 let |
121 val name = nickname_of th |
120 val name = nickname_of th |
122 val deps = |
121 val deps = |
123 isar_or_prover_dependencies_of ctxt params_opt facts all_names th NONE |
122 isar_or_prover_dependencies_of ctxt params_opt facts all_names th NONE |
124 val s = escape_meta name ^ ": " ^ escape_metas deps ^ "\n" |
123 in escape_meta name ^ ": " ^ escape_metas deps ^ "\n" end |
125 in File.append path s end |
124 val lines = Par_List.map do_fact facts |
126 in List.app do_fact facts end |
125 in File.write_list path lines end |
127 |
126 |
128 fun generate_isar_dependencies ctxt = |
127 fun generate_isar_dependencies ctxt = |
129 generate_isar_or_prover_dependencies ctxt NONE |
128 generate_isar_or_prover_dependencies ctxt NONE |
130 |
129 |
131 fun generate_prover_dependencies ctxt params = |
130 fun generate_prover_dependencies ctxt params = |
138 |
137 |
139 fun generate_isar_or_prover_commands ctxt prover params_opt thys file_name = |
138 fun generate_isar_or_prover_commands ctxt prover params_opt thys file_name = |
140 let |
139 let |
141 val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover |
140 val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover |
142 val path = file_name |> Path.explode |
141 val path = file_name |> Path.explode |
143 val _ = File.write path "" |
|
144 val facts = all_facts ctxt |
142 val facts = all_facts ctxt |
145 val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd) |
143 val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd) |
146 val all_names = build_all_names nickname_of facts |
144 val all_names = build_all_names nickname_of facts |
147 fun do_fact ((_, stature), th) prevs = |
145 fun do_fact ((name, ((_, stature), th)), prevs) = |
148 let |
146 let |
149 val name = nickname_of th |
|
150 val feats = |
147 val feats = |
151 features_of ctxt prover (theory_of_thm th) stature [prop_of th] |
148 features_of ctxt prover (theory_of_thm th) stature [prop_of th] |
152 val isar_deps = isar_dependencies_of all_names th |
149 val isar_deps = isar_dependencies_of all_names th |
153 val deps = |
150 val deps = |
154 isar_or_prover_dependencies_of ctxt params_opt facts all_names th |
151 isar_or_prover_dependencies_of ctxt params_opt facts all_names th |
158 encode_features feats |
155 encode_features feats |
159 val query = |
156 val query = |
160 if is_bad_query ctxt ho_atp th (these isar_deps) then "" |
157 if is_bad_query ctxt ho_atp th (these isar_deps) then "" |
161 else "? " ^ core ^ "\n" |
158 else "? " ^ core ^ "\n" |
162 val update = "! " ^ core ^ "; " ^ escape_metas deps ^ "\n" |
159 val update = "! " ^ core ^ "; " ^ escape_metas deps ^ "\n" |
163 val _ = File.append path (query ^ update) |
160 in query ^ update end |
164 in [name] end |
|
165 val thy_map = old_facts |> thy_map_from_facts |
161 val thy_map = old_facts |> thy_map_from_facts |
166 val parents = fold (add_thy_parent_facts thy_map) thys [] |
162 val parents = fold (add_thy_parent_facts thy_map) thys [] |
167 in fold do_fact new_facts parents; () end |
163 val new_facts = new_facts |> map (`(nickname_of o snd)) |
|
164 val prevss = fst (split_last (parents :: map (single o fst) new_facts)) |
|
165 val lines = Par_List.map do_fact (new_facts ~~ prevss) |
|
166 in File.write_list path lines end |
168 |
167 |
169 fun generate_isar_commands ctxt prover = |
168 fun generate_isar_commands ctxt prover = |
170 generate_isar_or_prover_commands ctxt prover NONE |
169 generate_isar_or_prover_commands ctxt prover NONE |
171 |
170 |
172 fun generate_prover_commands ctxt (params as {provers = prover :: _, ...}) = |
171 fun generate_prover_commands ctxt (params as {provers = prover :: _, ...}) = |
175 fun generate_mepo_suggestions ctxt (params as {provers = prover :: _, ...}) thys |
174 fun generate_mepo_suggestions ctxt (params as {provers = prover :: _, ...}) thys |
176 max_facts file_name = |
175 max_facts file_name = |
177 let |
176 let |
178 val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover |
177 val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover |
179 val path = file_name |> Path.explode |
178 val path = file_name |> Path.explode |
180 val _ = File.write path "" |
|
181 val facts = all_facts ctxt |
179 val facts = all_facts ctxt |
182 val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd) |
180 val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd) |
183 val all_names = build_all_names nickname_of facts |
181 val all_names = build_all_names nickname_of facts |
184 fun do_fact (fact as (_, th)) old_facts = |
182 fun do_fact (fact as (_, th), old_facts) = |
185 let |
183 let |
186 val name = nickname_of th |
184 val name = nickname_of th |
187 val goal = goal_of_thm (Proof_Context.theory_of ctxt) th |
185 val goal = goal_of_thm (Proof_Context.theory_of ctxt) th |
188 val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal 1 |
186 val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal 1 |
189 val isar_deps = isar_dependencies_of all_names th |
187 val isar_deps = isar_dependencies_of all_names th |
190 val _ = |
188 in |
191 if is_bad_query ctxt ho_atp th (these isar_deps) then |
189 if is_bad_query ctxt ho_atp th (these isar_deps) then |
192 () |
190 "" |
193 else |
191 else |
194 let |
192 let |
195 val suggs = |
193 val suggs = |
196 old_facts |
194 old_facts |
197 |> Sledgehammer_MePo.mepo_suggested_facts ctxt params prover |
195 |> Sledgehammer_MePo.mepo_suggested_facts ctxt params prover |
198 max_facts NONE hyp_ts concl_t |
196 max_facts NONE hyp_ts concl_t |
199 |> map (nickname_of o snd) |
197 |> map (nickname_of o snd) |
200 val s = escape_meta name ^ ": " ^ escape_metas suggs ^ "\n" |
198 in escape_meta name ^ ": " ^ escape_metas suggs ^ "\n" end |
201 in File.append path s end |
199 end |
202 in fact :: old_facts end |
200 fun accum x (yss as ys :: _) = (x :: ys) :: yss |
203 in fold do_fact new_facts old_facts; () end |
201 val old_factss = tl (fold accum new_facts [old_facts]) |
|
202 val lines = Par_List.map do_fact (new_facts ~~ rev old_factss) |
|
203 in File.write_list path lines end |
204 |
204 |
205 end; |
205 end; |