Return-Path: <John.Harrison-request@cl.cam.ac.uk>
Delivery-Date: 
Received: from leopard.cs.byu.edu (no rfc931) by swan.cl.cam.ac.uk 
          with SMTP (PP-6.5) outside ac.uk; Wed, 17 Aug 1994 09:24:54 +0100
Received: by leopard.cs.byu.edu (1.37.109.8/16.2) id AA14965;
          Wed, 17 Aug 1994 02:19:23 -0600
Sender: info-hol-request@lal.cs.byu.edu
Errors-To: info-hol-request@lal.cs.byu.edu
Precedence: bulk
Received: from dworshak.cs.uidaho.edu by leopard.cs.byu.edu 
          with SMTP (1.37.109.8/16.2) id AA14961;
          Wed, 17 Aug 1994 02:19:15 -0600
Received: from vanuata.dcs.gla.ac.uk (vanuata.dcs.gla.ac.uk [130.209.240.50]) 
          by dworshak.cs.uidaho.edu (8.6.9/1.0) with SMTP id BAA20935 
          for <info-hol@cs.uidaho.edu>; Wed, 17 Aug 1994 01:14:48 -0700
From: tfm@dcs.gla.ac.uk
Received: from switha.dcs.gla.ac.uk by goggins.dcs.gla.ac.uk 
          with LOCAL SMTP (PP) id <19285-0@goggins.dcs.gla.ac.uk>;
          Wed, 17 Aug 1994 09:14:24 +0100
Received: by switha.dcs.gla.ac.uk (4.1/Dumb) id AA09791;
          Wed, 17 Aug 94 09:14:21 BST
Message-Id: <9408170814.AA09791@switha.dcs.gla.ac.uk>
To: shaw@cs.ucdavis.edu (Rob Shaw)
Cc: info-hol@cs.uidaho.edu, tfm@dcs.gla.ac.uk
Subject: Re: Why the genvar's ?
In-Reply-To: Your message of "Tue, 16 Aug 94 12:34:59 PDT." <9408161934.AA21851@ice.cs.ucdavis.edu>
Date: Wed, 17 Aug 94 09:14:21 +0100

Rob Shaw asks about rewriting a goal

>   "F"
>      2  ["y <= x" ]
>      1  ["x < y" ]

with

> [*]    |- F = x < y /\ y <= x

resulting in 

> "GEN%VAR%557 < GEN%VAR%558 /\ GEN%VAR%558 <= GEN%VAR%557"
>   2  ["y <= x" ]
>   1  ["x < y" ]
> 
> Why don't I get the new goal "(x < y) /\ (y <= x)" ?

It's because x and y are free on the right-hand side of [*] but not
on the left.  Hence, since x and y can be anything, the system picks
(using genvar) variables guaranteed not to clash with anything in the 
current context -- whatever that might be.  So, for example, one could 
also rewrite

  "!x y. F"

and be sure the rewrite is not blocked by capture problems.

For full details, see the REFERENCE entry for REWR_CONV, which says:

> This situation is, however, relatively rare; in most equations the free
> variables on the right-hand side are a subset of the free variables on the
> left-hand side.

Actually, this is what *should* be true -- if you are finding yourself in
a situation in which it isn't, then it might be a good idea to have another
look at your proof.

Tom

