thinking a little more of behavior of f() f() receives source of g() and input to g() consisting of source of f() and sou [oop!] rce of g() f analyses behavior of g() with these inputs. f() is free to identify that g() is acting on f’s own source. meanwhile, inside g(), it passes the same inputs to f(), although conceptually a little differently: it possibly can’t know for sure the g() source passed to it is its own source, nor that f() is evaluating it. similarly f() possibly can’t know for sure whether g() is evaluating it, although the f() source and its further input data are inherent parts of its correct use. we could design the functions to be able to reconstruct and compare their own source code correctly regardless of input. it doesn’t need to be passed. this removes g() from input to itself.