Return-Path: <john.harrison-request@uk.ac.cam.cl>
Delivery-Date: 
Received: from ted.cs.uidaho.edu (no rfc931) by swan.cl.cam.ac.uk 
          with SMTP (PP-6.4) outside ac.uk; Tue, 2 Mar 1993 11:31:02 +0000
Received: by ted.cs.uidaho.edu (16.6/1.34) id AA06225;
          Tue, 2 Mar 93 03:19:26 -0800
Sender: info-hol-request@edu.uidaho.cs.ted
Errors-To: info-hol-request@edu.uidaho.cs.ted
Precedence: bulk
Received: from swan.cl.cam.ac.uk by ted.cs.uidaho.edu (16.6/1.34) id AA06220;
          Tue, 2 Mar 93 03:19:16 -0800
Received: from razorbill.cl.cam.ac.uk (user jg (rfc931)) by swan.cl.cam.ac.uk 
          with SMTP (PP-6.4) to cl; Tue, 2 Mar 1993 11:18:40 +0000
To: info-hol@edu.uidaho.cs.ted
Cc: blok@nl.utwente.cs (Rintcius Blok)
Subject: Re: pair proof
In-Reply-To: Your message of Tue, 02 Mar 93 11:14:23 +0100. <9303021014.AA00306@apollo.cs.utwente.nl>
Date: Tue, 02 Mar 93 11:18:25 +0000
From: Jim Grundy <Jim.Grundy@uk.ac.cam.cl>
Message-Id: <"swan.cl.ca.782:02.03.93.11.18.47"@cl.cam.ac.uk>

...
> I have a problem with proving the following goal:
> 
> g "!P.(!(x:*) (y:**).x IN X /\ y IN Y==>P(x,y))=
>       (!z.(FST z) IN X /\ (SND z) IN Y ==>P z)";;
> 
> I think the proof is not difficult and can be very short, 
> but I cannot find/derive an appropriate theorem to "jump" from 
> the first pair repr. to the second.
...
> thanks, 
> Rintcius Blok.

Hi, I would recomend using the pair library released with the latest
version of HOL (but then I'm sort of likely to).
There was, sadly, a bug with the version released with HOL2.01, but it should 
still work for this case, and at any rate the fix may be ftp'd from
ftp.cl.cam.ac.uk: hvg/contrib/bugfixes/pair_lib

Anyway... with the pair library loaded, the proof is simply:

(GEN_TAC THEN
(CONV_TAC (RATOR_CONV (RAND_CONV UNCURRY_FORALL_CONV))) THEN
(CONV_TAC (RAND_CONV (GEN_PALPHA_CONV "(z1:*,z2:**)"))) THEN
(REWRITE_TAC [FST; SND]));;

Jim
