*To*: John Matthews <matthews at galois.com>*Subject*: Re: [isabelle] Defining infinite streams recursively*From*: Alexander Krauss <krauss at in.tum.de>*Date*: Sat, 07 Jun 2008 11:41:06 +0200*Cc*: isabelle-users <isabelle-users at cl.cam.ac.uk>, Tobias Nipkow <nipkow at in.tum.de>*In-reply-to*: <E0EB1D2D-1851-4579-A81B-8809E218E66F@galois.com>*References*: <B25EB410-E7E6-42EC-91D0-0B0590C86DF1@galois.com> <48497E7A.2040500@in.tum.de> <E0EB1D2D-1851-4579-A81B-8809E218E66F@galois.com>*User-agent*: Icedove 1.5.0.14eol (X11/20080509)

Hi John,

I think the problem is that what is really needed is a "compound"congruence rule for when Let is itself applied as a higher orderfunction, i.e.lemma let_app_cong[fundef_cong]: [| i = j; M = N; !!x. x = N ==> f x = g x|] ==> (Let M f) i = (Let N g) j" But when I added this rule I still ran into the same problem.

\begin{blackmagic} Here is the rule you need: lemma let_app_cong[fundef_cong]: "s = t ==> (!!a. a = t ==> f a y = g a y) ==> x = y ==> Let s f x = Let t g y" by auto \end{blackmagic} Note how the extra argument y is moved "into" the let. Alex

**Follow-Ups**:**Re: [isabelle] Defining infinite streams recursively***From:*John Matthews

**References**:**[isabelle] Defining infinite streams recursively***From:*John Matthews

- Previous by Date: [isabelle] Defining infinite streams recursively
- Next by Date: [isabelle] Automated Reasoning Workshop 2008
- Previous by Thread: [isabelle] Defining infinite streams recursively
- Next by Thread: Re: [isabelle] Defining infinite streams recursively
- Cl-isabelle-users June 2008 archives indexes sorted by: [ thread ] [ subject ] [ author ] [ date ]
- Cl-isabelle-users list archive Table of Contents
- More information about the Cl-isabelle-users mailing list