Hi Bill,

| Thanks, John! Yet again you were extremely helpful. Your fix works:
|
| let plane = new_definition
|   `plane S Between  Equiv <=>
|   (Between SUBSET {(x,y,z) | x IN S /\ y IN S /\ z IN S} /\
|   Equiv SUBSET {(x,y,z,w) | x IN S /\ y IN S /\ z IN S /\ w IN S})`;;

Yes, that seems to be the most general way of setting things up.
However, given the rather limited way in which HOL Light lets you
parse things as infix, you might consider setting up Equiv to be
a (curried) binary relation between S^2 and S^2 rather than a
subset of S^4, with a clause like this (assuming "Equiv" has been
declared infix):

 (!x y z w. (x,y) Equiv (z,w) ==> x IN S /\ y IN S /\ z IN S /\ w IN S)

| The way I organized my Hilbert paper was to define a Hilbert plane S,
| a set whose elements we call points, with subsets called lines, which
| has Betweenness and relations satisfying 13 axioms.  Then for solid
| geometry I say we have a set Space with certain subsets S which are
| Hilbert planes.

Yes, I like this approach. I would certainly very much support your
idea in another message of formalizing the whole paper, though of
course it would represent a lot of work. Not only would it give you
about as high a level of assurance as you could want, but it might be
a useful basis for analyzing, for example, just what set-theoretic
properties you actually end up using and hence clarify the
relationship with the other way of formalizing it using unanalyzed
concepts for "line" etc. instead of considering them as subsets of
points.

| These two alternatives seems unpleasant:
|
| 1) to go back and redefine one axioms, using the new term coplanar,
| and then reprove all the theorems (the fixes are all easy).
|
| 2) be doing solid geometry from the beginning: that's tough on a high
| school audience, who have enough trouble with plane geometry.

My own instinct would be be something like (1). You would have some
"space" with certain subsets that you call "lines" or "planes". Then
the 2-dimensional theorems would have some ambient plane P at the
beginning:

 !P:point->bool. plane P ==> !x y. x IN P /\ Y IN P ==> ...

You would effectively relativize all quantifiers to this plane P
and then just assume in the first hypothesis that it is a plane.
And for axioms or theorems that are true in higher dimensions,
you might as well omit the "plane" hypothesis. The reason this
works nicely is precisely that you do model most other concepts
as sets of points with certain properties instead of some other
unanalyzed category.

| new_type("point",0);;
| new_type("line",0);;
| new_constant("on_line",`:point->line->bool`);;
| parse_as_infix("on_line",(12, "right"));;
| new_constant("Between",`:point#point#point->bool`);;
|
| new_constant("Twiddle",`:point->line->point->bool`);;
|
| let Twiddle_DEF = new_definition
|   `Twiddle(A, l, B) <=>
|   ~(?X. (X on_line l) /\ Between(A, X, B))`;;

First of all, there is the issue of currying versus uncurrying
again: if you want to write Twiddle(A, l, B) then you need to
make the type of Twiddle `:point#line#point->bool`, or if you
want to keep the type as ``:point->line->point->bool` you need
to write `Twiddle A l B`. Also, if you are going to make an
actual definition of Twiddle then you should delete the line
that declares the constant (since definitions already do that,
and will complain if the constant exists);

  new_constant("Twiddle",`:point->line->point->bool`);;

John.

------------------------------------------------------------------------------
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
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to