Thanks, Michael!  After working your exercise, I see I didn't achieve
any set theory triumph, and have to go back to the drawing board:

# type_of `segless`;;
val it : hol_type =
  
`:(point->point->point->bool)->point->point->(point->point->point->bool)->point->point->bool

# type_of `Segment`;;
val it : hol_type = `:point->point->point->bool`

And that means that segless is a predicate with 6 arguments:

segless Segment A B Segment C D

But I guess I'm only using 4 of them, and could've defined instead

segless A B C D

That's fine, but it's not set theory, and it's not what I intended.  I
meant for segless to have 2 arguments, just like ===:

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

   Can't you do something like

      s1 seg_less s2 <=> ...

Hmm, I posted something that HOL Light likes, but I couldn't prove
anything with it: 

parse_as_infix("seg_less",(12, "right"));;

let SegmentOrdering_DEF = new_definition
 `s seg_less t   <=> 
  ? A B C D X. s = Segment A B /\ t = Segment C D /\ 
  X IN open (C,D) /\ Segment A B  === Segment C X`;;

I guess that's really what I want, and maybe I just didn't work hard
enough with it.  I have to deal with the fact that given a segment s,
there may be more than one way to write it as s = Segment A B. 
In fact, I prove there's at least two ways:

SegmentSymmetry_THM : thm = |- ∀ A B. Segment A B = Segment B A

-- 
Best,
Bill 

------------------------------------------------------------------------------
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