50
1 Module 11 • Proving more specific problems are not solvable • Input transformation technique – Use subroutine theme to show that if one problem is unsolvable, so is a second problem – Need to clearly differentiate between • use of program as a subroutine and • a program being an input to another program

Module 11

Embed Size (px)

DESCRIPTION

Module 11. Proving more specific problems are not solvable Input transformation technique Use subroutine theme to show that if one problem is unsolvable, so is a second problem Need to clearly differentiate between use of program as a subroutine and - PowerPoint PPT Presentation

Citation preview

Page 1: Module 11

1

Module 11

• Proving more specific problems are not solvable

• Input transformation technique– Use subroutine theme to show that if one

problem is unsolvable, so is a second problem– Need to clearly differentiate between

• use of program as a subroutine and

• a program being an input to another program

Page 2: Module 11

2

Basic Idea/Technique

Page 3: Module 11

3

Primality Testing Problem *

• Consider the following two problems– Halting Problem

• Input: Program P, unsigned int x• Yes/No Question: Does P halt on x?

– Primality Testing Problem (PTP)• Input: Program P, unsigned int x• Yes/No Question: Does P output correctly whether

or not x is a prime number?

• Which problem seems harder and why?

Page 4: Module 11

4

Question *

• Suppose we construct a program PH which solves the Halting problem H under the following conditions– All of PH is known to be correct with the

exception of one procedure PL.

– This procedure PL is being used to solve the Primality Testing Problem.

• What can we conclude in this scenario?

Page 5: Module 11

5

Formalizing Technique

• Assume PL is a procedure that solves problem L– We have no idea how PL solves L

• Construct a program PH that solves H using PL as a subroutine– We use PL as a black box– (We could use any unsolvable problem in place of H)

• Argue PH solves H• Conclude that L is unsolvable

– Otherwise PL would exist and then H would be solvable– L will be a problem about program behavior

Page 6: Module 11

6

Focusing on H

• In this module, we will typically use H, the Halting Problem, as our known unsolvable problem

• The technique generalizes to using any unsolvable problem L’ in place of H.– You would need to change the proofs to work with L’

instead of H, but in general it can be done

• The technique also can be applied to solvable problems to derive alternative consequences

• We focus on H to simplify the explanation

Page 7: Module 11

7

Constructing PH using PL

Answer-preserving input transformations and Program PT

Page 8: Module 11

8

PH has two subroutines

• There are many ways to construct PH using program PL that solves L

• We focus on one method in which PH consists of two subroutines– Procedure PL that solves L– Procedure PT which computes a function f that I

call an answer-preserving (or answer-reversing) input transformation

• More about this in a moment

Page 9: Module 11

9

Pictoral Representation of PH *

PH

x Yes/NoPLY/NPT

PT(x)

Page 10: Module 11

10

Answer-preserving input transformation PT

• Input– An input to H

• Output– An input to L such that

• yes inputs of H map to yes inputs of L• no inputs of H map to no inputs of L

• Note, PT must not loop when given any legal input to H

Page 11: Module 11

11

Why this works *

PH

PLPT

yes input to H yes input to L yes

no input to H no input to L no

We have assumed that PL solves L

Page 12: Module 11

12

Answer-reversing input transformation PT

• Input– An input to H

• Output– An input to L such that

• yes inputs of H map to no inputs of L• no inputs of H map to yes inputs of L

• Note, PT must not loop when given any legal input to H

Page 13: Module 11

13

Why this works *

PH

PLPT

yes input to H no input to L yes

no input to H yes input to L no

We have assumed that PL solves L

no

yes

Page 14: Module 11

14

Yes->Yes and No->No

Domain of H

Yes inputsfor H

No inputsfor H

Yes inputsfor L

No inputsfor L

Domain of L

PLPT

PH

x PT(x) Yes/No

Page 15: Module 11

15

Notation and Terminology

• If there is such an answer-preserving (or answer-reversing) input transformation f (and the corresponding program PT), we say that H transforms to (many-one reduces to) L

• NotationH <= L

Domain of H

Yes inputs No inputs

Yes inputs No inputsDomain of L

Page 16: Module 11

16

Examples not involving the Halting Problem

Page 17: Module 11

17

Generalization

• As noted earlier, while we focus on transforming H to other problems, the concept of transformation generalizes beyond H and beyond unsolvable program behavior problems

• We work with some solvable, language recognition problems to illustrate some aspects of the transformation process in the next few slides

Page 18: Module 11

18

Example 1 *

• L1 is the set of even length strings over {0,1}– What are the set of legal input instances and no inputs for

the L1 LRP?

• L2 is the set of odd length strings over {0,1}– Same question as above

• Tasks– Give an answer-preserving input transformation f that

shows that L1 LRP <= L2 LRP

– Give a corresponding program PT that computes f

Domain of L1

Yes inputs No inputs

Yes inputs No inputsDomain of L2

Page 19: Module 11

19

Program PT

string main(string x)

{

return(x concatenate “0”);

}

Page 20: Module 11

20

Example 2 *

• L1 is the set of all strings over {0,1}

– What is the set of all inputs, yes inputs, no inputs for the L1 LRP?

• L2 is {0}– Same question as above

• Tasks– Give an answer-preserving input transformation f which

shows that the L1 LRP <=L2 LRP

– Give a corresponding program PT which computes f

Domain of L1

Yes inputs No inputs

Yes inputs No inputsDomain of L2

Page 21: Module 11

21

Program PT

string main(string x)

{

return( “0”);

}

Page 22: Module 11

22

Example 3 *

• L1 – Input: Java program P that takes as input an unsigned int– Yes/No Question: Does P halt on all legal inputs

• L2

– Input: C++ program P that takes as input an unsigned int– Yes/No Question: Does P halt on all legal inputs

• Tasks– Describe what an answer-preserving input transformation f

that shows that L1 <=L2 would be

Domain of L1

Yes inputs No inputs

Yes inputs No inputsDomain of L2

Page 23: Module 11

23

Proving a program behavior problem L is unsolvable

Page 24: Module 11

24

Problem Definitions *

• Halting Problem H– Input

• Program QH that has one input of type unsigned int

• non-negative integer y that is input to program QH

– Yes/No Question• Does QH halt on y?

• Target Problem L– Input

• Program QL that has one input of type string

– Yes/No question• Does Y(QL) = the set of

even length strings?

• Assume program PL solves L

Page 25: Module 11

25

Construction review

PH

x Yes/No

•We are building a program PH to solve the halting problem H

PTPT(x)

•PH will use PT as a subroutine, and we must explicitly construct PT using specific properties of H and L

PLY/N

•PH will use PL as a subroutine, and we have no idea how PL accomplishes its task

Page 26: Module 11

26

P’s and Q’s• Programs which are PART of program PH and

thus “executed” when PH executes– Program PT, an actual program we construct– Program PL, an assumed program which solves

problem L

• Programs which are INPUTS/OUTPUTS of programs PH, PL, and PT and which are not “executed” when PH executes– Programs QH, QL, and QYL

• code for QYL is available to PT

Page 27: Module 11

27

Two inputs for L *

• Target Problem L– Input

• Program Q that has one input of type string

– Yes/No question• Does Y(Q) = the set of

even length strings?

• Program PL

– Solves L– We don’t know how

• Consider the following program Q1

bool main(string z)

{while (1>0) ;}

– What does PL output when given Q1 as input?

• Consider the following program Q2

bool main(string z)

{ if ((z.length %2) = = 0) return (yes)

else return (no); }

– What does PL output when given Q2 as input?

Page 28: Module 11

28

Another input for L *

• Target Problem L– Input

• Program Q that has one input of type string

– Yes/No question• Does Y(Q) = the set of

even length strings?

• Program PL

– Solves L– We don’t know how

• Consider the following program QL with 2 procedures Q1 and QYL

bool main(string z) {

Q1(5); /* ignore return value */

return(QYL(z));}

bool Q1(unsigned int x) {if (x > 3) return (no); else loop;

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);

else return(no);}

• What does PL output when given QL as input?

Page 29: Module 11

29

Input and Output of PT *

• Input of PT

• (Also Input of H)– Program QH

• one input of type unsigned int

– Non-negative integer y

• Program QL that is the output of PT

• (Also input of L)bool main(string z) {

QH(y); /* QH and y come left-hand side */ /* ignore return value */

return(QYL(z));}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);

else return(no);}

QH,y PT QL

Page 30: Module 11

30

Example 1 *

Input to PT

Program QH

bool main(unsigned int y) { if (y ==5) return yes; else if (y ==4) return no; else while (1>0) {};}

Input y5

Output of PT

Program QL

bool QH(unsigned int y) { if (y ==5) return yes; else if (y ==4) return no; else while (1>0) {};}bool QYL(string z) { if ((z.length % 2) == 0) return (yes) else return (no);}bool main(string z) { unsigned int y = 5; QH(y); return (QYL(z));}

QH,y PT QL

Page 31: Module 11

31

Example 2

Input to PT

Program QH

bool main(unsigned int y) { if (y ==5) return yes; else if (y ==4) return no; else while (1>0) {};}

Input y3

Output of PT

Program QL

bool QH(unsigned int y) { if (y ==5) return yes; else if (y ==4) return no; else while (1>0) {};}bool QYL(string z) { if ((z.length % 2) == 0) return (yes) else return (no);}bool main(string z) { unsigned int y = 3; QH(y); return (QYL(z));}

QH,y PT QL

Page 32: Module 11

32

PT in more detail

Page 33: Module 11

33

Declaration of PT *

• What is the return type of PT?– Type program1 (with one input of type string)

• What are the input parameters of PT?– The same as the input parameters to H; in this case,

• type program2 (with one input of type unsigned int)• unsigned int (input type to program2)

program1 main(program2 QH, unsigned int y)

PLPT

PH

QH,y QL Yes/No

Page 34: Module 11

34

program1 main(program2 P, unsigned int y) {

/* Will be viewing types program1 and program2 as STRINGS over the program alphabet P */

program1 QL = replace-main-with-QH(P);/* Insert line break */

QL += “\n”;

/* Insert QYL */

QL += “bool QYL(string z) {\n \t if ((z.length % 2) == 0) return (yes) else return (no);\n }”;

/* Add main routine of QL */

QL += “bool main(string z) {\n\t”; /* determined by L */

QL += “unsigned int y =”

QL += convert-to-string(y);

QL += “;\n\t QH(y)\n\t return(QYL(z));\n}”;

return(QL);}

program1 replace-main-with-QH(program2 P) /* Details hidden */string convert-to-string(unsigned int y) /* Details hidden */

Code for PT PLPT

PH

QH,y QL Yes/No

Page 35: Module 11

35

PT in action

PT

code for QYL

QH

unsigned int ystart QYL

Y/Nz

Y/N

QL

haltQH

y

Program QHbool main(unsigned int y) { if (y ==5) return yes; else if (y ==4) return no; else while (1>0) {};}

Input y5

Program QLbool QH(unsigned int y) { if (y ==5) return yes; else if (y ==4) return no; else while (1>0) {};}bool QYL(string z) { if ((z.length % 2) == 0) return (yes) else return (no);}bool main(string z) { unsigned int y = 5; QH(y); return (QYL(z));}

PT

QYL

PLPT

PH

QH,y QL Yes/No

Page 36: Module 11

36

Constructing QL (and thus PT)

Page 37: Module 11

37

Start with no input for H

• If QH, y is a no input to the Halting problem

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(Q?L(z)); /* yes or no? */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool Q?L(string y) {

}

– Thus Y(QL) = {}

– QH loops on y

– Determine if this makes QL a no or yes input instance to L

Page 38: Module 11

38

Answer-preserving input transformation

• If QH, y is a no input to the Halting problem

– Thus Y(QL) = {}

– QH loops on y

– Determine if this makes QL a no or yes input instance to L

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {

}

– Now choose a QYL (or QNL) that is a yes (or no) input instance to L

Page 39: Module 11

39

Make yes for H map to yes for L

• If QH, y is a no input to the Halting problem

– Thus Y(QL) = {}

– QH loops on y

– Determine if this makes QL a no or yes input instance to L

– Now choose a QYL (or QNL) that is a yes (or no) input instance to L

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);else return (no);

}

Page 40: Module 11

40

Possible shortcutProgram QL bool main(string z) {

QH(y); /* ignore return value */if ((z.length( ) % 2) = = 0) return (yes);else return (no);

}

bool QH(unsigned int x) {/* comes from left-hand side

}

Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);else return (no);

}

Page 41: Module 11

41

Another Example

Page 42: Module 11

42

Problem Definitions

• Halting Problem H– Input

• Program QH that has one input of type unsigned int

• non-negative integer y that is input to program QH

– Yes/No Question• Does QH halt on y?

• Target Problem L– Input

• Program QL that has one input of type string

– Yes/No question• Is Y(QL) finite?

• Assume program PL solves L

Page 43: Module 11

43

Start with no input for H

• If QH, y is a no input to the Halting problem

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(Q?L(z)); /* yes or no? */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool Q?L(string y) {

}

– Thus Y(QL) = {}

– QH loops on y

– Determine if this makes QL a no or yes input instance to L

Page 44: Module 11

44

Answer-reversing input transformation

• If QH, y is a no input to the Halting problem

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QNL(z)); /* no */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QNL(string y) {

}

– Thus Y(QL) = {}

– QH loops on y

– Determine if this makes QL a no or yes input instance to L

– Now choose a QYL (or QNL) that is a yes (or no) input instance to L

Page 45: Module 11

45

Make yes for H map to no for L

• If QH, y is a no input to the Halting problem

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QNL(z)); /* no */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QNL(string y) {if ((y.length( ) % 2) = = 0) return(yes);else return(no);

}

– Thus Y(QL) = {}

– QH loops on y

– Determine if this makes QL a no or yes input instance to L

– Now choose a QYL (or QNL) that is a yes (or no) input instance to L

Page 46: Module 11

46

Analyzing existing transformations

Yes to No and No to Yes Violations

Page 47: Module 11

47

Is Y(P) = {aa}? *

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes or no */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);else return (no);

}

• Problem L• Input: Program P• Yes/No Question: Is Y(P) =

{aa}?• Analysis

• No input to H creates a QL

that is a no input for L• No maps to no

• Yes input to H creates a QL that is ALSO a no input for L

• Yes maps to no• Transformation does not work

• Yes to No violation

Page 48: Module 11

48

Is Y(P) infinite?

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes or no */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);else return (no);

}

• Problem L• Input: Program P• Yes/No Question: Is Y(P)

infinite?• Analysis

• No input to H creates a QL

that is a no input for L• No maps to no

• Yes input to H creates a QL that is a yes input for L

• Yes maps to yes• Transformation works

• Answer-preserving

Page 49: Module 11

49

Is Y(P) finite?

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes or no */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);else return (no);

}

• Problem L• Input: Program P• Yes/No Question: Is Y(P)

finite?• Analysis

• No input to H creates a QL

that is a yes input for L• No maps to yes

• Yes input to H creates a QL that is a no input for L

• Yes maps to no• Transformation works

• Answer-reversing

Page 50: Module 11

50

Is Y(P) = {} or is Y(P) infinite?

• Program QL bool main(string z) {

QH(y); /* ignore return value */

return(QYL(z)); /* yes or no */}

bool QH(unsigned int x) {/* comes from left-hand side

}

bool QYL(string y) {if ((y.length( ) % 2) = = 0) return (yes);else return (no);

}

• Problem L• Input: Program P• Yes/No Question: Is Y(P) =

{} or is Y(P) infinite?• Analysis

• No input to H creates a QL

that is a yes input for L• No maps to yes

• Yes input to H creates a QL that is ALSO a yes input for L

• Yes maps to yes• Transformation does not work

• No to Yes violation