Thanks, John! I'm up to Euclid's Prop I.28, so I have formalized Hartshorne's
result
http://www.math.northwestern.edu/~richter/RichterHOL-LightMiz3HilbertAxiomGeometry.tar.gz
Thm 10.4:
All of Euclid's propositions (I.1) to (I.28) except (I.1) and (I.22), can be
proved in an arbitrary Hilbert plane, as explained above.
So thanks for all your help, and for writing such a great program HOL Light!
Prop I.29 is the first time Euclid uses the parallel postulate, and I think
that's why Hartshorne quit there. I'll go a little farther, as no US high
school geometry text does a reasonable job proving the triangle sum theorem
(angle sum = 180 deg), but I'll finish soon. If you can tell me how to use use
permutative rewrites in my miz3 code, so that
~Collinear {A, B, C} = ~Collinear {B, C, A} = ~Collinear {C, B, A}
etc, I'll code it up, and it will make my code a little cleaner. I bet you're
especially busy with the new ocaml release, and if we don't fix this, that's
fine. I didn't have any serious comment about the different versions of HOL.
All of you are using HOL for real world projects where you really have to
believe the code works, and I bet everyone sensibly says, "I'm going to use my
code, which I trust."
I really want to know how strong or weak you want miz3 to be. My belief (not
based on a lot of info) is that Mizar is intentionally weak, partly to
encourage very readable proofs and to make Mizar usable for student homework,
but that you have no such interest in miz3 weakness. I have only two pieces of
evidence about your intentions. Your file Examples/holby.ml starts
(* ========================================================================= *)
(* A HOL "by" tactic, doing Mizar-like things, trying something that is *)
(* sufficient for HOL's basic rules, trying a few other things like *)
(* arithmetic, and finally if all else fails using MESON_TAC[]. *)
(* ========================================================================= *)
MESON is pretty powerful! If you had a more powerful FOL prover than MESON, or
a compatible set-theory prover, I think you use such provers in holby.ml as
well. Your purple book seemed to stress that we should be combining the
procedural and declarative approaches, and that doesn't indicate a desire to
weaken the declarative approach.
My opinion about weakness has changed drastically. Initially I was counting on
miz3 to be weak to make sure I wasn't taking big leaps, and to police student
homework. But a long discussion here convinced me (Michael mostly) that this
weakness isn't a good idea. I now think taking big leaps is fine, and if I'm
too dumb to spot big leaps in either my code in a students, uh, I'm in bad
shape, and I shouldn't be counting on the program to bail me out. One of the
things which changed my mind was a discussion with Cris and Rob about Los's
Logic problem which you write about on p 36 of your tutorial, writing "The
machine proves this a lot faster than I could." I couldn't prove it at all.
But Rob wrote up a short mathematical proof of Los's Logic result, which I
easily coded in miz3 (code for Rob's original proof below) and I decided that
it's OK for MESON to perform such leaps in my code.
--
Best,
Bill
#load "unix.cma";;
loadt "miz3/miz3.ml";;
horizon := 0;;
let RobProof2LosLogic_THM = thm `;
let P Q be A->A->bool;
assume ! x y z. P x y /\ P y z ==> P x z [Ptrans];
assume ! x y z. Q x y /\ Q y z ==> Q x z [Qtrans];
assume !x y. P x y ==> P y x [Psym];
assume !x y. P x y \/ Q x y [PunionQ];
thus (!x y. P x y) \/ (!x y. Q x y)
proof
assume ~(!x y. P x y);
consider a b such that
~P a b /\ ~P b a [notPab] by -, Psym;
Q a b /\ Q b a [Qab] by -, Psym, PunionQ;
!x y. Q x y
proof
let x y be A;
cases;
suppose P x a /\ P b y [PxyPby];
~P x y
proof
assume P x y [Con];
P a x /\ P y b by PxyPby, Psym;
P a b by -, Con, Ptrans;
qed by -, notPab;
Q x y by -, PunionQ;
qed by -;
suppose ~P x a /\ ~P b y;
Q x a /\ Q b y by -, PunionQ;
qed by -, Qab, Qtrans;
suppose P x a /\ ~P b y [Pxy_notPby];
~P x b
proof
assume P x b;
P a b by -, Pxy_notPby, Psym, Ptrans;
qed by -, notPab;
Q x b /\ Q b y by -, Pxy_notPby, PunionQ;
qed by -, Qtrans;
suppose ~P x a /\ P b y;
P y b /\ ~P a x [Pyb_notPax] by -, Psym;
~P y a
proof
assume P y a;
P a b by -, Psym, Pyb_notPax, Ptrans;
qed by -, notPab;
Q x a /\ Q a y by Pyb_notPax, -, Psym, PunionQ;
qed by -, Qtrans;
end;
qed by -`;;
------------------------------------------------------------------------------
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