Đệ quy ẩn danh
Một tổ hợp điểm cố định là một hàm bậc cao hơn fix
theo định nghĩa thỏa mãn tính tương đương
forall f. fix f = f (fix f)
fix f
đại diện cho một giải pháp x
cho phương trình điểm cố định
x = f x
Giai thừa của một số tự nhiên có thể được chứng minh bằng
fact 0 = 1
fact n = n * fact (n - 1)
Sử dụng fix
, bằng chứng xây dựng tùy ý trên các hàm tổng quát /-đệ quy có thể được lấy mà không có tính tự tham chiếu bất đối xứng.
fact n = (fix fact') n
Ở đâu
fact' rec n = if n == 0
then 1
else n * rec (n - 1)
như vậy mà
fact 3
= (fix fact') 3
= fact' (fix fact') 3
= if 3 == 0 then 1 else 3 * (fix fact') (3 - 1)
= 3 * (fix fact') 2
= 3 * fact' (fix fact') 2
= 3 * if 2 == 0 then 1 else 2 * (fix fact') (2 - 1)
= 3 * 2 * (fix fact') 1
= 3 * 2 * fact' (fix fact') 1
= 3 * 2 * if 1 == 0 then 1 else 1 * (fix fact') (1 - 1)
= 3 * 2 * 1 * (fix fact') 0
= 3 * 2 * 1 * fact' (fix fact') 0
= 3 * 2 * 1 * if 0 == 0 then 1 else 0 * (fix fact') (0 - 1)
= 3 * 2 * 1 * 1
= 6
Bằng chứng chính thức này
fact 3 = 6
phương pháp sử dụng tương đương tổ hợp điểm cố định để viết lại
fix fact' -> fact' (fix fact')
Giải tích Lambda
Các untyped phép tính lambda hình thức bao gồm trong một ngữ pháp ngữ cảnh miễn phí
E ::= v Variable
| λ v. E Abstraction
| E E Application
trong đó v
phạm vi trên các biến, cùng với các quy tắc giảm beta và eta
(λ x. B) E -> B[x := E] Beta
λ x. E x -> E if x doesn’t occur free in E Eta
Giảm beta thay thế tất cả các lần xuất hiện tự do của biến x
trong phần trừu tượng (hàm chức năng) B
bằng biểu thức (đối số trực tuyến) E
. Giảm Eta loại bỏ sự trừu tượng dư thừa. Nó đôi khi được bỏ qua từ chủ nghĩa hình thức. Một biểu thức không thể sửa chữa, mà không áp dụng quy tắc giảm nào, ở dạng bình thường hoặc chính tắc .
λ x y. E
là tốc ký cho
λ x. λ y. E
(đa dạng trừu tượng),
E F G
là tốc ký cho
(E F) G
(ứng dụng kết hợp trái),
λ x. x
và
λ y. y
là alpha-tương đương .
Trừu tượng hóa và ứng dụng là hai nguyên thủy duy nhất của ngôn ngữ Tiếng Anh của tính toán lambda, nhưng chúng cho phép mã hóa các dữ liệu và hoạt động phức tạp tùy ý.
Các chữ số của Giáo hội là một mã hóa của các số tự nhiên tương tự như các tiên số Peano-axiomatic.
0 = λ f x. x No application
1 = λ f x. f x One application
2 = λ f x. f (f x) Twofold
3 = λ f x. f (f (f x)) Threefold
. . .
SUCC = λ n f x. f (n f x) Successor
ADD = λ n m f x. n f (m f x) Addition
MULT = λ n m f x. n (m f) x Multiplication
. . .
Một bằng chứng chính thức rằng
1 + 2 = 3
sử dụng quy tắc viết lại giảm beta:
ADD 1 2
= (λ n m f x. n f (m f x)) (λ g y. g y) (λ h z. h (h z))
= (λ m f x. (λ g y. g y) f (m f x)) (λ h z. h (h z))
= (λ m f x. (λ y. f y) (m f x)) (λ h z. h (h z))
= (λ m f x. f (m f x)) (λ h z. h (h z))
= λ f x. f ((λ h z. h (h z)) f x)
= λ f x. f ((λ z. f (f z)) x)
= λ f x. f (f (f x)) Normal form
= 3
Kết hợp
Trong phép tính lambda, tổ hợp là trừu tượng không chứa biến miễn phí. Đơn giản nhất : I
, trình kết hợp danh tính
λ x. x
đẳng cấu với chức năng nhận dạng
id x = x
Các tổ hợp như vậy là các toán tử nguyên thủy của phép tính tổ hợp như hệ thống SKI.
S = λ x y z. x z (y z)
K = λ x y. x
I = λ x. x
Beta giảm không được bình thường hóa mạnh mẽ ; không phải tất cả các biểu thức có thể rút gọn, mà redexes, chuyển sang dạng bình thường dưới dạng giảm beta. Một ví dụ đơn giản là ứng dụng khác nhau của ω
tổ hợp omega
λ x. x x
với chính nó:
(λ x. x x) (λ y. y y)
= (λ y. y y) (λ y. y y)
. . .
= _|_ Bottom
Việc giảm các biểu hiện phụ ngoài cùng bên trái (các đầu của người Hồi giáo) được ưu tiên. Thứ tự áp dụng bình thường hóa các đối số trước khi thay thế, thứ tự bình thường không. Hai chiến lược tương tự như đánh giá háo hức, ví dụ C và đánh giá lười biếng, ví dụ Haskell.
K (I a) (ω ω)
= (λ k l. k) ((λ i. i) a) ((λ x. x x) (λ y. y y))
phân kỳ theo giảm beta đơn đặt hàng háo hức
= (λ k l. k) a ((λ x. x x) (λ y. y y))
= (λ l. a) ((λ x. x x) (λ y. y y))
= (λ l. a) ((λ y. y y) (λ y. y y))
. . .
= _|_
kể từ trong ngữ nghĩa nghiêm ngặt
forall f. f _|_ = _|_
nhưng hội tụ dưới mức giảm beta đơn hàng bình thường
= (λ l. ((λ i. i) a)) ((λ x. x x) (λ y. y y))
= (λ l. a) ((λ x. x x) (λ y. y y))
= a
Nếu một biểu thức có dạng bình thường, giảm beta theo thứ tự thông thường sẽ tìm thấy nó.
Y
Các thuộc tính cần thiết của Y
tổ hợp điểm cố định
λ f. (λ x. f (x x)) (λ x. f (x x))
được đưa ra bởi
Y g
= (λ f. (λ x. f (x x)) (λ x. f (x x))) g
= (λ x. g (x x)) (λ x. g (x x)) = Y g
= g ((λ x. g (x x)) (λ x. g (x x))) = g (Y g)
= g (g ((λ x. g (x x)) (λ x. g (x x)))) = g (g (Y g))
. . . . . .
Sự tương đương
Y g = g (Y g)
đẳng cấu
fix f = f (fix f)
Phép tính lambda chưa được đánh dấu có thể mã hóa các bằng chứng xây dựng tùy ý trên các hàm tổng quát / μ-đệ quy.
FACT = λ n. Y FACT' n
FACT' = λ rec n. if n == 0 then 1 else n * rec (n - 1)
FACT 3
= (λ n. Y FACT' n) 3
= Y FACT' 3
= FACT' (Y FACT') 3
= if 3 == 0 then 1 else 3 * (Y FACT') (3 - 1)
= 3 * (Y FACT') (3 - 1)
= 3 * FACT' (Y FACT') 2
= 3 * if 2 == 0 then 1 else 2 * (Y FACT') (2 - 1)
= 3 * 2 * (Y FACT') 1
= 3 * 2 * FACT' (Y FACT') 1
= 3 * 2 * if 1 == 0 then 1 else 1 * (Y FACT') (1 - 1)
= 3 * 2 * 1 * (Y FACT') 0
= 3 * 2 * 1 * FACT' (Y FACT') 0
= 3 * 2 * 1 * if 0 == 0 then 1 else 0 * (Y FACT') (0 - 1)
= 3 * 2 * 1 * 1
= 6
(Nhân chậm, hợp lưu)
Đối với phép tính lambda chưa được đánh dấu của Churchian, đã được chứng minh là tồn tại vô số đệ quy vô số các tổ hợp điểm cố định bên cạnh đó Y
.
X = λ f. (λ x. x x) (λ x. f (x x))
Y' = (λ x y. x y x) (λ y x. y (x y x))
Z = λ f. (λ x. f (λ v. x x v)) (λ x. f (λ v. x x v))
Θ = (λ x y. y (x x y)) (λ x y. y (x x y))
. . .
Việc giảm beta theo thứ tự thông thường làm cho lambda không được kiểm duyệt tính toán thành một hệ thống viết lại hoàn chỉnh Turing.
Trong Haskell, bộ kết hợp điểm cố định có thể được thực hiện một cách thanh lịch
fix :: forall t. (t -> t) -> t
fix f = f (fix f)
Sự lười biếng của Haskell bình thường hóa đến mức hoàn thiện trước khi tất cả các biểu hiện phụ được đánh giá.
primes :: Integral t => [t]
primes = sieve [2 ..]
where
sieve = fix (\ rec (p : ns) ->
p : rec [n | n <- ns
, n `rem` p /= 0])