Re: [TYPES] Progress + Preservation = Evaluation
Philip Wadler <[email protected]>
| Newsgroups | gmane.comp.science.types |
|---|---|
| Message-ID | <CAESRbcpgOSNYH0FDnkg8gNbWEPn_zJ_etycm3q_JffjC5s_M1A__23078.4950349063$1530918109$gmane$org@mail.gmail.com> |
[ The Types Forum, http://lists.seas.upenn.edu/mailman/listinfo/types-list ] Thanks, Sam and Andreas, for the elegant examples of how to encode general recursion in a language that guarantees termination. Sam, am I right in thinking Conor's paper does not touch on the idea of combining constructive proofs of progress and preservation to derive a constructive evaluator? (But I could apply Conor's technique or a trampoline to express such an evaluator. Indeed, I considered using Delay for the evaluator in the textbook, but decided that supplying a step count was simpler, and avoided the need to explain coinduction.) Cheers, -- P . \ Philip Wadler, Professor of Theoretical Computer Science, . /\ School of Informatics, University of Edinburgh . / \ and Senior Research Fellow, IOHK . http://homepages.inf.ed.ac.uk/wadler/ Too brief? Here's why: http://www.emailcharter.org/ On 6 July 2018 at 19:23, Sam Lindley <[email protected]> wrote: > You should certainly cite Conor McBride's MPC 2015 paper > "Turing-Completeness Totally Free": > > https://personal.cis.strath.ac.uk/conor.mcbride/TotallyFree.pdf > > Sam > > On 06/07/18 17:49, Philip Wadler wrote: > >> [ The Types Forum, http://lists.seas.upenn.edu/ma >> ilman/listinfo/types-list ] >> >> >> >> >> Everyone on this list will be familiar with Progress and Preservation >> for terms in a typed calculus. Write ∅ ⊢ M : A to indicate that term >> M has type A for closed M. >> >> Progress. If ∅ ⊢ M : A then either M is a value or M —→ N, >> for some term N. >> >> Preservation. If ∅ ⊢ M : A and M —→ N then ∅ ⊢ N : A. >> >> It is easy to combine these two proofs into an evaluator. >> Write —↠ for the transitive and reflexive closure of —→. >> >> Evaluation. If ∅ ⊢ M : A, then for every natural number n, >> either M —↠ V, where V is a value and the reduction sequence >> has no more than n steps, or M —↠ N, where N is not a value >> and the reduction sequence has n steps. >> >> Evaluation implies that either M —↠ V or there is an infinite >> sequence M —→ M₁ —→ M₂ —→ ... that never reduces to a value; >> but this last result is not constructive, as deciding which of >> the two results holds is not decidable. >> >> An Agda implementation of Evaluation provides an evaluator for terms: >> given a number n it will perform up to n steps of evaluation, stopping >> early if a value is reached. This is entirely obvious (at least in >> retrospect), but I have not seen it written down anywhere. For >> instance, this approach is not exploited in Software Foundations to >> evaluate terms (it uses a normalize tactic instead). I have used it >> in my draft textbook: >> >> https:plfa.inf.ed.ac.uk >> >> Questions: What sources in the literature should one cite for this >> technique? How well-known is it as folklore? Cheers, -- P >> >> >> . \ Philip Wadler, Professor of Theoretical Computer Science, >> . /\ School of Informatics, University of Edinburgh >> . / \ and Senior Research Fellow, IOHK >> . http://homepages.inf.ed.ac.uk/wadler/ >> >> Too brief? Here's why: http://www.emailcharter.org/ >> >> >> >> The University of Edinburgh is a charitable body, registered in >> Scotland, with registration number SC005336. >> >> > -- > The University of Edinburgh is a charitable body, registered in > Scotland, with registration number SC005336. > > > The University of Edinburgh is a charitable body, registered in Scotland, with registration number SC005336.