Don't forget to get in touch with me if you want to do the mini-course over Zoom next month, on normalization. ]]>We discuss the problem of the or-elimination rule in natural deduction, which does not have the correct form for natural deduction inferences. It is a research problem to fix this!

Don't forget to get in touch with me if you want to do the mini-course over Zoom next month, on normalization. ]]>Aaron StumpBuzzsprout-9191482Tue, 14 Sep 2021 00:00:00 -0500744chapter e, proof theory, natural deduction , disjunction36fullfalseImplication rules for natural deductionImplication rules for natural deductionWe discuss further inferences in natural deduction, in particular implication introduction and elimination.]]>We discuss further inferences in natural deduction, in particular implication introduction and elimination.]]>Aaron StumpBuzzsprout-9191474Tue, 14 Sep 2021 00:00:00 -0500697chapter e, proof theory , natural deduction , implication35fullfalseNatural DeductionNatural DeductionThis episode begins the discussion of the style of proof known as Natural Deduction, invented by Gerhard Gentzen, a student of Hermann Weyl, himself a student of David Hilbert (sorry, I said incorrectly that Gentzen was Hilbert's own student). Each logical connective (like OR, AND, IMPLIES, etc.) has introduction rules that let you prove formulas built with that connective; and elimination rules that let you deduce consequences from a proven formula built with that connective.]]>This episode begins the discussion of the style of proof known as Natural Deduction, invented by Gerhard Gentzen, a student of Hermann Weyl, himself a student of David Hilbert (sorry, I said incorrectly that Gentzen was Hilbert's own student). Each logical connective (like OR, AND, IMPLIES, etc.) has introduction rules that let you prove formulas built with that connective; and elimination rules that let you deduce consequences from a proven formula built with that connective.]]>Aaron StumpBuzzsprout-9178996Sat, 11 Sep 2021 23:00:00 -0500730chapter e, proof theory, natural deduction34fullfalseRules of proof, standard proof systemsRules of proof, standard proof systemsWe continue our gradual entry into proof theory by talking about reflecting meta-logical reasoning into logical rules, and naming the three basic proof systems (Hilbert-style, natural deduction, and sequent calculus).

Advertising for the October 3-session Zoom mini-course on normalization continues. Email me if you are interested! This is just for ITTC listeners.

Finally, if you like the podcast and want to support it, would you consider a small ($5 or $10 is great) donation? This is not so much to cover the $12/month hosting fee at Buzzsprout but to get some kudos here at my institution, so people here know that I have a podcast [grin] and that listeners like it. To donate, go here, then choose "Colleges", then "College of Liberal Arts and Sciences", and then tick "Computer Science Development Fund". For "gift details", please leave "gift instructions" that say the gift is for Aaron Stump for the Iowa Type Theory Commute podcast. Then the money will get to the right place for me to use it for this. Thanks a lot in advance!]]>We continue our gradual entry into proof theory by talking about reflecting meta-logical reasoning into logical rules, and naming the three basic proof systems (Hilbert-style, natural deduction, and sequent calculus).

Advertising for the October 3-session Zoom mini-course on normalization continues. Email me if you are interested! This is just for ITTC listeners.

Finally, if you like the podcast and want to support it, would you consider a small ($5 or $10 is great) donation? This is not so much to cover the $12/month hosting fee at Buzzsprout but to get some kudos here at my institution, so people here know that I have a podcast [grin] and that listeners like it. To donate, go here, then choose "Colleges", then "College of Liberal Arts and Sciences", and then tick "Computer Science Development Fund". For "gift details", please leave "gift instructions" that say the gift is for Aaron Stump for the Iowa Type Theory Commute podcast. Then the money will get to the right place for me to use it for this. Thanks a lot in advance!]]>Aaron StumpBuzzsprout-9164254Wed, 08 Sep 2021 23:00:00 -0500765chapter e, proof theory33fullfalseDifferent proof systems, distinguishing logical rules from domain axiomsDifferent proof systems, distinguishing logical rules from domain axiomsI highlight two basic points in this continuing warm-up to proof theory: there are different proof systems for the same logics, and it is customary to separate purely logical rules (dealing with propositional connectives and quantifiers, for example) from rules or axioms for some particular domain (like axioms about arithmetic, or whatever domain is of interest).]]>I highlight two basic points in this continuing warm-up to proof theory: there are different proof systems for the same logics, and it is customary to separate purely logical rules (dealing with propositional connectives and quantifiers, for example) from rules or axioms for some particular domain (like axioms about arithmetic, or whatever domain is of interest).]]>Aaron StumpBuzzsprout-9126752Wed, 01 Sep 2021 22:00:00 -0500722chapter e, proof theory32fullfalseIntroduction to Proof Theory (Start of Season 3)Introduction to Proof Theory (Start of Season 3)This is the start of Season 3 of the podcast. We are beginning with a new chapter (Chapter 14) on Proof Theory. This episode gives some basic introduction to the history and broad concerns of proof theory. There is even music, composed and played by yours truly, chez nous...]]>This is the start of Season 3 of the podcast. We are beginning with a new chapter (Chapter 14) on Proof Theory. This episode gives some basic introduction to the history and broad concerns of proof theory. There is even music, composed and played by yours truly, chez nous...]]>Aaron StumpBuzzsprout-9114242Tue, 31 Aug 2021 00:00:00 -05001097chapter e, proof theory31fullfalseModula-2Modula-2In this episode I discuss the paper "Modula-2 and Oberon" by Niklaus Wirth. Modula-2 introduced (it seems from the paper) the idea of having modules with explicit import and import lists -- something we saw at the start of our look at module systems with Haskell's module system. I note some interesting historical points raised by the paper.]]>In this episode I discuss the paper "Modula-2 and Oberon" by Niklaus Wirth. Modula-2 introduced (it seems from the paper) the idea of having modules with explicit import and import lists -- something we saw at the start of our look at module systems with Haskell's module system. I note some interesting historical points raised by the paper.]]>Aaron StumpBuzzsprout-8935762Tue, 27 Jul 2021 23:00:00 -0500689chapter d, module systems, garbage collection, type safety, Modula-2235fullfalseDecomposing recursions using algebrasDecomposing recursions using algebrasAnalogously to the decomposition of a datatype into a functor (which can be built from other functors to assemble a bigger language from smaller pieces of languages) and a single expression datatype with a sole constructor that builds an Expr from an F Expr (where F is the functor) -- analogously, a recursion can be decomposed into algebras and a fold function that applies the algebra throughout the datatype. ]]>Analogously to the decomposition of a datatype into a functor (which can be built from other functors to assemble a bigger language from smaller pieces of languages) and a single expression datatype with a sole constructor that builds an Expr from an F Expr (where F is the functor) -- analogously, a recursion can be decomposed into algebras and a fold function that applies the algebra throughout the datatype. ]]>Aaron StumpBuzzsprout-8854671Mon, 12 Jul 2021 22:00:00 -0500714chapter d, modular datatypes , functors , algebras234fullfalseReassembling datatypes from functors using a fixed-point Reassembling datatypes from functors using a fixed-point Last episode we discussed how functors can describe a single level of a datatype. In this episode, we discuss how to put these functors back together into a datatype, using disjoint unions of functors and a fixed-point datatype. The latter expresses the idea that inductive data is built in any finite number of layers, where each layer is described by the functor for the datatype.]]>Last episode we discussed how functors can describe a single level of a datatype. In this episode, we discuss how to put these functors back together into a datatype, using disjoint unions of functors and a fixed-point datatype. The latter expresses the idea that inductive data is built in any finite number of layers, where each layer is described by the functor for the datatype.]]>Aaron StumpBuzzsprout-8843076Sat, 10 Jul 2021 22:00:00 -0500616chapter d, module systems, modular datatypes, functors233fullfalseDecomposing datatypes into functorsDecomposing datatypes into functorsThis episode continues the discussion of Swierstra's paper "Datatypes à la Carte", explaining how we can decompose a datatype into the application of a fixed-point type constructor and then a functor. The functor itself can be assembled from other functors for pieces of the datatype. This makes modular datatypes possible.]]>This episode continues the discussion of Swierstra's paper "Datatypes à la Carte", explaining how we can decompose a datatype into the application of a fixed-point type constructor and then a functor. The functor itself can be assembled from other functors for pieces of the datatype. This makes modular datatypes possible.]]>Aaron StumpBuzzsprout-8806243Sat, 03 Jul 2021 12:00:00 -0500818chapter d, module systems, modular datatypes232fullfalseModular datatypes: introducing Swierstra's paper "Datatypes à la Carte"Modular datatypes: introducing Swierstra's paper "Datatypes à la Carte"In a really wonderful paper of some few years back, Swierstra introduced the idea of modular datatypes using ideas from universal algebra. Modular datatypes allow one to assemble a bigger datatype from component datatypes, and combine functions written on the component datatypes in a modular way. In this episode I introduce the paper and the problem (dubbed the expression problem by Phil Wadler) it is trying to solve. Modular datatypes are a different form of modularity that I would like to consider in the context of the discussion of module systems we have been engaged in now for a while in Chapter 13 of the podcast.]]>In a really wonderful paper of some few years back, Swierstra introduced the idea of modular datatypes using ideas from universal algebra. Modular datatypes allow one to assemble a bigger datatype from component datatypes, and combine functions written on the component datatypes in a modular way. In this episode I introduce the paper and the problem (dubbed the expression problem by Phil Wadler) it is trying to solve. Modular datatypes are a different form of modularity that I would like to consider in the context of the discussion of module systems we have been engaged in now for a while in Chapter 13 of the podcast.]]>Aaron StumpBuzzsprout-8759465Thu, 24 Jun 2021 17:00:00 -0500530chapter d, modular datatypes231fullfalseModules for Mathematical Theories (MMT)Modules for Mathematical Theories (MMT)In a 2013 journal article titled "A Scalable Module System", Florian Rabe and Michael Kohlhase propose a module system called MMT (Modules for Mathematical Theories) for structuring mathematical knowledge. The paper has a very interesting general discussion of module systems, from programming languages but also other areas like algebraic specification and theorem proving. The system is based on a rather small set of concepts which subsume those of, for example, Standard ML's module system. Thought-provoking!]]>In a 2013 journal article titled "A Scalable Module System", Florian Rabe and Michael Kohlhase propose a module system called MMT (Modules for Mathematical Theories) for structuring mathematical knowledge. The paper has a very interesting general discussion of module systems, from programming languages but also other areas like algebraic specification and theorem proving. The system is based on a rather small set of concepts which subsume those of, for example, Standard ML's module system. Thought-provoking!]]>Aaron StumpBuzzsprout-8670925Tue, 08 Jun 2021 22:00:00 -0500711chapter d, module systems, Standard ML, MMT230fullfalseSome thoughts on module systems so farSome thoughts on module systems so farI look back at the module systems we considered so far (Haskell's, Standard ML's, and Agda's), and consider a few points that are on my mind about these. I also mention a few other languages' module systems (Clojure, Java 9). I also ponder names and namespace management.]]>I look back at the module systems we considered so far (Haskell's, Standard ML's, and Agda's), and consider a few points that are on my mind about these. I also mention a few other languages' module systems (Clojure, Java 9). I also ponder names and namespace management.]]>Aaron StumpBuzzsprout-8546930Tue, 18 May 2021 23:00:00 -0500700chapter d, module systems229fullfalseA look at Agda's module systemA look at Agda's module systemAgda's module system (beautifully described here) could be seen as intermediate between Haskell's and Standard ML's. It supports nested parametrized modules with information hiding, but does not go all the way to higher-order functors (as in Standard ML).]]>Agda's module system (beautifully described here) could be seen as intermediate between Haskell's and Standard ML's. It supports nested parametrized modules with information hiding, but does not go all the way to higher-order functors (as in Standard ML).]]>Aaron StumpBuzzsprout-8496887Wed, 12 May 2021 05:00:00 -0500844chapter d, module systems, Agda228fullfalseStandard ML: the Newmar King-Aire of module systemsStandard ML: the Newmar King-Aire of module systemsSML has arguably the most complicated/powerful module system of any existing programming language. It is a luxury RV to Haskell's camper van. I take a high-level look, following a very nice paper by Xavier Leroy, titled "A modular module system".]]>SML has arguably the most complicated/powerful module system of any existing programming language. It is a luxury RV to Haskell's camper van. I take a high-level look, following a very nice paper by Xavier Leroy, titled "A modular module system".]]>Aaron StumpBuzzsprout-8489877Mon, 10 May 2021 00:00:00 -0500831chapter d, module systems, Standard ML227fullfalseA look at Haskell's module systemA look at Haskell's module systemI briefly survey the main features of Haskell's module system, and reflect a bit on its design.]]>I briefly survey the main features of Haskell's module system, and reflect a bit on its design.]]>Aaron StumpBuzzsprout-8410915Mon, 26 Apr 2021 20:00:00 -05001337chapter d, module systems, Haskell226fullfalseLet's talk about modules!Let's talk about modules!I start Chapter 13 (in Season 2) of the podcast, on module systems. Almost all programming languages I know include some kind of scheme for modules, packages, namespaces, or something like this. I discuss the high-level ideas of namespace management and type abstraction, two main use cases for module systems. Subsequent episodes will discuss module systems (from papers or documentation) of various languages.]]>I start Chapter 13 (in Season 2) of the podcast, on module systems. Almost all programming languages I know include some kind of scheme for modules, packages, namespaces, or something like this. I discuss the high-level ideas of namespace management and type abstraction, two main use cases for module systems. Subsequent episodes will discuss module systems (from papers or documentation) of various languages.]]>Aaron StumpBuzzsprout-8367847Tue, 20 Apr 2021 00:00:00 -05001238chapter d, module systems225fullfalseChurch-style Typing and Intersection Types: Glimpses of Benjamin Pierce's DissertationChurch-style Typing and Intersection Types: Glimpses of Benjamin Pierce's DissertationI was reading Benjamin Pierce's dissertation, and learning some intriguing things about intersection types in the context of Church-style typing. I summarize the parts of this I comprehended so far.]]>I was reading Benjamin Pierce's dissertation, and learning some intriguing things about intersection types in the context of Church-style typing. I summarize the parts of this I comprehended so far.]]>Aaron StumpBuzzsprout-8316721Mon, 12 Apr 2021 00:00:00 -0500785chapter c, intersection types , Church-style typing224fullfalseIntersections and Unions in Practice; Failure of Type Preservation with UnionsIntersections and Unions in Practice; Failure of Type Preservation with UnionsI discuss the perhaps surprising fact that union and intersection types are quite actively used and promoted for languages like TypeScript, also OO languages like Scala. I also try to explain briefly a counterexample to type preservation with union types, which you can find at the start of Section 2 of Barbanera and Dezani-Ciancaglini's paper "Intersection and Union Types: Syntax and Semantics", where it is attributed to Benjamin Pierce.]]>I discuss the perhaps surprising fact that union and intersection types are quite actively used and promoted for languages like TypeScript, also OO languages like Scala. I also try to explain briefly a counterexample to type preservation with union types, which you can find at the start of Section 2 of Barbanera and Dezani-Ciancaglini's paper "Intersection and Union Types: Syntax and Semantics", where it is attributed to Benjamin Pierce.]]>Aaron StumpBuzzsprout-8185668Mon, 22 Mar 2021 00:00:00 -0500818chapter c, intersection types , union types, TypeScript , type preservation223fullfalseNormal terms are typable with intersection typesNormal terms are typable with intersection typesI sketch the argument that pure lambda terms in normal form are typable using intersection types. This completes the argument started in the previous episode, that intersection types are complete for normalizing terms: normal forms are typable, and typing is preserved by beta-expansion. Hence any normalizing term is typable (since it reduces to a normal form by definition, and from this normal form we can walk typing back to the term).]]>I sketch the argument that pure lambda terms in normal form are typable using intersection types. This completes the argument started in the previous episode, that intersection types are complete for normalizing terms: normal forms are typable, and typing is preserved by beta-expansion. Hence any normalizing term is typable (since it reduces to a normal form by definition, and from this normal form we can walk typing back to the term).]]>Aaron StumpBuzzsprout-8080925Fri, 05 Mar 2021 00:00:00 -0600602chapter c, intersection types, beta expansion , normal forms222fullfalseIntersection Types Preserved Under Beta-ExpansionIntersection Types Preserved Under Beta-ExpansionType systems usually have the type preservation property: if a typable term beta-reduces, then the resulting term is still typable. So typing is closed under beta-reduction. With intersection typing, typing is also closed under beta-expansion, which is a critical step in showing that intersection typing is complete for normalizing terms: any normalizing term can be typed with intersection types (and simple function types). ]]>Type systems usually have the type preservation property: if a typable term beta-reduces, then the resulting term is still typable. So typing is closed under beta-reduction. With intersection typing, typing is also closed under beta-expansion, which is a critical step in showing that intersection typing is complete for normalizing terms: any normalizing term can be typed with intersection types (and simple function types). ]]>Aaron StumpBuzzsprout-7871629Mon, 15 Feb 2021 00:00:00 -0600734chapter c, intersection types, beta expansion221fullfalseIntroduction to Intersection TypesIntroduction to Intersection TypesIn a type system with intersection types, a term t that has type A and also has type B can be assigned the type 'A intersect B'. This episode begins Chapter 12 of the podcast on intersection types.]]>In a type system with intersection types, a term t that has type A and also has type B can be assigned the type 'A intersect B'. This episode begins Chapter 12 of the podcast on intersection types.]]>Aaron StumpBuzzsprout-7758097Mon, 08 Feb 2021 23:00:00 -0600703chapter c, intersection types220fullfalseDeriving disjointness of constructor ranges in RelTTDeriving disjointness of constructor ranges in RelTTResponding to an email question from a listener, I explain how to derive a form of inconsistency from the assumption that True is related to False at type Bool.]]>Responding to an email question from a listener, I explain how to derive a form of inconsistency from the assumption that True is related to False at type Bool.]]>Aaron StumpBuzzsprout-7625557Tue, 02 Feb 2021 00:00:00 -0600705chapter b, relational type theory, relational semantics , disjoint constructor ranges , contradiction219fullfalseSoftware Design and Intrinsic IdentitySoftware Design and Intrinsic IdentityI muse about the hopeless prospect of a single intrinsic conceptual decomposition of a problem domain in software engineering, and relate this to the idea of intrinsic identity we discussed recently for Relational Type Theory.]]>I muse about the hopeless prospect of a single intrinsic conceptual decomposition of a problem domain in software engineering, and relate this to the idea of intrinsic identity we discussed recently for Relational Type Theory.]]>Aaron StumpBuzzsprout-7405441Wed, 20 Jan 2021 22:00:00 -0600562chapter b, relational type theory, intrinsic identity, software design218fullfalseIdentity Inclusion in Relational Type TheoryIdentity Inclusion in Relational Type TheoryWhere relational semantics for parametric polymorphism often includes a lemma called Identity Extension (discussed in Episode 10, on the paper "Types, Abstraction, and Parametric Polymorphism"), RelTT instead has a refinement of this called Identity Inclusion. Instead of saying that the interpretation of every closed type is the identity relation (Identity Extension), the Identity Inclusion lemma identifies certain types whose relational meaning is included in the identity relation, and certain types which include the identity relation. So there are two subset relations, going in opposite directions. The two classes of types are first, the ones where all quantifiers occur only positively, and second, where they occur only negatively. Using Identity Inclusion, we can derive transitivity for forall-positive types, which is needed to derive induction following the natural generalization of the scheme in Wadler's paper (last episode).]]>Where relational semantics for parametric polymorphism often includes a lemma called Identity Extension (discussed in Episode 10, on the paper "Types, Abstraction, and Parametric Polymorphism"), RelTT instead has a refinement of this called Identity Inclusion. Instead of saying that the interpretation of every closed type is the identity relation (Identity Extension), the Identity Inclusion lemma identifies certain types whose relational meaning is included in the identity relation, and certain types which include the identity relation. So there are two subset relations, going in opposite directions. The two classes of types are first, the ones where all quantifiers occur only positively, and second, where they occur only negatively. Using Identity Inclusion, we can derive transitivity for forall-positive types, which is needed to derive induction following the natural generalization of the scheme in Wadler's paper (last episode).]]>Aaron StumpBuzzsprout-7346347Mon, 18 Jan 2021 12:00:00 -0600827chapter b, relational type theory, relational semantics , identity extension , identity inclusion117fullfalseOn the paper "The Girard-Reynolds Isomorphism" by Philip WadlerOn the paper "The Girard-Reynolds Isomorphism" by Philip WadlerI give a brief glimpse at Phil Wadler's important paper "The Girard-Reynolds Isomorphism", which is quite relevant for Relational Type Theory as it shows that relational semantics for the usual type for Church-encoded natural numbers implies induction. RelTT uses a generalization of these ideas to derive induction for any positive type family.]]>I give a brief glimpse at Phil Wadler's important paper "The Girard-Reynolds Isomorphism", which is quite relevant for Relational Type Theory as it shows that relational semantics for the usual type for Church-encoded natural numbers implies induction. RelTT uses a generalization of these ideas to derive induction for any positive type family.]]>Aaron StumpBuzzsprout-7346293Mon, 18 Jan 2021 00:00:00 -0600652chapter b, relational type theory, relational semantics , papers 216fullfalseEquivalence of inductive and parametric naturals in RelTTEquivalence of inductive and parametric naturals in RelTTI talk through a proof I just completed that the type of relationally inductive naturals and the type of parametric naturals are equivalent. This is similar to proofs one can find in a paper of Philip Wadler's titled "The Girard-Reynolds Isomorphism", which I plan to discuss in the next episode.]]>I talk through a proof I just completed that the type of relationally inductive naturals and the type of parametric naturals are equivalent. This is similar to proofs one can find in a paper of Philip Wadler's titled "The Girard-Reynolds Isomorphism", which I plan to discuss in the next episode.]]>Aaron StumpBuzzsprout-7028224Mon, 28 Dec 2020 00:00:00 -0600863chapter b, relational type theory, relational semantics , papers 215fullfalseExamples in Relational Type TheoryExamples in Relational Type TheoryI discuss how to define internalized relational typings, implicit products, and two forms of natural number types, in RelTT.]]>I discuss how to define internalized relational typings, implicit products, and two forms of natural number types, in RelTT.]]>Aaron StumpBuzzsprout-6979636Wed, 23 Dec 2020 16:00:00 -06001359chapter b, relational type theory, relational semantics, natural number types214fullfalseThe Semantics of Relational TypesThe Semantics of Relational TypesIn this episode, I discuss the semantics of the proposed six type constructors of RelTT.]]>In this episode, I discuss the semantics of the proposed six type constructors of RelTT.]]>Aaron StumpBuzzsprout-6979597Tue, 22 Dec 2020 23:00:00 -06001278chapter b, relational type theory, relational semantics213fullfalseThe Types of Relational Type TheoryThe Types of Relational Type TheoryThis episode continues the introduction of RelTT by presenting the types of the language. Because the system is based on binary relational semantics, we can include binary relational operators like composition and converse as type constructs! Strange. The language also promotes terms to relations, by viewing them as functions and then taking their graphs as the relational meaning.]]>This episode continues the introduction of RelTT by presenting the types of the language. Because the system is based on binary relational semantics, we can include binary relational operators like composition and converse as type constructs! Strange. The language also promotes terms to relations, by viewing them as functions and then taking their graphs as the relational meaning.]]>Aaron StumpBuzzsprout-6853141Mon, 14 Dec 2020 23:00:00 -0600890chapter b, relational type theory, relational semantics, relational type operators212fullfalseIntroducing Relational Type TheoryIntroducing Relational Type TheoryThis episode begins Chapter 11 of the podcast, on Relational Type Theory. This is a new approach to type theory that I am developing. The idea is to design a type system based on the binary relational semantics for types, which we considered in Chapter 10. This episode recalls some of that semantics.]]>This episode begins Chapter 11 of the podcast, on Relational Type Theory. This is a new approach to type theory that I am developing. The idea is to design a type system based on the binary relational semantics for types, which we considered in Chapter 10. This episode recalls some of that semantics.]]>Aaron StumpBuzzsprout-6853105Mon, 14 Dec 2020 23:00:00 -0600802chapter b, relational type theory, relational semantics211fullfalseOn the paper "Types, Abstraction, and Parametric Polymorphism"On the paper "Types, Abstraction, and Parametric Polymorphism"In this episode I discuss one of the greatest papers in the history of Programming Language's research, namely "Types, Abstraction, and Parametric Polymorphism" by the great John C. Reynolds. I summarize the two interconnected semantics for polymorphic types proposed by Reynolds: one which interprets types as sets and programs as members of those sets, and another which interprets types as relations on the sets from the first interpretation. Listen and you will get to hear my aha moment as I understand live on air what the Identity Extension Lemma really means. See also this blog post on the same topic.]]>In this episode I discuss one of the greatest papers in the history of Programming Language's research, namely "Types, Abstraction, and Parametric Polymorphism" by the great John C. Reynolds. I summarize the two interconnected semantics for polymorphic types proposed by Reynolds: one which interprets types as sets and programs as members of those sets, and another which interprets types as relations on the sets from the first interpretation. Listen and you will get to hear my aha moment as I understand live on air what the Identity Extension Lemma really means. See also this blog post on the same topic.]]>Aaron StumpBuzzsprout-6563212Wed, 25 Nov 2020 23:00:00 -06001279chapter a, logical relations, parametric models, John C. Reynolds210fullfalseParametric models and representation independenceParametric models and representation independenceToday I discuss the construction of relational models of typed lambda calculus (say, System F), that support the idea of representation independence. This is a feature of a type theory where different implementations of the same interface can be proved equivalent, and used interchangeably in the theory. Only in the past couple years have researchers proposed theories like this, but the semantic ideas underlying such theories have been around since Reynolds's seminal paper "Types, Abstraction, and Parametric Polymorphism".]]>Today I discuss the construction of relational models of typed lambda calculus (say, System F), that support the idea of representation independence. This is a feature of a type theory where different implementations of the same interface can be proved equivalent, and used interchangeably in the theory. Only in the past couple years have researchers proposed theories like this, but the semantic ideas underlying such theories have been around since Reynolds's seminal paper "Types, Abstraction, and Parametric Polymorphism".]]>Aaron StumpBuzzsprout-6284236Mon, 09 Nov 2020 00:00:00 -06001113chapter a, logical relations, parametric models, representation independence29fullfalseExplaining my encoding of a HOAS datatype, part 2Explaining my encoding of a HOAS datatype, part 2I continue discussing the approach to HOAS from my paper "A Weakly Initial Algebra for Higher-Order Abstract Syntax in Cedille", 2019, available from my web page. ]]>I continue discussing the approach to HOAS from my paper "A Weakly Initial Algebra for Higher-Order Abstract Syntax in Cedille", 2019, available from my web page. ]]>Aaron StumpBuzzsprout-6284173Mon, 09 Nov 2020 00:00:00 -06001110chapter a, logical relations, higher-order, hoas28fullfalseExplaining my encoding of a HOAS datatype, part 1Explaining my encoding of a HOAS datatype, part 1I start explaining an idea from my paper "A Weakly Initial Algebra for Higher-Order Abstract Syntax in Cedille", 2019, available from my web page. The goal is to encode a datatype (including its constructors, which we saw were troublesome for higher-order signatures generally in the previous episode) for application-free lambda terms, which I submit is the simplest higher-order datatype possible. I just explain some of the setup, and will attempt wading through the details next time.]]>I start explaining an idea from my paper "A Weakly Initial Algebra for Higher-Order Abstract Syntax in Cedille", 2019, available from my web page. The goal is to encode a datatype (including its constructors, which we saw were troublesome for higher-order signatures generally in the previous episode) for application-free lambda terms, which I submit is the simplest higher-order datatype possible. I just explain some of the setup, and will attempt wading through the details next time.]]>Aaron StumpBuzzsprout-5956789Mon, 19 Oct 2020 17:00:00 -0500602chapter a, logical relations, higher-order, hoas27fullfalseTerm models for higher-order signaturesTerm models for higher-order signaturesI discuss the problem of term models for higher-order signatures, following a prelude about the Edinburgh Logical Framework (LF) and higher-order datatypes.]]>I discuss the problem of term models for higher-order signatures, following a prelude about the Edinburgh Logical Framework (LF) and higher-order datatypes.]]>Aaron StumpBuzzsprout-5956747Mon, 19 Oct 2020 00:00:00 -0500869chapter a, logical relations, higher-order, term model26fullfalseLambda applicative structures and interpretations of lambda abstractionsLambda applicative structures and interpretations of lambda abstractionsDiscussion of definitions in "Pre-logical relations" by Honsell and Sannella, particularly the notion of a lambda applicative structure (similar to a definition in John C. Mitchell's book "Foundations for Programming Languages'). In short, lambda abstractions get interpreted in combinatory algebras by compiling away the lambda abstractions in favor of S and K combinators, which are then interpreted by the combinatory algebra. I complain about the fact that the definition of a lambda applicative structure is required to come with an interpretation function for terms (hence tying the semantics to the syntax).]]>Discussion of definitions in "Pre-logical relations" by Honsell and Sannella, particularly the notion of a lambda applicative structure (similar to a definition in John C. Mitchell's book "Foundations for Programming Languages'). In short, lambda abstractions get interpreted in combinatory algebras by compiling away the lambda abstractions in favor of S and K combinators, which are then interpreted by the combinatory algebra. I complain about the fact that the definition of a lambda applicative structure is required to come with an interpretation function for terms (hence tying the semantics to the syntax).]]>Aaron StumpBuzzsprout-5795947Wed, 07 Oct 2020 23:00:00 -0500613chapter a, logical relations, lambda applicative structure25fullfalseThe Basic LemmaThe Basic LemmaAlso known as the Fundamental Property, this is a theorem stating that for every well-typed term t : T, and every logical relation R between algebraic structures A and B, the meaning of t in A is related by R to the meaning of t in B. I view it as a straightforward semantic soundness property, but where the semantics of types is this somewhat interesting one that interprets types as binary relations on structures A and B. I muse on these matters a bit in the episode.]]>Also known as the Fundamental Property, this is a theorem stating that for every well-typed term t : T, and every logical relation R between algebraic structures A and B, the meaning of t in A is related by R to the meaning of t in B. I view it as a straightforward semantic soundness property, but where the semantics of types is this somewhat interesting one that interprets types as binary relations on structures A and B. I muse on these matters a bit in the episode.]]>Aaron StumpBuzzsprout-5683024Wed, 30 Sep 2020 16:00:00 -0500873chapter a, logical relations, basic lemma24fullfalseLogical relations are not closed under compositionLogical relations are not closed under compositionIn this episode, I talk through a small (but intricate) example from a paper titled "Pre-logical relations" by Honsell and Sannella, showing that the set of logical relations is not closed under composition. That is, you can have a logical relation between structure A and structure B, and one between B and C, but the composition (while a relation) is not a logical relation between A and C. This took me three takes to get to where I wasn't tripping over my tongue, so enjoy.]]>In this episode, I talk through a small (but intricate) example from a paper titled "Pre-logical relations" by Honsell and Sannella, showing that the set of logical relations is not closed under composition. That is, you can have a logical relation between structure A and structure B, and one between B and C, but the composition (while a relation) is not a logical relation between A and C. This took me three takes to get to where I wasn't tripping over my tongue, so enjoy.]]>Aaron StumpBuzzsprout-5232319Mon, 31 Aug 2020 16:00:00 -0500612chapter a, logical relations, higher-order, composition23fullfalseThe definition of a logical relationThe definition of a logical relationLogical relations are the relational generalization of the algebraic concept of a homomorphism -- but they go further in extending the notion of structure-preservation to higher-order structures. We discuss the basic definition in this episode.]]>Logical relations are the relational generalization of the algebraic concept of a homomorphism -- but they go further in extending the notion of structure-preservation to higher-order structures. We discuss the basic definition in this episode.]]>Aaron StumpBuzzsprout-5057519Tue, 18 Aug 2020 23:00:00 -0500639chapter a, logical relations, homomorphisms, higher-order22fullfalseIntroduction to Logical RelationsIntroduction to Logical RelationsStart of Chapter 10, on logical relations and parametricity. Basic idea of logical relation as the relational generalization of the algebraic idea of homomorphism. This is also the start of Season 2, as the fall academic year is just beginning here in Iowa.]]>Start of Chapter 10, on logical relations and parametricity. Basic idea of logical relation as the relational generalization of the algebraic idea of homomorphism. This is also the start of Season 2, as the fall academic year is just beginning here in Iowa.]]>Aaron StumpBuzzsprout-5026418Sun, 16 Aug 2020 23:00:00 -0500749chapter a, logical relations, homomorphisms21fullfalseLamping's abstract algorithmLamping's abstract algorithmThe simplified version of Lamping's algorithm for optimal beta-reduction is discussed. We have duplicators which eat their way through lambda graphs. When copying a lambda abstraction, we send one duplicator down the variable port, and another down the body port. When they meet, they cancel each other and the duplication is done. But duplication can get paused waiting for a value to come in on a wire from outside the lambda abstraction. This can lead to a situation where some other duplication needs to duplicate a lambda graph containing frozen duplicators. Then we have to decide, when two duplicators meet, should they cancel each other (signalling the end of a duplication on one level), or should one duplicate the duplicators (for an outer duplication of some lambda graph containing frozen duplicators). The abstract algorithm leaves this choice undetermined. The hairy versions of the algorithm add complex additional machinery to keep track of these levels of duplication to resolve that nondeterminism.]]>The simplified version of Lamping's algorithm for optimal beta-reduction is discussed. We have duplicators which eat their way through lambda graphs. When copying a lambda abstraction, we send one duplicator down the variable port, and another down the body port. When they meet, they cancel each other and the duplication is done. But duplication can get paused waiting for a value to come in on a wire from outside the lambda abstraction. This can lead to a situation where some other duplication needs to duplicate a lambda graph containing frozen duplicators. Then we have to decide, when two duplicators meet, should they cancel each other (signalling the end of a duplication on one level), or should one duplicate the duplicators (for an outer duplication of some lambda graph containing frozen duplicators). The abstract algorithm leaves this choice undetermined. The hairy versions of the algorithm add complex additional machinery to keep track of these levels of duplication to resolve that nondeterminism.]]>Aaron StumpBuzzsprout-4712348Sat, 25 Jul 2020 15:00:00 -0500615chapter 9, optimal beta reduction, duplication, Lamping's abstract algorithm170fullfalseExamples showing non-optimality of HaskellExamples showing non-optimality of HaskellI discuss some examples posted on my blog, QA9, which show that executables produced by ghc (the main implementation of Haskell) can exhibit non-optimal beta-reduction. Thanks to Victor Maia for major help with these.]]>I discuss some examples posted on my blog, QA9, which show that executables produced by ghc (the main implementation of Haskell) can exhibit non-optimal beta-reduction. Thanks to Victor Maia for major help with these.]]>Aaron StumpBuzzsprout-4574237Tue, 14 Jul 2020 23:00:00 -05001185chapter 9, optimal beta reduction, Haskell , non-optimal reduction169fullfalseLambda graphs with duplicators and start of Lamping's abstract algorithmLambda graphs with duplicators and start of Lamping's abstract algorithmIn this episode I talk about how to represent lambda terms as graphs with duplicator nodes for splitting edges corresponding to bound variables. I also start discussing the beginning of Lampings' abstract algorithm for optimal beta-reduction, in particular how we need to push duplicators inside lambda abstractions to initiate a lazy duplication.]]>In this episode I talk about how to represent lambda terms as graphs with duplicator nodes for splitting edges corresponding to bound variables. I also start discussing the beginning of Lampings' abstract algorithm for optimal beta-reduction, in particular how we need to push duplicators inside lambda abstractions to initiate a lazy duplication.]]>Aaron StumpBuzzsprout-4430237Fri, 03 Jul 2020 15:00:00 -05001342chapter 9, optimal beta reduction, duplication , lazy graph copying, Lamping's abstract algorithm168fullfalseDuplicating redexes as the central problem of optimal reductionDuplicating redexes as the central problem of optimal reductionWe discussed last time how with a graph-sharing implementation of untyped lambda calculus, it can happen that you are forced to break sharing and copy a lambda abstraction. We discuss in this episode the central issue with doing that, namely copying redexes and copying applications which could turn into redexes following other beta reductions. The high-level idea of the proposed solution is also discussed, namely lazy graph duplication.]]>We discussed last time how with a graph-sharing implementation of untyped lambda calculus, it can happen that you are forced to break sharing and copy a lambda abstraction. We discuss in this episode the central issue with doing that, namely copying redexes and copying applications which could turn into redexes following other beta reductions. The high-level idea of the proposed solution is also discussed, namely lazy graph duplication.]]>Aaron StumpBuzzsprout-4254818Sat, 20 Jun 2020 22:00:00 -0500966chapter 9, optimal beta reduction, duplication , lazy graph copying167fullfalseIntroduction to optimal beta reductionIntroduction to optimal beta reductionSome background on optimal beta reduction: Levy, Lamping. The main problem to overcome is duplicating a lambda abstraction that is used in two different places in your term. The solution is to try to duplicate it incrementally.]]>Some background on optimal beta reduction: Levy, Lamping. The main problem to overcome is duplicating a lambda abstraction that is used in two different places in your term. The solution is to try to duplicate it incrementally.]]>Aaron StumpBuzzsprout-4192835Tue, 16 Jun 2020 00:00:00 -05001006chapter 9, optimal beta reduction, duplication166fullfalseLexicographic terminationLexicographic terminationMany termination checkers support lexicographic (structural) recursion. The lexicographic combination of orderings on sets A and B is an ordering on A x B where a pair decreases if the A component does (and then the B component can increase unboundedly) or else the A component stays the same and the B component decreases. Connections with nested recursion and ordinals discussed.]]>Many termination checkers support lexicographic (structural) recursion. The lexicographic combination of orderings on sets A and B is an ordering on A x B where a pair decreases if the A component does (and then the B component can increase unboundedly) or else the A component stays the same and the B component decreases. Connections with nested recursion and ordinals discussed.]]>Aaron StumpBuzzsprout-4023410Tue, 02 Jun 2020 23:00:00 -0500677chapter 8 , termination checking , lexicographic recursion , ordinals , nested recursion165fullfalseMendler-style iterationMendler-style iterationAnother type-based approach to termination-checking for recursive functions over inductive datatypes is to use so-called Mendler-style iteration. On this approach, we write recursive functions by coding against a certain interface that features an abstract type R, which abstracts the datatype over which we are recursing; and a function from R to the result type of the recursion. Subdata of the input data are available at type R only, not at the original datatype. This allows us to make explicit recursive calls, but only on subdata.]]>Another type-based approach to termination-checking for recursive functions over inductive datatypes is to use so-called Mendler-style iteration. On this approach, we write recursive functions by coding against a certain interface that features an abstract type R, which abstracts the datatype over which we are recursing; and a function from R to the result type of the recursion. Subdata of the input data are available at type R only, not at the original datatype. This allows us to make explicit recursive calls, but only on subdata.]]>Aaron StumpBuzzsprout-3822887Mon, 18 May 2020 23:00:00 -0500635chapter 8 , termination checking , structural recursion , Mendler-style iteration164fullfalseWell-founded recursionWell-founded recursionWell-founded recursion is a technique to turn recursion which decreases along a well-founded ordering into a structural recursion.]]>Well-founded recursion is a technique to turn recursion which decreases along a well-founded ordering into a structural recursion.]]>Aaron StumpBuzzsprout-3822878Mon, 18 May 2020 23:00:00 -0500920chapter 8 , termination checking , structural recursion , well-founded recursion163fullfalseCompositional termination checking with sized typesCompositional termination checking with sized typesDiscussion of a compositional method of termination checking using so-called sized types. Datatypes are indexed by sizes, and recursive calls can only be made on data of strictly smaller size than the data as input to the recursion. Since the method is type-based, it is compositional: we can break out helper functions from a recursive function and not upset the termination checker. A readable and interesting tutorial on the subject is here.]]>Discussion of a compositional method of termination checking using so-called sized types. Datatypes are indexed by sizes, and recursive calls can only be made on data of strictly smaller size than the data as input to the recursion. Since the method is type-based, it is compositional: we can break out helper functions from a recursive function and not upset the termination checker. A readable and interesting tutorial on the subject is here.]]>Aaron StumpBuzzsprout-3177274Mon, 30 Mar 2020 14:00:00 -05001117chapter 8 , termination checking , sized types , compositionality162fullfalseNoncompositionality of syntactic structural-recursion checksNoncompositionality of syntactic structural-recursion checksReview of need for termination analysis for recursive functions on inductive datatypes. Discussion of a serious problem with syntactic termination checks, namely noncompositionality. A function may pass the syntactic termination check, but abstracting part of it out into a helper function may result in code which no longer passes the check. So we need a compositional termination check, which will be discussed in subsequent episodes.]]>Review of need for termination analysis for recursive functions on inductive datatypes. Discussion of a serious problem with syntactic termination checks, namely noncompositionality. A function may pass the syntactic termination check, but abstracting part of it out into a helper function may result in code which no longer passes the check. So we need a compositional termination check, which will be discussed in subsequent episodes.]]>Aaron StumpBuzzsprout-3063349Thu, 19 Mar 2020 23:00:00 -0500783chapter 8 , termination checking , structural recursion , compositionality161fullfalseStructural terminationStructural terminationStart of Chapter 8 of the podcast, on termination checking in type theory, and strong functional programming. Discussion of a little history of adding datatypes to the original pure type theory of Coq (called the Calculus of Constructions). Considering the most basic form of termination checking, which is checking syntactically that recursive calls are only made on subdata of the data input to the recursive function. ]]>Start of Chapter 8 of the podcast, on termination checking in type theory, and strong functional programming. Discussion of a little history of adding datatypes to the original pure type theory of Coq (called the Calculus of Constructions). Considering the most basic form of termination checking, which is checking syntactically that recursive calls are only made on subdata of the data input to the recursive function. ]]>Aaron StumpBuzzsprout-3032770Tue, 17 Mar 2020 00:00:00 -0500989chapter 8 , termination checking , structural recursion , calculus of inductive constructions160fullfalseProving Confluence for Untyped Lambda Calculus IIProving Confluence for Untyped Lambda Calculus IIDiscussion of the basic idea of the Tait--Martin-Loef proof of confluence for untyped lambda calculus. Let me know any requests for what to discuss in Chapter 8!]]>Discussion of the basic idea of the Tait--Martin-Loef proof of confluence for untyped lambda calculus. Let me know any requests for what to discuss in Chapter 8!]]>Aaron StumpBuzzsprout-3001876Fri, 13 Mar 2020 17:00:00 -0500732chapter 7 , metatheory , confluence , untyped lambda calculus158fullfalseProving Confluence for Untyped Lambda Calculus IProving Confluence for Untyped Lambda Calculus IStart of discussion on how to prove confluence for untyped lambda calculus. Also some discussion about the research community interested in confluence.]]>Start of discussion on how to prove confluence for untyped lambda calculus. Also some discussion about the research community interested in confluence.]]>Aaron StumpBuzzsprout-3001870Fri, 13 Mar 2020 14:00:00 -0500708chapter 7 , metatheory , confluence , untyped lambda calculus158fullfalseConfluence, and its use for conversion checkingConfluence, and its use for conversion checkingThe basic property of confluence of a nondeterministic reduction semantics: if from starting term t you can reach t1 and also t2 (by two finite reduction sequences), then there is some t3 to which t1 and t2 both reduce in a finite number of steps. The use of confluence for ensuring completeness of the conversion-checking algorithm that tests conversion of t1 and t2 by normalizing both terms and checking for alpha-equivalence (or maybe alpha,eta-equivalence).]]>The basic property of confluence of a nondeterministic reduction semantics: if from starting term t you can reach t1 and also t2 (by two finite reduction sequences), then there is some t3 to which t1 and t2 both reduce in a finite number of steps. The use of confluence for ensuring completeness of the conversion-checking algorithm that tests conversion of t1 and t2 by normalizing both terms and checking for alpha-equivalence (or maybe alpha,eta-equivalence).]]>Aaron StumpBuzzsprout-2984782Wed, 11 Mar 2020 15:00:00 -0500905chapter 7 , metatheory , confluence , conversion157fullfalseNormalization and logical consistencyNormalization and logical consistencyDiscussion of the connection between normalization and logical consistency. One approach is to prove normalization and type preservation, to show (in proof-theoretic terms) that all detours can be eliminated from proofs (this is normalization) and that the resulting proof still proves the same theorem (this is type preservation). I mention an alternative I use for Cedille, which is to use a realizability semantics (often used for normalization proofs) directly to prove consistency.]]>Discussion of the connection between normalization and logical consistency. One approach is to prove normalization and type preservation, to show (in proof-theoretic terms) that all detours can be eliminated from proofs (this is normalization) and that the resulting proof still proves the same theorem (this is type preservation). I mention an alternative I use for Cedille, which is to use a realizability semantics (often used for normalization proofs) directly to prove consistency.]]>Aaron StumpBuzzsprout-2963608Mon, 09 Mar 2020 14:00:00 -0500883chapter 7 , metatheory , normalization , logical consistency , realizability156fullfalseNormalization in type theory: where it is needed, and where notNormalization in type theory: where it is needed, and where notNormalization (every term reaches a normal form via some reduction sequence) is needed essentially in type theory due to the Curry-Howard isomorphism: diverging programs become unsound proofs. Traditionally, type theorists have also desired normalization or even termination (every term reaches a normal form no matter what reduction sequence is explored in a nondeterministic operational semantics) for conversion checking. This is the process of confirming that types are equivalent during type checking, which, due to dependent types, can require checking program equivalence. The latter is usually restricted to just beta-equivalence (where beta-reduction is substitution of argument for input variable when applying a function), because richer notions of program equivalence are usually undecidable. I have a mini-rant in this episode explaining why this usual requirement of normalization for conversion checking is not sensible.

Also I note that you can find the episodes of the podcast organized by chapter on my web page.]]>Normalization (every term reaches a normal form via some reduction sequence) is needed essentially in type theory due to the Curry-Howard isomorphism: diverging programs become unsound proofs. Traditionally, type theorists have also desired normalization or even termination (every term reaches a normal form no matter what reduction sequence is explored in a nondeterministic operational semantics) for conversion checking. This is the process of confirming that types are equivalent during type checking, which, due to dependent types, can require checking program equivalence. The latter is usually restricted to just beta-equivalence (where beta-reduction is substitution of argument for input variable when applying a function), because richer notions of program equivalence are usually undecidable. I have a mini-rant in this episode explaining why this usual requirement of normalization for conversion checking is not sensible.

Also I note that you can find the episodes of the podcast organized by chapter on my web page.]]>Aaron StumpBuzzsprout-2938366Fri, 06 Mar 2020 15:00:00 -0600988chapter 7 , metatheory , normalization , conversion , feasible computation155fullfalseIntroduction to normalizationIntroduction to normalizationDiscussion of normalization (there is some way to reach a normal form) versus termination (no matter how you execute the term you reach a normal form). A little more discussion of strong FP. For type theory, the need for normalization due to Curry-Howard and due to conversion checking.]]>Discussion of normalization (there is some way to reach a normal form) versus termination (no matter how you execute the term you reach a normal form). A little more discussion of strong FP. For type theory, the need for normalization due to Curry-Howard and due to conversion checking.]]>Aaron StumpBuzzsprout-2931700Thu, 05 Mar 2020 22:00:00 -0600767chapter 7 , metatheory , normalization , strong FP , conversion153fullfalseProving type safety; upcoming metatheoretic propertiesProving type safety; upcoming metatheoretic propertiesType safety proofs are big confirmations requiring consideration of all your operational and typing rules. So they rarely contain much deep insight, but are needed to confirm your language's type system is correct. Looking ahead, this episode also talks about the different between normalization and termination when your language is nondeterministic, and the property of confluence. ]]>Type safety proofs are big confirmations requiring consideration of all your operational and typing rules. So they rarely contain much deep insight, but are needed to confirm your language's type system is correct. Looking ahead, this episode also talks about the different between normalization and termination when your language is nondeterministic, and the property of confluence. ]]>Aaron StumpBuzzsprout-2918047Wed, 04 Mar 2020 15:00:00 -0600787chapter 7 , metatheory , type safety , type preservation, progress , normalization , confluence152fullfalseThe progress property and the problem of axioms in type theoryThe progress property and the problem of axioms in type theoryWe review the metatheoretic property of type safety, decomposed into two properties called type preservation and progress. Discussion of progress in the context of type theory, where adding axioms can lead to a failure of progress.]]>We review the metatheoretic property of type safety, decomposed into two properties called type preservation and progress. Discussion of progress in the context of type theory, where adding axioms can lead to a failure of progress.]]>Aaron StumpBuzzsprout-2911240Tue, 03 Mar 2020 23:00:00 -0600613chapter 7 , metatheory , type safety , type preservation, progress152fullfalseIntroduction to type safetyIntroduction to type safetyType safety is a basic property of both statically typed programming languages and type theories. It has traditionally (past few decades) been decomposed into type preservation and progress. Type preservation says that if a program expression e has some type T, then running e a bit will give a result that still has type T (and type preservation would apply again to that result, to preserve the type T indefinitely along the execution of e). Progress says that well-typed expressions cannot get stuck computationally: they cannot reduce to a form where the operational semantics is then undefined. This is how we model the idea that the type system is preventing certain kinds of failures: make those failures correspond to undefined behavior. ]]>Type safety is a basic property of both statically typed programming languages and type theories. It has traditionally (past few decades) been decomposed into type preservation and progress. Type preservation says that if a program expression e has some type T, then running e a bit will give a result that still has type T (and type preservation would apply again to that result, to preserve the type T indefinitely along the execution of e). Progress says that well-typed expressions cannot get stuck computationally: they cannot reduce to a form where the operational semantics is then undefined. This is how we model the idea that the type system is preventing certain kinds of failures: make those failures correspond to undefined behavior. ]]>Aaron StumpBuzzsprout-2897443Mon, 02 Mar 2020 17:00:00 -0600857chapter 7 , metatheory , type safety151fullfalseIntroduction to metatheoryIntroduction to metatheoryMetatheory is concerned with proving properties about theories, in this case type theories or programming languages. ]]>Metatheory is concerned with proving properties about theories, in this case type theories or programming languages. ]]>Aaron StumpBuzzsprout-2871748Fri, 28 Feb 2020 16:00:00 -0600714chapter 7 , metatheory , normalization150fullfalseDefinition of the Mendler encodingDefinition of the Mendler encodingWe consider using Mendler's technique of abstracting out problematic types with new type variables, and how this can yield a lambda encoding where the programmer is in charge of when to make recursive calls (rather than in the Church encoding, where the data present the programmer's combining function with the results of all possible recursive calls on immediate subdata).]]>We consider using Mendler's technique of abstracting out problematic types with new type variables, and how this can yield a lambda encoding where the programmer is in charge of when to make recursive calls (rather than in the Church encoding, where the data present the programmer's combining function with the results of all possible recursive calls on immediate subdata).]]>Aaron StumpBuzzsprout-2853244Wed, 26 Feb 2020 15:00:00 -0600952chapter 6, lambda encodings, Mendler encoding149fullfalseThe Mendler encoding and the problem of explicit recursionThe Mendler encoding and the problem of explicit recursionThe Church encoding allows definition of certain recursive functions, but all the recursive calls are implicit. The encoding simply presents you with the results of recursion for all immediate subdata. Using a technique due to Mendler, an encoding is possible where recursions are explicitly made by the combining functions given to the data.]]>The Church encoding allows definition of certain recursive functions, but all the recursive calls are implicit. The encoding simply presents you with the results of recursion for all immediate subdata. Using a technique due to Mendler, an encoding is possible where recursions are explicitly made by the combining functions given to the data.]]>Aaron StumpBuzzsprout-2842126Tue, 25 Feb 2020 15:00:00 -0600659chapter 6, lambda encodings, Mendler encoding148fullfalseThe Scott encodingThe Scott encodingIn this episode we briefly review the Church and Parigot encodings (discussed previously in Chapter 6 of this podcast) and then consider the Scott encoding, where combining functions receive only the immediate subdata of the data.]]>In this episode we briefly review the Church and Parigot encodings (discussed previously in Chapter 6 of this podcast) and then consider the Scott encoding, where combining functions receive only the immediate subdata of the data.]]>Aaron StumpBuzzsprout-2830180Mon, 24 Feb 2020 14:00:00 -0600962chapter 6, lambda encodings , Parigot encoding , Scott encoding147fullfalseMore on the Parigot encodingMore on the Parigot encodingThe Parigot encoding has exponential-size normal forms: but don't panic! With a decent graph-sharing implementation of lambda calculus, they take linear space in memory.]]>The Parigot encoding has exponential-size normal forms: but don't panic! With a decent graph-sharing implementation of lambda calculus, they take linear space in memory.]]>Aaron StumpBuzzsprout-2809891Fri, 21 Feb 2020 22:00:00 -0600692chapter 6, lambda encodings , Parigot encoding146fullfalseIntroduction to the Parigot encodingIntroduction to the Parigot encodingThe Parigot encoding solves the Church encoding's problem of inefficient predecessor. It can be typed using positive-recursive types, which preserve normalization of the type theory.]]>The Parigot encoding solves the Church encoding's problem of inefficient predecessor. It can be typed using positive-recursive types, which preserve normalization of the type theory.]]>Aaron StumpBuzzsprout-2780188Tue, 18 Feb 2020 17:00:00 -0600695chapter 6, lambda encodings, Parigot encoding , natural numbers145fullfalseChurch-encoding natural numbersChurch-encoding natural numbersWhat is fold-right for a natural number? How do we define addition with this? The problem of inefficient predecessor.]]>What is fold-right for a natural number? How do we define addition with this? The problem of inefficient predecessor.]]>Aaron StumpBuzzsprout-2770228Mon, 17 Feb 2020 17:00:00 -0600715chapter 6, lambda encodings, fold right, Church encoding, natural numbers , predecessor144fullfalseChurch encoding of listsChurch encoding of listsWe consider fold-right for lists, and its static type. The Church encoding for lists makes them into their own fold-right functions]]>We consider fold-right for lists, and its static type. The Church encoding for lists makes them into their own fold-right functions]]>Aaron StumpBuzzsprout-2748289Fri, 14 Feb 2020 22:00:00 -0600656chapter 6, lambda encodings, fold right, Church encoding, lists143fullfalseChurch encoding of the booleansChurch encoding of the booleansThe Church encoding represents data as their own fold-right functions. For booleans, this means they become their own if-then-else expressions. We consider the polymorphic type for these, which is forall X. X -> X -> X.]]>The Church encoding represents data as their own fold-right functions. For booleans, this means they become their own if-then-else expressions. We consider the polymorphic type for these, which is forall X. X -> X -> X.]]>Aaron StumpBuzzsprout-2748274Fri, 14 Feb 2020 21:00:00 -0600681chapter 6, lambda encodings, fold right, Church encoding, booleans142fullfalseIntroduction to Church encodingIntroduction to Church encodingThe Church encoding represents data as their own fold-right functions]]>The Church encoding represents data as their own fold-right functions]]>Aaron StumpBuzzsprout-2719921Tue, 11 Feb 2020 19:00:00 -0600613chapter 6, lambda encodings, language constructs, fold right, Church encoding141fullfalseFunctional encodings turning the world inside outFunctional encodings turning the world inside outFunctional encodings take programming language features like pattern-matching and recursion and move them from outside of data to inside of data.]]>Functional encodings take programming language features like pattern-matching and recursion and move them from outside of data to inside of data.]]>Aaron StumpBuzzsprout-2719906Tue, 11 Feb 2020 17:00:00 -0600516chapter 6, lambda encodings, language constructs140fullfalseMore benefits of lambda encodingsMore benefits of lambda encodingsThe idea that without lambda encodings, the current state of the art forces you to commit to a class of datatypes in the design of your type theory.]]>The idea that without lambda encodings, the current state of the art forces you to commit to a class of datatypes in the design of your type theory.]]>Aaron StumpBuzzsprout-2685193Fri, 07 Feb 2020 17:00:00 -0600700chapter 6, lambda encodings, datatype system139fullfalseIntroduction to lambda encodingsIntroduction to lambda encodingsA lambda encoding is some way of representing data as functions (lambda abstractions). Some motivations for this for computer-checked proofs and type theory.]]>A lambda encoding is some way of representing data as functions (lambda abstractions). Some motivations for this for computer-checked proofs and type theory.]]>Aaron StumpBuzzsprout-2685184Fri, 07 Feb 2020 15:00:00 -0600832chapter 6, lambda encodings138fullfalseAdding a top type and allowing non-normalizing termsAdding a top type and allowing non-normalizing termsCurry-style typing and realizability make it sensible to allow a top type to type every term, even non-normalizing ones.]]>Curry-style typing and realizability make it sensible to allow a top type to type every term, even non-normalizing ones.]]>Aaron StumpBuzzsprout-2660599Tue, 04 Feb 2020 19:00:00 -0600857chapter 5, type theory design 1, computation first, realizability, top type137fullfalseIntersection types using Curry-style typingIntersection types using Curry-style typingIntersection types internalize the idea that a term has two types. Curry-style typing is generally needed for this to be nontrivial.]]>Intersection types internalize the idea that a term has two types. Curry-style typing is generally needed for this to be nontrivial.]]>Aaron StumpBuzzsprout-2660587Tue, 04 Feb 2020 17:00:00 -0600639chapter 5, type theory design 1, curry-style typing, intersection types136fullfalseCurry-style versus Church-style, and the nature of type annotationsCurry-style versus Church-style, and the nature of type annotationsIn Curry-style typing annotations -- for example, the types of bound variables -- are erased, and not truly (semantically) part of the term. In Church-style, they are intrinsic to the term and are truly there. Discussion of some of the practicalities of Curry-style typing, in particular type annotations versus proving typings.]]>In Curry-style typing annotations -- for example, the types of bound variables -- are erased, and not truly (semantically) part of the term. In Church-style, they are intrinsic to the term and are truly there. Discussion of some of the practicalities of Curry-style typing, in particular type annotations versus proving typings.]]>Aaron StumpBuzzsprout-2621803Thu, 30 Jan 2020 17:00:00 -0600786chapter 5, type theory design 1, type annotations, nuprl135fullfalseMore on Computation First, and Basic Idea of RealizabilityMore on Computation First, and Basic Idea of RealizabilityTypes are specifications whose semantics is explained in terms of computation, which is thus conceptually prior. Realizability is a way of explaining the semantics of types.]]>Types are specifications whose semantics is explained in terms of computation, which is thus conceptually prior. Realizability is a way of explaining the semantics of types.]]>Aaron StumpBuzzsprout-2610793Wed, 29 Jan 2020 16:00:00 -0600954chapter 5, type theory design 1, computation first, realizability134fullfalseTypes should be erased for executing and reasoning about programsTypes should be erased for executing and reasoning about programsIn which I argue that type information should be erased from programs by the compiler both for final execution and also for reasoning (in a language with dependent types, for example, where we can reason about program execution statically).]]>In which I argue that type information should be erased from programs by the compiler both for final execution and also for reasoning (in a language with dependent types, for example, where we can reason about program execution statically).]]>Aaron StumpBuzzsprout-2610739Wed, 29 Jan 2020 14:00:00 -0600760chapter 5, type theory design 1, computation first133fullfalseWhy go beyond GADTs?Why go beyond GADTs?GADTs are quite powerful. Why go all the way to true dependent types? And should you use the Curry-Howard isomorphism (see Chapter 3 of the podcast) or not?]]>GADTs are quite powerful. Why go all the way to true dependent types? And should you use the Curry-Howard isomorphism (see Chapter 3 of the podcast) or not?]]>Aaron StumpBuzzsprout-2569426Fri, 24 Jan 2020 14:00:00 -0600745chapter 4, indexed types, dependent types132fullfalseGADTs for programming with representations of typesGADTs for programming with representations of typesThis episode reviews some of the applications of GADTs we have discussed so far, and discusses an example where we want to write a function that consumes a number of inputs that is controlled by an argument to the function. ]]>This episode reviews some of the applications of GADTs we have discussed so far, and discusses an example where we want to write a function that consumes a number of inputs that is controlled by an argument to the function. ]]>Aaron StumpBuzzsprout-2554570Wed, 22 Jan 2020 14:00:00 -0600957chapter 4, indexed types, examples of GADTs, type representation131fullfalseUsing GADTs for typed subsetting of your languageUsing GADTs for typed subsetting of your languageOne use case for GADTs (as a special case of dependent types) is to form a typed subset of your host language. One creates an EDSL called Expr a, where a is a type of the language (say this language is Haskell). Values of types Expr a are the abstract syntax trees of expressions of type a from your host language. This is just a special case of embedding a typed language into your host language: in this case the typed language is a subset of your host language.]]>One use case for GADTs (as a special case of dependent types) is to form a typed subset of your host language. One creates an EDSL called Expr a, where a is a type of the language (say this language is Haskell). Values of types Expr a are the abstract syntax trees of expressions of type a from your host language. This is just a special case of embedding a typed language into your host language: in this case the typed language is a subset of your host language.]]>Aaron StumpBuzzsprout-2536429Mon, 20 Jan 2020 13:00:00 -0600875chapter 4, indexed types, examples of GADTs, language subset130fullfalseExample of programming with indexed types: binary search treesExample of programming with indexed types: binary search treesUsing indexed types, we can restrict the form of legal values in some datatype. A nice example is binary search trees, where we can statically enforce the binary search tree property using an indexed type bst l u, where l is a lower bound and u an upper bound on the data stored in the tree.]]>Using indexed types, we can restrict the form of legal values in some datatype. A nice example is binary search trees, where we can statically enforce the binary search tree property using an indexed type bst l u, where l is a lower bound and u an upper bound on the data stored in the tree.]]>Aaron StumpBuzzsprout-2509159Thu, 16 Jan 2020 17:00:00 -0600654chapter 4, indexed types, example indexed data structures, binary search trees129fullfalseProgramming with indexed types using singletonsProgramming with indexed types using singletonsBasic idea of using singleton types like Nat n where n is a value from the index domain, to connect program expressions and index expressions. The data value of type Nat n is a copy of n, but living in the syntactic category of program expressions. This allows programs to operate on a proxy for n. Singletons library in Haskell mentioned.]]>Basic idea of using singleton types like Nat n where n is a value from the index domain, to connect program expressions and index expressions. The data value of type Nat n is a copy of n, but living in the syntactic category of program expressions. This allows programs to operate on a proxy for n. Singletons library in Haskell mentioned.]]>Aaron StumpBuzzsprout-2509138Thu, 16 Jan 2020 16:00:00 -0600709chapter 4, indexed types, singleton types128fullfalseLimitations of indexed types that are not truly dependentLimitations of indexed types that are not truly dependentIf indices to types come from a different syntactic category than programs, there are a few things you cannot do. Some initial thoughts on how to work around these.]]>If indices to types come from a different syntactic category than programs, there are a few things you cannot do. Some initial thoughts on how to work around these.]]>Aaron StumpBuzzsprout-2485700Tue, 14 Jan 2020 06:00:00 -0600858chapter 4, indexed types, vectors, Haskell datakinds127fullfalseProgramming with Indexed TypesProgramming with Indexed TypesIndexed datatypes like vectors, where the indices come from a different syntactic category than program expressions.]]>Indexed datatypes like vectors, where the indices come from a different syntactic category than program expressions.]]>Aaron StumpBuzzsprout-2485688Mon, 13 Jan 2020 17:00:00 -0600722chapter 4, indexed types, vectors, Haskell datakinds126fullfalseProgram Termination and the Curry-Howard IsomorphismProgram Termination and the Curry-Howard IsomorphismFor programs to make sense as proofs, they need to be terminating (cannot run forever), since otherwise you can write infinite loops that have any type. Under Curry-Howard this means any formula is provable, which is one way to define inconsistency. (And logics have to be consistent to be useful.)]]>For programs to make sense as proofs, they need to be terminating (cannot run forever), since otherwise you can write infinite loops that have any type. Under Curry-Howard this means any formula is provable, which is one way to define inconsistency. (And logics have to be consistent to be useful.)]]>Aaron StumpBuzzsprout-2454737Fri, 10 Jan 2020 14:00:00 -0600657chapter 3, curry-howard isomorphism, constructive proof, termination125fullfalseWhy Curry-Howard for classical proofs is a bad idea for programmingWhy Curry-Howard for classical proofs is a bad idea for programmingIf you have dependent types, classical reasoning, and the Curry-Howard isomorphism, you can write programs that look like they are invoking oracles for undecidable problems -- but they are not, and this is confusing.]]>If you have dependent types, classical reasoning, and the Curry-Howard isomorphism, you can write programs that look like they are invoking oracles for undecidable problems -- but they are not, and this is confusing.]]>Aaron StumpBuzzsprout-2423390Mon, 06 Jan 2020 19:00:00 -0600849chapter 3, curry-howard isomorphism, constructive proof, classical reasoning123fullfalseCurry-Howard for classical logicCurry-Howard for classical logicCH can be applied to classical logic, too. The seminal paper is <a href="https://www.cl.cam.ac.uk/~tgg22/publications/popl90.pdf">A Formulae-as-Types Notion of Control</a> by Timothy Griffin. I discuss how backtracking implements the law of excluded middle.]]>CH can be applied to classical logic, too. The seminal paper is <a href="https://www.cl.cam.ac.uk/~tgg22/publications/popl90.pdf">A Formulae-as-Types Notion of Control</a> by Timothy Griffin. I discuss how backtracking implements the law of excluded middle.]]>Aaron StumpBuzzsprout-2423366Mon, 06 Jan 2020 15:00:00 -0600718chapter 3, curry-howard isomorphism, constructive proof, classical reasoning123fullfalseDependent types and design by contractDependent types and design by contractDependent types are discussed, particularly as used for expressing pre- and post-conditions of functions.]]>Dependent types are discussed, particularly as used for expressing pre- and post-conditions of functions.]]>Aaron StumpBuzzsprout-2403407Fri, 03 Jan 2020 20:00:00 -0600597chapter 3, curry-howard isomorphism, dependent types, contracts122fullfalseIndexed types and Curry-Howard for first-order quantifiersIndexed types and Curry-Howard for first-order quantifiersI follow up on some comments I made about Curry-Howard for first-order quantifiers in the previous episode. Sheard's Omega language also mentioned (see links on <a href = "http://web.cecs.pdx.edu/~sheard/">his web page</a>). First-order quantifications turn into indexed types where the indices are not program expressions but come from another syntactic domain.]]>I follow up on some comments I made about Curry-Howard for first-order quantifiers in the previous episode. Sheard's Omega language also mentioned (see links on <a href = "http://web.cecs.pdx.edu/~sheard/">his web page</a>). First-order quantifications turn into indexed types where the indices are not program expressions but come from another syntactic domain.]]>Aaron StumpBuzzsprout-2403374Fri, 03 Jan 2020 14:00:00 -0600554chapter 3, curry-howard isomorphism, constructive proof, first-order logic121fullfalseThe Curry-Howard Isomorphism for Propositional LogicThe Curry-Howard Isomorphism for Propositional LogicDiscussion of the Curry-Howard isomorphism for the connectives of propositional logic (AND, OR, NOT, FALSE, IMPLIES). Initial consideration of Curry-Howard for first-order and higher-order logic. Dependent types.]]>Discussion of the Curry-Howard isomorphism for the connectives of propositional logic (AND, OR, NOT, FALSE, IMPLIES). Initial consideration of Curry-Howard for first-order and higher-order logic. Dependent types.]]>Aaron StumpBuzzsprout-2394233Thu, 02 Jan 2020 15:00:00 -0600805chapter 3, curry-howard isomorphism, constructive proof, propositional logic120fullfalseThe Curry-Howard Isomorphism for InductionThe Curry-Howard Isomorphism for InductionIn which I discover why the domino analogy for explaining induction always bothered me!]]>In which I discover why the domino analogy for explaining induction always bothered me!]]>Aaron StumpBuzzsprout-2385017Tue, 31 Dec 2019 17:00:00 -0600705chapter 3, curry-howard isomorphism, constructive proof, induction 119fullfalseConstructive proofs as programsConstructive proofs as programsWe consider the basic idea of the Curry-Howard isomorphism, that constructive proofs are essentially programs, and vice versa. Several simple examples. Why the law of excluded middle is not a legal constructive proof.]]>We consider the basic idea of the Curry-Howard isomorphism, that constructive proofs are essentially programs, and vice versa. Several simple examples. Why the law of excluded middle is not a legal constructive proof.]]>Aaron StumpBuzzsprout-2328623Sat, 21 Dec 2019 23:00:00 -0600587chapter 3, curry-howard isomorphism, constructive proof, law of excluded middle118fullfalseIntroduction to the Curry-Howard IsomorphismIntroduction to the Curry-Howard IsomorphismThe basic idea of the Curry-Howard isomorphism, and its connection to the contents of Chapters 1 and 2. Constructive proof. A famous nonconstructive proof.]]>The basic idea of the Curry-Howard isomorphism, and its connection to the contents of Chapters 1 and 2. Constructive proof. A famous nonconstructive proof.]]>Aaron StumpBuzzsprout-2323667Fri, 20 Dec 2019 14:00:00 -0600944chapter 3, curry-howard isomorphism, constructive proof, classical reasoning117fullfalseFunctors and catamorphismsFunctors and catamorphismsMore about the structured recusion scheme known as the catamorphism. Basic idea of functors.]]>More about the structured recusion scheme known as the catamorphism. Basic idea of functors.]]>Aaron StumpBuzzsprout-2323628Fri, 20 Dec 2019 14:00:00 -0600774functional programming, chapter 2, general audience, recursion schemes, category theory, functors116fullfalseStructured Recursion Schemes for Point-Free RecursionStructured Recursion Schemes for Point-Free RecursionReview of basic application of category theory for functional programming. Recursion schemes are combinators that let you write point-free recursions.]]>Review of basic application of category theory for functional programming. Recursion schemes are combinators that let you write point-free recursions.]]>Aaron StumpBuzzsprout-2313578Wed, 18 Dec 2019 23:00:00 -0600750functional programming, chapter 2, general audience, point-free, recursion schemes, category theory115fullfalseMore on point-free programming and category theoryMore on point-free programming and category theoryA few very basic ideas of categories and combinators. Also, the problem of understanding very concise code.]]>A few very basic ideas of categories and combinators. Also, the problem of understanding very concise code.]]>Aaron StumpBuzzsprout-2299334Tue, 17 Dec 2019 12:00:00 -0600791functional programming, chapter 2, general audience, point-free, concise code, category theory114fullfalsePoint-free programming and category theoryPoint-free programming and category theoryRelation of point-free functional programming to category theory.]]>Relation of point-free functional programming to category theory.]]>Aaron StumpBuzzsprout-2299313Tue, 17 Dec 2019 00:00:00 -0600392functional programming, chapter 2, general audience, point-free, concise code, category theory113fullfalseConcise code through point-free programmingConcise code through point-free programmingHigher-order functions help make it possible to program in a point-free style, where we use combinators to connect functions, rather than calling the functions on inputs explicitly. ]]>Higher-order functions help make it possible to program in a point-free style, where we use combinators to connect functions, rather than calling the functions on inputs explicitly. ]]>Aaron StumpBuzzsprout-2272724Fri, 13 Dec 2019 06:00:00 -0600391functional programming, chapter 2, general audience, point-free style, concise code112fullfalseMore on FP and concise codeMore on FP and concise codeDiscussion of datatypes for tree-like data structures in functional languages. Usefulness of these for processing structured linguistic artifacts, where the structure is represented by the tree structure.]]>Discussion of datatypes for tree-like data structures in functional languages. Usefulness of these for processing structured linguistic artifacts, where the structure is represented by the tree structure.]]>Aaron StumpBuzzsprout-2272709Thu, 12 Dec 2019 17:00:00 -0600596functional programming, chapter 2, general audience, datatypes, concise code111fullfalseFunctional Programming and Concise Code: Type InferenceFunctional Programming and Concise Code: Type InferenceStart of discussion of some of technology and culture that lead to more concise code in functional programming languages. Type inference to avoid writing types for local and input variables. Some basics of static and dynamic typing.]]>Start of discussion of some of technology and culture that lead to more concise code in functional programming languages. Type inference to avoid writing types for local and input variables. Some basics of static and dynamic typing.]]>Aaron StumpBuzzsprout-2272679Thu, 12 Dec 2019 14:00:00 -0600547functional programming, chapter 2, general audience, type inference, concise code110fullfalseIntroduction to Functional ProgrammingIntroduction to Functional ProgrammingIntroduction to the basic idea of functional programming. Three kinds are discussed: functional programming with mutable state, pure functional programming (where there is no implicit state), and strong functional programming (which is pure functional programming where every function is statically required to terminate).]]>Introduction to the basic idea of functional programming. Three kinds are discussed: functional programming with mutable state, pure functional programming (where there is no implicit state), and strong functional programming (which is pure functional programming where every function is statically required to terminate).]]>Aaron StumpBuzzsprout-2265554Wed, 11 Dec 2019 14:00:00 -0600472functional programming, chapter 2, general audience19fullfalseSoftware Engineering Considerations for Formal MethodsSoftware Engineering Considerations for Formal MethodsDiscussion of some practicalities of applying formal methods to software. Ideally we are seeking techniques that can be applied with increasing effort to yield increasingly strong results. Also, introduction to functional programming.]]>Discussion of some practicalities of applying formal methods to software. Ideally we are seeking techniques that can be applied with increasing effort to yield increasingly strong results. Also, introduction to functional programming.]]>Aaron StumpBuzzsprout-2203760Sun, 01 Dec 2019 22:00:00 -0600973formal methods, software engineering, general audience, chapter 118fullfalsePower of Computer-Checked Proofs for SoftwarePower of Computer-Checked Proofs for SoftwareContinuing pessimistic discussion about the purpose of formal methods for Computer Science. But then counter arguments about the value of absolutely correct software.]]>Continuing pessimistic discussion about the purpose of formal methods for Computer Science. But then counter arguments about the value of absolutely correct software.]]>Aaron StumpBuzzsprout-2196569Sat, 30 Nov 2019 18:00:00 -0600707software engineering, computer-checked proofs, general audience, chapter 117fullfalseTechnical reasons for lack of adoption of computer-checked proofsTechnical reasons for lack of adoption of computer-checked proofsDiscussion of a technical reason for lack of adoption of computer-checked proofs for mathematics, namely the level of detail in the proof. Proof assistants require too much detail in proofs to allow mathematicians to carry over their elegant art of expressing just the right amount of information to convey the idea of the proof to a mathematically competent reader. For Computer Science, a problem of adoption is that proofs are computationally useless (generally).]]>Discussion of a technical reason for lack of adoption of computer-checked proofs for mathematics, namely the level of detail in the proof. Proof assistants require too much detail in proofs to allow mathematicians to carry over their elegant art of expressing just the right amount of information to convey the idea of the proof to a mathematically competent reader. For Computer Science, a problem of adoption is that proofs are computationally useless (generally).]]>Aaron StumpBuzzsprout-2181827Thu, 28 Nov 2019 12:00:00 -0600610computer-checked proofs, proof assistants, general audience, adoption problem, chapter 116fullfalseWhy Computer-Checked Proofs are Not Used More in MathematicsWhy Computer-Checked Proofs are Not Used More in MathematicsSome discussion of why computer-checked proofs have not been adopted more in mathematics. The psychology of telling mathematicians their time-honored method of investigation is inadequate and they need computer-checked proofs. Computer-checked proofs and certainty.]]>Some discussion of why computer-checked proofs have not been adopted more in mathematics. The psychology of telling mathematicians their time-honored method of investigation is inadequate and they need computer-checked proofs. Computer-checked proofs and certainty.]]>Aaron StumpBuzzsprout-2181758Wed, 27 Nov 2019 14:00:00 -0600588computer-checked proofs, proof assistants, general audience, adoption problem, chapter 115fullfalseComputer-Checked Proofs in American ResearchComputer-Checked Proofs in American ResearchSome pockets of interest in computer-checked proofs in the US in the 1980s and 1990s. Several important research projects and initiatives in the US in the late 1990s and early 2000s that helped raise awareness in the US of computer-checked proofs: proof-carrying code, the POPLmark challenge.]]>Some pockets of interest in computer-checked proofs in the US in the 1980s and 1990s. Several important research projects and initiatives in the US in the late 1990s and early 2000s that helped raise awareness in the US of computer-checked proofs: proof-carrying code, the POPLmark challenge.]]>Aaron StumpBuzzsprout-2174690Tue, 26 Nov 2019 15:00:00 -0600813computer-checked proofs, proof assistants, general audience, chapter 114fullfalseComputer-checked proofs about softwareComputer-checked proofs about softwareComputer-checked proofs can ensure properties of software. Discussion of several aspects of this idea.]]>Computer-checked proofs can ensure properties of software. Discussion of several aspects of this idea.]]>Aaron StumpBuzzsprout-2153429Sat, 23 Nov 2019 23:00:00 -0600482software engineering, computer-checked proofs, chapter 113fullfalseMore on Computer-Checked ProofsMore on Computer-Checked ProofsFurther discussion of computer-checked proofs, including the example of the proof by Hales and his collaborators of the Kepler Conjecture. Automath also mentioned. DAO hack on Ethereum and the interest in cryptocurrency community in computer-checked proofs.]]>Further discussion of computer-checked proofs, including the example of the proof by Hales and his collaborators of the Kepler Conjecture. Automath also mentioned. DAO hack on Ethereum and the interest in cryptocurrency community in computer-checked proofs.]]>Aaron StumpBuzzsprout-2145875Fri, 22 Nov 2019 13:00:00 -0600821computer-checked proofs, proof assistants, general audience, example proofs, chapter 112fullfalseComputer-checked proofsComputer-checked proofsFirst episode of the Iowa Type Theory Commute. The basic idea of computer-checked proofs. The example of the original proof of the Four Color Theorem.]]>First episode of the Iowa Type Theory Commute. The basic idea of computer-checked proofs. The example of the original proof of the Four Color Theorem.]]>Aaron StumpBuzzsprout-2138198Thu, 21 Nov 2019 14:00:00 -0600846computer-checked proofs, proof assistants, general audience, chapter 111fullfalse