Lambda-kalkul

Download Report

Transcript Lambda-kalkul

Lambda-kalkul
2IT – PVY – objektové DBS
Bc. Jiří Šilhán
Lambda-kalkul
• Jde o prostředek, kterým lze úplně popsat, jak má
počítač úplně pracovat
• Každý dnes používaný programovací jazyk souvisí
s lambda-kalkulem – Smalltalk
• Lambda-kalkul slouží k tomu, abychom mohli
formule a manipulace aplikovat stejným
způsobem, jako se v matematice standardně
pracuje s obyčejným matematickým a logickým
zápisem, a to včetně běžných operací, jako je
např. dosazování, vytýkání před závorku apod.
Lambda-kalkul
• (λ x | x 10)
• Lambda výraz se skládá ze dvou částí oddělených
znakem |
• První část lambda výrazu se nazývá hlavička, ve
které je seznam proměnných uvozených řeckým
písmenem λ
• Tyto proměnné se jmenují lambda proměnné
• Když na nějaký λ výraz aplikujeme nějaké
hodnoty, tak se na takovéto λ-proměnné tyto
hodnoty navazují
Lambda-kalkul
• (λ x | x.10)
• Druhá část lambda výrazu je tzv. tělo, ve
kterém se nachází vlastní formule
• Tato část lambda zápisu se chová stejně jako
běžný matematický zápis
Lambda-kalkul
• (λ x | x.10) <: 5 /hodnotu 5 aplikujeme na λ
proměnnou/
• (λ x=5 | x.10) /došlo k redukci celého výrazu
na pravou část, protože hodnota proměnné
byla dosazena příslušné místo na pravé
straně/
• 5.10
• 50
Lambda-kalkul
• α konverze – změna názvu proměnných
pokud v lambda výrazu přejmenujeme
proměnné v levé i pravé části tak se daný
lambda výraz nemění
• β redukce – výměna lambda proměnných v
pravé části výrazu za konkrétní hodnoty – po
aplikaci λ funkce je operace s názvem β
redukce
Lambda-kalkul - α konverze
• (λ x | x.8) <: (λ x λ y | 2x+y) =>
• => (λ x= (λ x λ y | 2x+y) | x.8)=>
• => dále nelze musíme výraz upravit > α konverze
•
•
•
•
(λ x | x.8) <: (λ x λ y | 2x+y) =>
=> (λ z | z.8) <: (λ x λ y | 2x+y) =>
=> (λ z= (λ x λ y | 2x+y) | z.8) =>
=>((λ x λ y | 2x+y) . 8)
Lambda-kalkul – další příklady
•
•
•
•
((λ a λ b | 2a + b) . 6) <: (2;3) =>
=> ((λ a = 2 λ b = 3 | 2a + b) . 6) =>
(2.2+3).6
42