src/HOL/Tools/ATP/atp_proof.ML
changeset 45235 7187bce94e88
parent 45209 0e5e56e32bc0
child 45301 866b075aa99b
equal deleted inserted replaced
45234:5509362b924b 45235:7187bce94e88
   245   $$ "'" |-- Scan.repeat (~$$ "'") --| $$ "'"
   245   $$ "'" |-- Scan.repeat (~$$ "'") --| $$ "'"
   246      >> implode >> repair_waldmeister_step_name
   246      >> implode >> repair_waldmeister_step_name
   247   || Scan.repeat ($$ "$") -- Scan.many1 Symbol.is_letdig
   247   || Scan.repeat ($$ "$") -- Scan.many1 Symbol.is_letdig
   248      >> (fn (ss1, ss2) => implode ss1 ^ implode ss2)
   248      >> (fn (ss1, ss2) => implode ss1 ^ implode ss2)
   249 
   249 
   250 val dummy_phi = AAtom (ATerm ("", []))
   250 val skip_term =
   251 
       
   252 fun skip_formula ss =
       
   253   let
   251   let
   254     fun skip _ [] = []
   252     fun skip _ accum [] = (accum, [])
   255       | skip 0 (ss as "," :: _) = ss
   253       | skip 0 accum (ss as "," :: _) = (accum, ss)
   256       | skip 0 (ss as ")" :: _) = ss
   254       | skip 0 accum (ss as ")" :: _) = (accum, ss)
   257       | skip 0 (ss as "]" :: _) = ss
   255       | skip 0 accum (ss as "]" :: _) = (accum, ss)
   258       | skip n ("(" :: ss) = skip (n + 1) ss
   256       | skip n accum ((s as "(") :: ss) = skip (n + 1) (s :: accum) ss
   259       | skip n ("[" :: ss) = skip (n + 1) ss
   257       | skip n accum ((s as "[") :: ss) = skip (n + 1) (s :: accum) ss
   260       | skip n ("]" :: ss) = skip (n - 1) ss
   258       | skip n accum ((s as "]") :: ss) = skip (n - 1) (s :: accum) ss
   261       | skip n (")" :: ss) = skip (n - 1) ss
   259       | skip n accum ((s as ")") :: ss) = skip (n - 1) (s :: accum) ss
   262       | skip n (_ :: ss) = skip n ss
   260       | skip n accum (s :: ss) = skip n (s :: accum) ss
   263   in (dummy_phi, skip 0 ss) end
   261   in skip 0 [] #>> (rev #> implode) end
   264 
   262 
   265 datatype source =
   263 datatype source =
   266   File_Source of string * string option |
   264   File_Source of string * string option |
   267   Inference_Source of string * string list
   265   Inference_Source of string * string list
   268 
   266 
   269 fun parse_dependencies x =
   267 val dummy_phi = AAtom (ATerm ("", []))
   270   (scan_general_id ::: Scan.repeat ($$ "," |-- scan_general_id)) x
   268 val dummy_inference = Inference_Source ("", [])
       
   269 
       
   270 fun parse_dependencies x = (skip_term ::: Scan.repeat ($$ "," |-- skip_term)) x
   271 
   271 
   272 fun parse_source x =
   272 fun parse_source x =
   273   (Scan.this_string "file" |-- $$ "(" |-- scan_general_id --
   273   (Scan.this_string "file" |-- $$ "(" |-- scan_general_id --
   274      Scan.option ($$ "," |-- scan_general_id) --| $$ ")"
   274      Scan.option ($$ "," |-- scan_general_id) --| $$ ")"
   275      >> File_Source
   275      >> File_Source
   276    || Scan.this_string "inference" |-- $$ "(" |-- scan_general_id
   276    || Scan.this_string "inference" |-- $$ "(" |-- scan_general_id
   277         --| skip_formula --| $$ "," --| skip_formula --| $$ "," --| $$ "["
   277         --| skip_term --| $$ "," --| skip_term --| $$ "," --| $$ "["
   278         -- parse_dependencies --| $$ "]" --| $$ ")"
   278         -- parse_dependencies --| $$ "]" --| $$ ")"
   279        >> Inference_Source) x
   279        >> Inference_Source
       
   280    || skip_term >> K dummy_inference) x
   280 
   281 
   281 fun list_app (f, args) =
   282 fun list_app (f, args) =
   282   fold (fn arg => fn f => ATerm (tptp_app, [f, arg])) args f
   283   fold (fn arg => fn f => ATerm (tptp_app, [f, arg])) args f
   283 
   284 
   284 (* We ignore TFF and THF types for now. *)
   285 (* We ignore TFF and THF types for now. *)
   343    >> (fn ((q, ts), phi) =>
   344    >> (fn ((q, ts), phi) =>
   344           (* We ignore TFF and THF types for now. *)
   345           (* We ignore TFF and THF types for now. *)
   345           AQuant (q, map (rpair NONE o ho_term_head) ts, phi))) x
   346           AQuant (q, map (rpair NONE o ho_term_head) ts, phi))) x
   346 
   347 
   347 val parse_tstp_extra_arguments =
   348 val parse_tstp_extra_arguments =
   348   Scan.optional ($$ "," |-- parse_source
   349   Scan.optional ($$ "," |-- parse_source --| Scan.option ($$ "," |-- skip_term))
   349                  --| Scan.option ($$ "," |-- skip_formula))
   350                 dummy_inference
   350                 (Inference_Source ("", []))
       
   351 
   351 
   352 val waldmeister_conjecture = "conjecture_1"
   352 val waldmeister_conjecture = "conjecture_1"
   353 
   353 
   354 val tofof_fact_prefix = "fof_"
   354 val tofof_fact_prefix = "fof_"
   355 
   355 
   397    The <num> could be an identifier, but we assume integers. *)
   397    The <num> could be an identifier, but we assume integers. *)
   398 fun parse_tstp_line problem =
   398 fun parse_tstp_line problem =
   399   ((Scan.this_string tptp_cnf || Scan.this_string tptp_fof
   399   ((Scan.this_string tptp_cnf || Scan.this_string tptp_fof
   400     || Scan.this_string tptp_tff || Scan.this_string tptp_thf) -- $$ "(")
   400     || Scan.this_string tptp_tff || Scan.this_string tptp_thf) -- $$ "(")
   401     |-- scan_general_id --| $$ "," -- Symbol.scan_id --| $$ ","
   401     |-- scan_general_id --| $$ "," -- Symbol.scan_id --| $$ ","
   402     -- (parse_formula || skip_formula) -- parse_tstp_extra_arguments --| $$ ")"
   402     -- (parse_formula || skip_term >> K dummy_phi) -- parse_tstp_extra_arguments
   403     --| $$ "."
   403     --| $$ ")" --| $$ "."
   404    >> (fn (((num, role), phi), deps) =>
   404    >> (fn (((num, role), phi), deps) =>
   405           let
   405           let
   406             val (name, rule, deps) =
   406             val (name, rule, deps) =
   407               (* Waldmeister isn't exactly helping. *)
   407               (* Waldmeister isn't exactly helping. *)
   408               case deps of
   408               case deps of