-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Existentials and propagation of associated variables #105
Comments
Actually, on further thought, I don't see why the instantiator block has a local output and a local input at all. All it's supposed to do is conclude from |
I came here wondering about the same problem, and also raised #106 from my confusion. Here's an actual solution that uses that line. I think that it would be nice if the hovering over a red line displays a tooltip saying what the issue is. |
That would be unsound; the |
That can't be true in general, because What's happening internally when a block puts out |
Here's a proof that This proof uses a universalizing block to conclude from But as far as I understand things, the conclusion shown in the proof is valid because Of course, in my model, it would make more sense for the value to be called |
(As a digression, I don't believe that proof is correct even though it's turned green. In order for that proof to work, I've just assumed that something exists. But |
Yes, the way the axioms are set up here only works for non-empty universes. Did you have a look at the corresponding paper, in particular section 2.4?
and
|
I've been working on session 6, problem 13 (given
∃x.∃y.P(x,y)
, show that∃y.∃x.P(x,y)
. I feel like there's something about the ∃-related blocks that I don't understand, so this report will basically show a bunch of pictures and complain.Here are two strategies, "top" and "bottom", that I've tried to make work. I believe they are logically equivalent:
On the bottom, I've derived P(c_7, c_8). I should be able to run that through the two instantiator blocks (8 and 7), and then through two existentializer blocks (e.g. 4 and 3), and have a complete proof. However, directly connecting the local output of block 8 to the local input of block 8 produces a skull-and-crossbones error:
This looks like a bug; it seems to me that Q_7 should unify with P(c_7, c_8), so that the ultimate output of this construction is P(c_7, c_8). I don't see how it can ever be incorrect to wire local output straight to local input.
On the top, I've tried a non-nested approach based on this pencil-and-paper proof:
The back-propagated input requirement shown above says that I need to provide input proving
∃x.∃x_1.P(y_4,y_3)
. #71 suggests that y_4 and y_3 are variables (not constants) which should unify as needed. So the provided input∃x.∃y.P(x,y)
should satisfy this requirement... but it doesn't:What's happening in the propagation here? I agree that the local output of block 6,
∃y.P(c_6,y)
, is correct. But the rest looks wrong. The local input of block 6 should be∃y.P(c_6,y)
or equivalently∃x.P(c_6,x)
. The non-local output of block 6 should be∃x.P(c_6, x)
. The local output, local input, and non-local output of block 5 should beP(c_6, c_5)
.P(c_6,c_5)
should satisfy the input requirement of block 4. Block 4's output should be∃x.P(x,c_5)
.Instead, the local input and output of block 6 are incorrectly stated to be mismatched, and the non-local output of block 6 is
∃x.P(y_4,y_3)
, which fails to bindy_3
to∃x
. This must be because the output is being propagated backward from later blocks. But if we disconnect the later blocks, we run into the same error we found in the bottom strategy:And I can't even try to fix this with an annotation block specifying what I think
Q_6
should be, because all symbols used in annotation blocks are constants and I can't inputc_6
.The text was updated successfully, but these errors were encountered: