83 lines |> is_only_type_information t ? map (replace_dependencies_in_line (name, [])) |
83 lines |> is_only_type_information t ? map (replace_dependencies_in_line (name, [])) |
84 else |
84 else |
85 map (replace_dependencies_in_line (name, [])) lines |
85 map (replace_dependencies_in_line (name, [])) lines |
86 | add_line_pass1 line lines = line :: lines |
86 | add_line_pass1 line lines = line :: lines |
87 |
87 |
88 (* Recursively delete empty lines (type information) from the proof. |
88 fun add_lines_pass2 res [] = rev res |
89 (FIXME: needed? And why is "delete_dependency" so complicated?) *) |
89 | add_lines_pass2 res ((name, role, t, rule, deps) :: lines) = |
90 fun add_line_pass2 (line as (name, _, t, _, [])) lines = |
|
91 if is_only_type_information t then delete_dependency name lines else line :: lines |
|
92 | add_line_pass2 line lines = line :: lines |
|
93 and delete_dependency name lines = |
|
94 fold_rev add_line_pass2 (map (replace_dependencies_in_line (name, [])) lines) [] |
|
95 |
|
96 fun add_lines_pass3 res [] = rev res |
|
97 | add_lines_pass3 res ((name, role, t, rule, deps) :: lines) = |
|
98 let |
90 let |
99 val is_last_line = null lines |
91 val is_last_line = null lines |
100 |
92 |
101 fun looks_interesting () = |
93 fun looks_interesting () = |
102 not (is_only_type_information t) andalso null (Term.add_tvars t []) |
94 not (is_only_type_information t) andalso null (Term.add_tvars t []) |
107 fun is_before_skolemize_rule () = exists is_skolemizing_line lines |
99 fun is_before_skolemize_rule () = exists is_skolemizing_line lines |
108 in |
100 in |
109 if role <> Plain orelse is_skolemize_rule rule orelse is_arith_rule rule orelse |
101 if role <> Plain orelse is_skolemize_rule rule orelse is_arith_rule rule orelse |
110 is_datatype_rule rule orelse is_last_line orelse looks_interesting () orelse |
102 is_datatype_rule rule orelse is_last_line orelse looks_interesting () orelse |
111 is_before_skolemize_rule () then |
103 is_before_skolemize_rule () then |
112 add_lines_pass3 ((name, role, t, rule, deps) :: res) lines |
104 add_lines_pass2 ((name, role, t, rule, deps) :: res) lines |
113 else |
105 else |
114 add_lines_pass3 res (map (replace_dependencies_in_line (name, deps)) lines) |
106 add_lines_pass2 res (map (replace_dependencies_in_line (name, deps)) lines) |
115 end |
107 end |
116 |
108 |
117 val add_labels_of_proof = |
109 val add_labels_of_proof = |
118 steps_of_proof |
110 steps_of_proof |
119 #> fold_isar_steps (byline_of_step #> (fn SOME ((ls, _), _) => union (op =) ls | _ => I)) |
111 #> fold_isar_steps (byline_of_step #> (fn SOME ((ls, _), _) => union (op =) ls | _ => I)) |
235 if keep_role role then SOME ((raw_label_of_num num, t), rule) else NONE |
227 if keep_role role then SOME ((raw_label_of_num num, t), rule) else NONE |
236 |
228 |
237 val atp_proof = |
229 val atp_proof = |
238 atp_proof |
230 atp_proof |
239 |> rpair [] |-> fold_rev add_line_pass1 |
231 |> rpair [] |-> fold_rev add_line_pass1 |
240 |> rpair [] |-> fold_rev add_line_pass2 |
232 |> add_lines_pass2 [] |
241 |> add_lines_pass3 [] |
|
242 |
233 |
243 val conjs = |
234 val conjs = |
244 map_filter (fn (name, role, _, _, _) => |
235 map_filter (fn (name, role, _, _, _) => |
245 if member (op =) [Conjecture, Negated_Conjecture] role then SOME name else NONE) |
236 if member (op =) [Conjecture, Negated_Conjecture] role then SOME name else NONE) |
246 atp_proof |
237 atp_proof |