What are the most interesting equivalences arising from the Curry-Howard Isomorphism?

前端 未结 10 1991
谎友^
谎友^ 2021-01-29 17:19

I came upon the Curry-Howard Isomorphism relatively late in my programming life, and perhaps this contributes to my being utterly fascinated by it. It implies that for every pro

10条回答
  •  情话喂你
    2021-01-29 18:07

    Your chart is not quite right; in many cases you have confused types with terms.

    function type              implication
    function                   proof of implication
    function argument          proof of hypothesis
    function result            proof of conclusion
    function application RULE  modus ponens
    recursion                  n/a [1]
    structural induction       fold (foldr for lists)
    mathematical induction     fold for naturals (data N = Z | S N)
    identity function          proof of A -> A, for all A
    non-terminating function   n/a [2]
    tuple                      normal proof of conjunction
    sum                        disjunction
    n/a [3]                    first-order universal quantification
    parametric polymorphism    second-order universal quantification
    currying                   (A,B) -> C -||- A -> (B -> C), for all A,B,C
    primitive type             axiom
    types of typeable terms    theory
    function composition       syllogism
    substitution               cut rule
    value                      normal proof
    

    [1] The logic for a Turing-complete functional language is inconsistent. Recursion has no correspondence in consistent theories. In an inconsistent logic/unsound proof theory you could call it a rule which causes inconsistency/unsoundness.

    [2] Again, this is a consequence of completeness. This would be a proof of an anti-theorem if the logic were consistent -- thus, it can't exist.

    [3] Doesn't exist in functional languages, since they elide first-order logical features: all quantification and parametrization is done over formulae. If you had first-order features, there would be a kind other than *, * -> *, etc.; the kind of elements of the domain of discourse. For example, in Father(X,Y) :- Parent(X,Y), Male(X), X and Y range over the domain of discourse (call it Dom), and Male :: Dom -> *.

提交回复
热议问题