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); Tue, 12 Jan 1993 19:39:16 +0000
Received: by ted.cs.uidaho.edu (16.6/1.34) id AA23294;
          Tue, 12 Jan 93 11:28:01 -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 AA23289;
          Tue, 12 Jan 93 11:27:52 -0800
Received: from coot.cl.cam.ac.uk (user pc (rfc931)) by swan.cl.cam.ac.uk 
          with SMTP (PP-6.4) to cl; Tue, 12 Jan 1993 19:27:20 +0000
To: info-hol@edu.uidaho.cs.ted
Subject: Re: APPLY function on HOL
Date: Tue, 12 Jan 93 19:27:13 +0000
From: Paul Curzon <Paul.Curzon@uk.ac.cam.cl>
Message-Id: <"swan.cl.ca.565:12.01.93.19.27.23"@cl.cam.ac.uk>

> However the function ITLIST ("iterate on list")
> defined as follows may do what you want:
> 
>   let ITLIST = new_list_rec_definition(`ITLIST`,
>     "(ITLIST (f:*->**->**) [] x = x) /\
>      (ITLIST f (CONS hd tl) x = f hd (ITLIST f tl x))");;


The ITLIST function above described by John is defined in the
more_lists library, together with a couple of theorems about it.

Paul Curzon.
