Thanks, John!  I'd be thrilled if you included my code in the HOL Light 
distribution (miz3 dir sounds good)!  I think it would improve my paper's 
chance of being accepted.  I'll definitely write to both Hartshorne & 
Greenberg, but I'll let HOL Light finish debugging my paper first.  I think BTW 
that Hartshorne wrote a great book, but since he taught the course to 
undergraduate non-math majors, he never got real feedback about his proofs.  
Greenberg's book (which doesn't really explain the Hilbert/Euclid connection) 
is used as a math grad text so it's been torture-tested.  I certainly give 
Freek a lot of credit too, for writing a great program miz3, and for the very 
long private miz3 tutorial he gave me.  I'm really happy you ran my code, and 
that it worked!  Thanks for clarifying that you don't want miz3 to be weak:

   Yes, I don't have any similar motivation for wanting the prover to
   be weak, though requiring very low-level proofs has its place, such
   as the pedagogical application you mentioned. I do like to keep
   proofs somewhat explicit in the sense of not using many lemmas
   implicitly (which is why, for example, I don't have a larger set of
   rewrites and simplifications as the default), but I don't want to
   have to spend time manually proving things that could easily be
   blown away with decision procedures. So I suppose I want to be
   somewhat explicit about lemmas but not so much about proof methods.

I don't understand the technicalities, but may I make a suggestion?  No matter 
how powerful you make miz3, users can still put extra details in their proofs.  
The purpose of extra details is good pedagogy, so that another human can read 
the code and learn the proof.  I think my miz3 code is almost as readable as my 
paper, especially with the fancy HOL4/Isabelle-style math fonts.  If miz3 is 
really powerful, then users are on the "honor system" as to whether they really 
understand their own proofs, but math is already on the "honor system", so it's 
fine.  

   And the timeout in miz3 is presumably motivated similarly, though
   as I recall you found that a higher timeout was still productive as
   you became more experienced.

Yes, and a really important fact is that Freek tells people to increase 
timeout!   Timeout is only set to 1 because new users will make lots of simple 
mistakes, and a high timeout makes you wait for HOL Light to tell you about 
your obvious error.   Once you know what you're doing you can raise the 
timeout.   I'm using timeout := 50;; now.  Freek uses timeout := -1;; quite 
often (infinite timeout).  

I wasn't clear about my time-table yesterday.  I have 4 tasks left, in 
increasing order of difficulty:
1) finish formalizing the plane geometry parts of my 26 page paper (close to 
done)
2) port the new geometry rigor from my code to my paper (shouldn't take long, 
and then I can write to Hartshorne) 
3) finish my miz3 users guide MizTips (I must understand Freek's syntax & 
semantics lectures)
4) understand HOL (I'm reading the HOL4 Logic manual)

The last task sounds hard to me, and possibly I won't do a good job.  So if you 
want to improve miz3 for my paper, you'll have time. What I would most like you 
to look at my code and figure out why MESON is working so hard.  I have 16 
MESON solved at numbers over 200,000, but I don't think I ever ask miz3 to do 
anything as hard as the Los Logic problem, which had a MESON solved at number 
about 20,000.  My hazy guess is that I'm having a bad interaction between MESON 
(a FOL prover) and the set theory in my paper.  The first place this comes up 
is with my completely trivial rewrite of axiom B4:

let B4' = thm `;
  ! l A B C. Line l /\ ~Collinear A B C /\ 
   A NOTIN l /\ B NOTIN l /\ C NOTIN l /\ 
   (? X. X IN l /\  X IN open (A,C)) ==>
   (? Y. Y IN l /\  Y IN open (A,B)) \/ (? Y. Y IN l /\  Y IN open (B,C)) 
   by IN_Interval, B4`;;

(* 
The proof above only works because timeout is set to at least 5.
Otherwise the proof gets the miz3 error #2 inference time-out.  With
timeout set to the default value of 1, we use this proof:

let B4prime_THM = thm `;
  let l be point_set;
  let A B C be point;
  assume Line l /\ ~Collinear A B C /\ 
   A NOTIN l /\ B NOTIN l /\ C NOTIN l /\ 
   (? X. X IN l /\  X IN open (A,C))     [H1];
   thus (? Y. Y IN l /\  Y IN open (A,B)) \/ (? Y. Y IN l /\  Y IN open (B,C))

   proof
     Line l /\ ~Collinear A B C /\ 
     A NOTIN l /\ B NOTIN l /\ C NOTIN l /\ 
     (? X. X IN l /\  Between A X C)     by H1, IN_Interval;
     (? Y. Y IN l /\ Between A Y B) \/ (? Y. Y IN l /\ Between B Y C)     by -, 
B4;
   qed     by -, IN_Interval`;;
*)

Maybe I'm the problem, and not miz3.  Maybe I need to use some HOL Light 
tactics to tell miz3 what I want it to do.  In this case, replace each Between 
P Q R in axiom B4 with the equivalent Q IN open (P,R).  

-- 
Best,
Bill 

let B4 = new_axiom
  `! l A B C. Line l /\ ~Collinear A B C /\ 
   A NOTIN l /\ B NOTIN l /\ C NOTIN l /\ 
   (? X. X IN l /\ Between A X C) ==> 
   (? Y. Y IN l /\ Between A Y B) \/ (? Y. Y IN l /\ Between B Y C)`;;

let IN_Interval = thm `;
 ! A B X. X IN open (A,B) <=> Between A X B
 by Interval_DEF, IN_ELIM_THM, REWRITE_TAC`;;

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to