Description
The current definition of Data.Empty
, and its derivative sub-module Data.Empty.Irrelevant
are the basis of the current (re-)definition of Relation.Nullary.Negation
and ... everything else involving ⊥
and negation ¬ A
etc.
What's at present missing, and responsible for the artificial distinction between
Data.Empty.Irrelevant.⊥-elim : ∀ {w} {Whatever : Set w} → .⊥ → Whatever
Data.Empty.⊥-elim : ∀ {w} {Whatever : Set w} → ⊥ → Whatever
is the equivalence of .⊥
and ⊥
... ie that ⊥
is Recomputable
.
NB Recomputable
seems to be the modern-dress version of the very old idea that certain types (negated formulae, among others) have no computational content, that is, we can't make essential use (eg by pattern-matching) of their inhabitants in order to define/prove... other things.
Well, the use of pattern-matching against the empty pattern ()
ensures that ⊥
itself is Recomputable
:
Recomputable : ∀ {a} (A : Set a) → Set a
Recomputable A = .A → A
-- ⊥ is Recomputable
⊥-recompute : Recomputable ⊥
⊥-recompute ()
... and this is already provable in the current formulation of the library... and hence that the above two elimination principles are interderivable (so: do we need both, or does one suffice? UPDATED: does the asymmetry in the use of irrelevant marks in types between assumptions and conclusions mean that this cannot precisely be the case?). See branch, with no (seemingly!?) wider knock-on consequences for the rest of the library.
So: we should reconcile these things, and their many consequences; esp. wrt proving Recomputable
for all kinds of types, notably product types (below), negated types, decidable types, ... in general at least (conjecture!?) the (hereditarily) Harrop formulas, and more generally, any 'Glivenko class' of formulas (ditto.).
Question/Issue: Why haven't we done this before/already? cf. #645 / #652 / #762