Skip to content

is Recomputable #2199

Closed
Closed
@jamesmckinna

Description

@jamesmckinna

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions