On 27 May 2012, at 08:20, Bill Richter wrote:

> John, I'm over 400 lines now formalizing my Hilbert axiom paper
> http://www.math.northwestern.edu/~richter/hilbert.pdf (code below) and
> proved that being on the same side of a line defines an equivalence
> relation.  This is really a lot of fun, and my son likes it too: the
> formalized mathematical proofs become more "concrete".
> 
> I know you're real busy, but I have three questions.  My first 6 lemmas
> here are all set-theory, and I wonder if I'm going about it the right
> way.  Also, I couldn't figure out how to define an equivalence
> relation.  It seems that there ought to be a way to define function
> ER: point#point->bool ---> bool
> (or something) testing if a relation is an equivalence relation.

HOL effectively lets you define the class of all equivalence relations. Thus:

let refl_def = new_definition
   `Refl R = !x:'a. R x x`;;
let symm_def = new_definition
   `Symm R = !x y:'a. R x y ==> R y x`;;
let trans_def = new_definition
   `Trans R = !x y z:'a. R x y /\ R y z ==> R x z`;;
let equiv_rel_def = new_definition
   `EquivRel R = (Refl R /\ Symm R /\ Trans R)`;;

(Here the fact that HOL is polymorphic is giving you much more expressivity in 
practice than raw ZF set theory would give.)

After the above definitions, type_of`EquivRel` will evaluate to something like 
`:(?83981->?83981->bool)->bool` where ?83981 is a type variable that can be 
instantiated to any other type. In your case you can write `equiv_rel (\A B. 
(A, B) same_side l)` to assert that the relationship of being on the same side 
of the line l is an equivalence relation. However, you are going to need to do 
something a bit trickier, since your axioms seem to be loose about whether `(A, 
B) same_side l` holds if A or B is on the line l. So you will either need to 
strengthen your axioms so that `(\A B. (A, B) same_side l)`becomes an 
equivalence relation on the set of all points or generalise the above 
definitions to the notion of an equivalence relation on a subset:

let refl_on_def = new_definition
   `ReflOn R P = !x:'a. P x ==> R x x`;;
let symm_on_def = new_definition
   `SymmOn R P = !x y:'a. P x /\ P y /\ R x y ==> R y x`;;
let trans_on_def = new_definition 
   `TransOn R P = !x y z:'a. P x /\ P y /\ P z /\ R x y /\ R y z ==> R x z`;;
let equiv_rel_on_def = new_definition
   `EquivRelOn R P = (ReflOn R P /\ SymmOn R P /\ TransOn R P)`;;
   
So you can write `EquivRelOn (\A B. (A, B) same_side l) l`. (Given a free 
choice, I would strengthen the axioms as it will simplify the proofs.)


> Below you can see my partly successful effort.  Also, my axiom B3 is
> bulkier than I'd like. I want to say that exactly one of three things
> is true, so I wrote 
> a \/ b \/ c /\ ~(a /\ b) /\ ~(a /\ c) /\ ~(b /\ c).
> Is there a nice HOL Light way to say this?
> 
Well you could define a function on lists of truth values and use that. Thus:

let all_false_def = new_recursive_definition list_RECURSION
   `  (AllFalse [] = T)
   /\ (AllFalse (CONS b bs) = (~b /\ AllFalse bs)) `;;

let one_true_def = new_recursive_definition list_RECURSION
   `  (OneTrue [] = F)
   /\ (OneTrue (CONS b bs) = ((b /\ AllFalse bs) \/ (~b /\ OneTrue bs))) `;;

And then you can say things like  `OneTrue [A = B; B = C; A = C]`. But I 
suspect this won't make life any simpler for you because to reason with this 
notation, you will probably just end up rewriting with the definitions as in:

REWRITE_CONV[one_true_def; all_false_def] `OneTrue [A = B; B = C; A = C]`;;

which returns:

 |- OneTrue [A = B; B = C; A = C] <=>
     A = B /\ ~(B = C) /\ ~(A = C) \/
     ~(A = B) /\ (B = C /\ ~(A = C) \/ ~(B = C) /\ A = C)

and so doesn't help with reducing the number of cases. John's "Without Loss Of 
Generality" paper may give you some ideas 
(http://www.cl.cam.ac.uk/~jrh13/papers/wlog.html) if case explosion is a big 
problem for you, but I don't know how well that fits in with miz3.

Regards,

Rob.




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