From: Saverio Perugini
Subject: parameterized partial evaluation
Date: 
Message-ID: <Pine.OSF.4.33.0210151424470.17358-100000@csgrad.cs.vt.edu>
Hello,

As I understand it, parameterized partial evaluation entails partially evaluating
a program with respect to `abstract' properties of a program
as opposed to specific values for variables.

I have the need to circumvent the `all or nothing' role
played by partial evaluation.  By all or nothing I mean that if a
variable is static (with regard to partial evaluation) and has a value
supplied a-priori, then partial evaluation will simplify it
*everywhere* in the program.  In other words, partial evaluation
makes no bias about that variable among contexts/different segments of the program.

For example, consider partially evaluating the following Scheme function
with respect to the property `a = 1 and d = 1 and
(b = 1 and c = 0 [under the a block]) and (b = 0 and c = 1 [under the d block]).'

(define (f a b c)

   (if (equal? a 1)

      (if (equal? b 1)
         ; do something here

         (if (equal? c 1)
            ; do something else here
         ))

      (if (equal? d 1)

         (if (equal? b 1)
            ; do something now

            (if (equal? c 1)
               ; do something else now)))))

where the output of the partial evaluation would be

; do something here
; do something else now

To me,
the property `a = 1 and d = 1 and (b = 1 and c = 0 [under the
a block]) and (b = 0 and c = 1 [under the d block])' seems abstract, akin
to parameterized partial evaluation.
This abstract property is a specification which
traditional partial evaluators do not accommodate.

Can parameterized partial evaluation realize this request or
am I thinking about parameterized partial evaluation wrongly?

Thank You and Best Regards,

S. Perugini