-
Notifications
You must be signed in to change notification settings - Fork 247
Redefine ⊥ to make its proofs irrelevant? #645
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
Comments
Hmm interesting suggestion. The problem is that pattern matching on Regardless of whether we adopt it or not, I'd prefer to hold off introducing it for a while until |
Splitting a value of type Just like agda/agda#3533 improves case-splitting to take into account the fact that |
If you think we can make it entirely backwards compatible then it definitely sounds worthwhile. |
I am currently writing a patch to fix case splitting for this work. ;) |
One thing to consider is that some people might not want to use all features that Agda has to offer. If someone wants to work in the fragment of Agda that does not include |
I think @nad is probably right about this one. At the very least, let's see how @JacquesCarette gets on using it in the category theory portion of the library first... I'm going to close this for now but feel free to re-open in the future. |
Hoping to work on that in May, the rest of April is kind of booked pretty solid. |
Note that we can use irrelevance instead of private data empty : Set where
record ⊥ : Set where
field .absurd : empty |
I should comment that we abandoned using both |
Now that #1565 uses irrelevant arguments, is it time to revisit this question |
Note that I have not seen much use of My bias: I've been thinking about linear logic and evidence-for-falsity, which work really (really!) well together. Agda's [I'm all for revisiting the question; I'm just slightly leaning on the 'no' side at this point.] |
Sorry I should have been clearer given the title of the issue: I'm proposing to use irrelevance |
Ah. Well, my bias still holds, but I don't think I have active reasons to object. And it would be a coherent choice to make. |
Hmm so are you proposing a) to update the definition of I'd be more on board with b), as the number of such arguments is very low and it doesn't involve altering crucial definitions for reasons that would be non-obvious to users. |
The use case is having proofs of negations be trivially equal to each other. In which case there is no |
Note that I've been successfully nudged to the positive side of this by this code which is now smooth but used to need a postulate. [It goes all the way to |
If all you want is a proof irrelevant empty type, then just a record type with an irrelevant field is indeed enough. (Though I am still a bit sad that |
As long as it's well documented why the definition is a little odd then I'm not averse to making the change. |
@tomjack has this definition of
⊥
. It comes with a big advantage: because allthe proofs of a given
Prop
are definitionally equal, we get for free that allproofs of a negative statement are equal (cf.
unique
).This would in particular allow us to change
≢-≟-identity
's type from thecumbersome
∀ {b} → a ≢ b → ∃ λ ¬eq → a ≟ b ≡ no ¬eq
to the nicer∀ {b} (¬eq : a ≢ b) → a ≟ b ≡ no ¬eq
The text was updated successfully, but these errors were encountered: