Closed zenna closed 3 years ago
This is an instance of the general problem of defining an intervention for something other than "set variable to value." It's not simple to define an intervention "Make x an even number," and it's not obvious to me that it's easier to say "Set xs to an array whose first element is 100." It's certainly not easier to say "Set the length of xs to 10."
Reminds me of this: https://en.wikipedia.org/wiki/Two_envelopes_problem#Nalebuff_asymmetric_variant
There's an opportunity to be able to easily express within Omega problems of structure learning. But there are some snags. For example
we want
y_
to bey
as if either x1 or x2 were intervened to be 100. This won't work as intended, becausexs
is random variable with no children and hence intervening on it has no effect. In a sense, rather thanxs
we want something like the random variable that is returned fromxs
.One way to do this is to introduce a new construct. Lacking a good name, let's just call it
result
and hencey_ = replace(y, result(xs) => 100)
.replace(y, result(xs)
would return some special kind of random variable, and the intervention code would be special cased to it.I'm a bit averse to adding new constructs but I'm not sure of any other way. It's unclear whether
result
would have any use outside of this higher-order random variables case. Maybe, rather than haveresult
be an independent construct, we should consider it as a different kind of intervention I'm less averse to a diversity of ways to intervene models than new basic constructs.