Hacker News new | ask | show | jobs
by void_one 1575 days ago
There is a fallacy in constructing "paradox.sh" problem.

"behave_differently.sh" requires an argument, a program to be run and produce some output. If "behave_differently.sh" is run without any argument, then there is no specified correct behavior.

Thus, "paradox.sh" also requires "$1" to be non-empty, otherwise it's result is undefined. When invoking "./paradox.sh ./paradox.sh", the inner "paradox.sh" will be launched without any arguments, running "behave_differently.sh" also without arguments.

There is no logical impossibility, just constructed way to trigger unspecified behavior in "behave_differently.sh".

2 comments

The second paradox.sh in './paradox.sh ./paradox.sh' isn't run at all. It's soucre gets read in as input to behave_differently.sh.
yes, and then behave_differently.sh runs it to capture and modify its output, but without any arguments
Note that behave_differently.sh takes two inputs, both a program and the input for that program. Also note that paradox.sh gives both these inputs by using $1 twice.

And behave_differently.sh is supposed to be an arbitrary program. It can run the input program but it doesn't have to, it can analyse it in any way it wishes.

It is a good point that behave_differently.sh does not necessary run its argument program, but can analyze it in another way. (The context of Bash scripts suggests execution but that is a misleading hint.)

In the broader formulation behave_differently.sh tells that its argument program terminates and produces finite input, which is a halting problem.

Bot the very approach is fun:

  class RusselSet(set):
      def __contains__(self, other):
          return other not in other

  paradox = RusselSet()

  paradox in paradox  # ?