| Church Numeral |
Article Index for Church |
Shopping Encoding |
Website Links For Church |
Information AboutChurch Numeral |
| CATEGORIES ABOUT CHURCH ENCODING | |
| lambda calculus | |
|
Terms that are usually considered primitive in other notations (such as integers, booleans, pairs, lists, and tagged unions) are mapped to Higher-order Function s under Church encoding; from the Church-Turing Thesis we know that any computable operator (and its operands) can be represented under Church encoding. Many students of mathematics are familiar with Gödel Numbering members of a set; Church encoding is an equivalent operation defined on Lambda Abstraction s instead of natural numbers. CHURCH NUMERALS Church numerals are the representations of Natural Number s under Church encoding. The Higher-order Function that represents natural number is a function that maps any other function to its ''n''-fold Composition . Definition Church numerals 0, '''1''', '''2''', ..., are defined as follows in the Lambda Calculus : : 0 ≡ λf.λx. x: 1 ≡ λf.λx. f x: 2 ≡ λf.λx. f (f x): 3 ≡ λf.λx. f (f (f x)): ... : n ≡ λf.λx. f''n'' x: ... That is, the natural number is represented by the Church numeral n, which has property that for any lambda-terms F and X, : n F X =β F''n'' XComputation with Church numerals In the lambda calculus, numeric functions are representable by corresponding functions on Church numerals. These functions can be implemented in most functional programming languages (subject to type constraints) by direct translation of lambda terms. The addition function uses the identity . : plus ≡ λm.λn.λf.λx. m f (n f x)The successor function is β-equivalent to (plus '''1'''). : succ ≡ λn.λf.λx. f (n f x)
: mult ≡ λm.λn.λf. n (m f)The exponentiation function is straightforward given our definition of church numerals. : exp ≡ λm.λn. n mThe predecessor function works by generating an -fold composition of functions that each apply their argument g to f; the base case discards its copy of f and returns x.: pred ≡ λn.λf.λx. n (λg.λh. h (g f)) (λu. x) (λu. u)Translation with other representations Most real-world languages have support for machine-native integers; the ''church'' and ''unchurch'' functions (given here in Haskell ) convert between nonnegative integers and their corresponding church numerals. Implementations of these conversions in other languages are similar. : type Church a = (a -> a) -> a -> a: church :: Integer -> Church a: church 0 = -> \x -> x: church n = -> \x -> f (church (n-1) f x): unchurch :: Church Integer -> Integer |
|
|