Hi Tom,

| I have a problem running the following example:
| [...]

Thanks for reporting that! It turns out that I was only doing proof
reconstruction for paramodulation with unit equations, not general
clauses. I've put in a fix that I think corrects things generally, and
certainly solves the problem you wanted. But let me know if you hit
other failures. Prover9 is distinguished from most other systems by
the fact that it provides very clear and explicit low-level proofs.
But the proof format is not really documented, and I essentially
reverse-engineered it from a few examples, so other flaws are
possible. My proposed fix is to add the following extra functions:

  let AP_IMP =
    let pp = MATCH_MP(TAUT `(a ==> b) ==> !x. x \/ a ==> x \/ b`) in
    fun t -> SPEC t o pp;;

  let rec PARA_BACK_CONV eqdir tm =
    match eqdir with
      [Atom "1"] when not(is_disj tm) -> REFL tm
    | [Atom "2"] when not(is_disj tm) -> SYM_CONV tm
    | Atom "2"::eqs -> RAND_CONV (PARA_BACK_CONV eqs) tm
    | [Atom "1"; Atom f] when is_disj tm ->
          let th1 = if f = "2" then LAND_CONV SYM_CONV tm else REFL tm in
          let tm' = rand(concl th1) in
          let djs = disjuncts tm' in
          let th2 = DISJ_ACI_RULE(mk_eq(tm',list_mk_disj(tl djs @ [hd djs]))) in
          TRANS th1 th2
    | _ -> failwith "PARA_BACK_CONV";;

and then change the "paramod" clause in the definition of "proofstep" from

  | List[Atom "paramod"; Atom eqid; List [Atom flip]; Atom tmid; List dir] ->
        let eth = (if flip = "2" then SYM else I) (apply asms eqid)
        and tth = apply asms tmid  
        and path = (map (fun (Atom s) -> int_of_string s) dir) in
        let th = CONV_RULE(PARA_SUBS_CONV path eth) tth in
        if concl th = tm then th                         
        else failwith "Inconsistency from instantiation"

to:

  | List[Atom "paramod"; Atom eqid; List eqdir; Atom tmid; List dir] ->
        let eth = CONV_RULE (PARA_BACK_CONV eqdir) (apply asms eqid)
        and tth = apply asms tmid
        and path = (map (fun (Atom s) -> int_of_string s) dir) in
        let etm = concl eth in
        let th =
          if is_disj etm then
            let djs = disjuncts etm in
            let eq = last djs in
            let fth = CONV_RULE (PARA_SUBS_CONV path (ASSUME eq)) tth in
            MP (itlist AP_IMP (butlast djs) (DISCH eq fth)) eth
          else CONV_RULE(PARA_SUBS_CONV path eth) tth in
        if concl th = tm then th
        else failwith "Inconsistency from paramodulation"

| Related to this example, I have a question about the standard options in
| file prover9.ml:
|
| let prover9_options = ref
| ("clear(auto_inference).\n"^
|  "clear(auto_denials).\n"^
|  "clear(auto_limits).\n"^
|  "set(neg_binary_resolution).\n"^
|  "set(binary_resolution).\n"^
|  "set(paramodulation).\n");;
|
| If I run with these options prover9 takes a long time, but if I run
| with the default prover9 settings (by modifying the prover9.ml
| file), prover9 proves the goal very quickly. However, I suspect
| that it may only be proving a single disjunct rather than all the
| disjuncts (?). Can you confirm this?

No, based on the fact that (with that bugfix) the proof reconstruction
for your example still works when I set 

  prover9_options := ""

(this is what you meant by using the default settings, right?), it
must be doing the whole thing. But I also found that the default
settings were much faster in this case. The settings in the file
were arrived at based on a bit of empirical investigation on some
examples, and might not be the best choice in general. I can't even
remember what objection I had to the default options.

John.

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to