แคลคูลัสแลมบ์ดาดูเหมือนไม่เป็นนามธรรม และฉันไม่เห็นจุดของมัน


18

คำถามพื้นฐาน:

อะไรแคลคูลัสแลมบ์ดาทำเพื่อเราว่าเราไม่สามารถทำอะไรกับคุณสมบัติฟังก์ชั่นพื้นฐานและสัญกรณ์เรียนรู้โดยทั่วไปในพีชคณิตโรงเรียนมัธยม?

ก่อนอื่นสิ่งที่เป็นนามธรรมหมายถึงอะไรในบริบทของแคลคูลัสแลมบ์ดา? ความเข้าใจของฉันเกี่ยวกับคำว่า abstract เป็นสิ่งที่หย่าร้างจากเครื่องจักรซึ่งเป็นแนวคิดสรุปของแนวคิด

อย่างไรก็ตามแลมบ์ดาฟังก์ชั่นโดยทำไปกับชื่อฟังก์ชั่นป้องกันระดับที่เป็นนามธรรม ตัวอย่างเช่น:

f(x) = x + 2
h(x, y) = x + 5 y

แต่ถึงแม้จะไม่ได้กำหนดกลไกของฟังก์ชั่นเหล่านี้เราก็สามารถพูดคุยเกี่ยวกับองค์ประกอบของมันได้อย่างง่ายดาย ตัวอย่างเช่น:

1. h(x, y) . f(x) . f(x) . h(x, y) or 
2. h . f . f . h

เราสามารถรวมข้อโต้แย้งหากเราต้องการหรือเราสามารถสรุปได้อย่างสมบูรณ์เพื่อให้ภาพรวมของสิ่งที่เกิดขึ้น และเราสามารถลดพวกมันอย่างรวดเร็วให้เป็นฟังก์ชันเดียว ลองดูองค์ประกอบที่ 2 ฉันสามารถมีรายละเอียดของชั้นนักเรียนที่ฉันสามารถเขียนได้โดยขึ้นอยู่กับความสำคัญของฉัน:

g = h . f . f . h
g(x, y) = h(x, y) . f(x) . f(x) . h(x, y)
g(x, y) = h . f . f . h = x + 10 y + 4

ลองทำข้างบนด้วยแคลคูลัสแลมบ์ดาหรืออย่างน้อยก็นิยามฟังก์ชั่น ฉันไม่แน่ใจว่าสิ่งนี้ถูกต้อง แต่ฉันเชื่อว่าการเพิ่มขึ้นครั้งแรกและครั้งที่สองจะเพิ่มขึ้น 2

(λuv.u(u(uv)))(λwyx.y(wyx))x

และคูณด้วย 5y

(λz.y(5z))

แทนที่จะเป็นนามธรรมสิ่งนี้ดูเหมือนจะเข้าไปในสิ่งที่มันหมายถึงการเพิ่มทวีคูณเป็นต้นสิ่งที่เป็นนามธรรมในใจของฉันหมายถึงระดับที่สูงกว่าระดับที่ต่ำกว่า

นอกจากนี้ฉันกำลังดิ้นรนเพื่อดูว่าทำไมแคลคูลัสแลมบ์ดาถึงเป็นเช่นนั้น ข้อดีของ

(λuv.u(u(uv)))(λwyx.y(wyx))x

เกิน

h(x) = x + 5 y

หรือสัญลักษณ์รวมกัน

Hxy.x+5y

หรือแม้แต่สัญกรณ์ของ Haskell

h x y = x + 5 * y

อีกครั้งสิ่งที่แคลคูลัสแลมบ์ดาทำเพื่อเราที่เราไม่สามารถทำได้กับคุณสมบัติฟังก์ชั่นสไตล์ f (x) และสัญกรณ์ที่หลายคนคุ้นเคย


9
มันตลกมากที่คุณยกตัวอย่างจาก Haskell เนื่องจาก Haskell นั้นอิงจากแคลคูลัสแลมบ์ดา แคลคูลัสแลมบ์ดาไม่เกี่ยวกับสัญกรณ์เฉพาะใด ๆ มันเป็นรูปแบบการคำนวณเทียบเท่ากับเครื่องจักรทัวริงซึ่ง "ทุกอย่างเป็นฟังก์ชั่น"
Yuval Filmus

2
ใช่ฉันบอกแล้วว่ามันขึ้นอยู่กับแคลคูลัสแลมบ์ดา คำถามที่ฉันยังไม่เห็นคำตอบในทางที่สมเหตุสมผลกับฉันคือเหตุผลที่ฮาเซลได้ตั้งอยู่บนแคลคูลัสแลมบ์ดาเมื่อเทียบกับ . . คุณสมบัติพื้นฐานของฟังก์ชั่นที่ฉันเรียนในชั้นประถมศึกษาปีที่ นั่นเป็นส่วนสำคัญของคำถามทั้งหมดนี้
JDG

6
"ไม่มีจุดมุ่งหมายในใจ" เกือบจะเป็นคำจำกัดความของ "นามธรรม" ใช่หรือไม่? :-)
David Richerby

1
ฉันจะไม่พูดว่ามันเสื่อมเสีย การรักษาฟังก์ชั่นนั้นสามารถทำได้ผ่านแคลคูลัส แต่ฉันเห็นได้ว่าการตีความว่าเป็นโรงเรียนมัธยมสามารถตีความได้อย่างไร ฉันจะปรับมัน
JDG

6
ฉันสงสัยว่าคุณมีคำจำกัดความที่เป็นทางการว่า "สัญกรณ์ฟังก์ชันพีชคณิตระดับมัธยม" หากคุณมีคำจำกัดความใด ๆ สำหรับฟังก์ชั่นดังกล่าวอาจเป็นเซตเชิงทฤษฎีที่ไม่มีความหมายการคำนวณ ส่วนหนึ่งของแคลคูลัสแลมบ์ดาคือการเข้าใจสัญกรณ์ดังกล่าวในแง่ของตัวเองและกล้าพูดออกมาจากแอพพลิเคชั่นเฉพาะเช่นฟังก์ชันพหุนามหรือแคลคูลัส
Derek Elkins ออกจาก SE

คำตอบ:


24

มีหลายเหตุผลที่แคลคูลัสแลมบ์ดามีความสำคัญมาก

เหตุผลที่สำคัญมากคือแคลคูลัสแลมบ์ดาทำให้เรามีรูปแบบของการคำนวณที่ฟังก์ชันการคำนวณเป็นพลเมืองชั้นหนึ่ง

หนึ่งไม่สามารถแสดงฟังก์ชั่นการสั่งซื้อที่สูงขึ้นในภาษาของพีชคณิตมัธยม

ใช้เป็นตัวอย่างการแสดงออกแลมบ์ดา

λf.λg.λx.f(g(x))

การแสดงออกที่เรียบง่ายนี้แสดงให้เราเห็นว่าภายในแลมบ์ดาแคลคูลัสการจัดองค์ประกอบของฟังก์ชั่นนั้นเป็นหน้าที่ ในพีชคณิตระดับมัธยมสิ่งนี้ไม่แสดงออกอย่างง่ายดาย

ในแคลคูลัสแลมบ์ดามันง่ายมากที่จะแสดงว่าฟังก์ชันจะคืนค่าฟังก์ชันตามผลลัพธ์

นี่คือตัวอย่างเล็ก ๆ การแสดงออก (ที่นี่ฉันถือว่าแคลคูลัสแลมบ์ดาใช้กับการบวกและค่าคงที่จำนวนเต็ม)

(λf.λg.λx.f((g(x)))(λx.x+2)

จะลดลง

λก..λx.ก.(x)+2

แจ้งให้ทราบว่าภายในแคลคูลัสแลมบ์ดา, ฟังก์ชั่นการแสดงออกและไม่ได้คำจำกัดความของรูปแบบอี สิ่งนี้ทำให้เราเป็นอิสระจากความจำเป็นในการตั้งชื่อฟังก์ชั่นและเพื่อแยกความแตกต่างระหว่างประเภทของวากยสัมพันธ์ของนิพจน์และหมวดหมู่ของคำจำกัดความของวากยสัมพันธ์(x)=อี

นอกจากนี้เมื่อมันเป็นไปไม่ได้ (หรือยุ่งยากอย่างไม่น่าเชื่อ) ในการแสดงฟังก์ชั่นที่มีลำดับสูงกว่าหนึ่งจะมีปัญหากับการกำหนดประเภทให้กับการแสดงออก

องค์ประกอบของฟังก์ชั่นมีประเภท polymorphic

α.β.γ.(βγ)((αβ)γ)

ในระบบชนิด Hindley-Milner

จุดขายที่แข็งแกร่งมากสำหรับแคลคูลัสแลมบ์ดานั้นเป็นแนวคิดที่แม่นยำของแคลคูลัสแลมบ์ดาที่พิมพ์ออกมา ระบบชนิดต่าง ๆ สำหรับภาษาโปรแกรมที่ใช้งานได้เช่น Haskell และตระกูล ML นั้นใช้ระบบประเภทสำหรับแลมบ์ดานิคซิและระบบประเภทเหล่านี้ให้การรับประกันที่แข็งแกร่งในรูปแบบของทฤษฎีทางคณิตศาสตร์:

หากโปรแกรมถูกพิมพ์อย่างดีและeลดลงเหลือe ดังนั้นe จะถูกพิมพ์อย่างดีeeอี'อี'

และหากถูกพิมพ์อย่างดีแล้วeจะไม่แสดงข้อผิดพลาดบางอย่างอีอี

การพิสูจน์ว่าการโต้ตอบของโปรแกรมเป็นสิ่งสำคัญโดยเฉพาะ Curry-Howard isomorphism (ดูตัวอย่างเช่นhttps://www.rocq.inria.fr/semdoc/Presentations/20150217_PierreMariePedrot.pdf ) แสดงให้เห็นว่ามีการโต้ตอบที่แม่นยำมากระหว่างแคลคูลัสแลมบ์ดาและตรรกะเชิงการนำเสนอสอดคล้องสูตรตรรกะφ T หลักฐานการφ Tสอดคล้องกับระยะแลมบ์ดาที่มีประเภทT , และ beta-การลดลงของระยะนี้สอดคล้องกับการดำเนินการกำจัดตัดหลักฐานTφTφTT

ฉันขอให้ผู้ที่รู้สึกว่าพีชคณิตมัธยมเป็นทางเลือกที่ดีสำหรับแคลคูลัสแลมบ์ดาในการพัฒนาบัญชีของพีชคณิตมัธยมที่มีความเป็นระเบียบสูงและหลากหลายพิมพ์พร้อมกับแนวคิดที่เหมาะสมของ isomorphism Curry-Howard หากคุณสามารถทำงานจากผู้ช่วยพิสูจน์แบบโต้ตอบตามพีชคณิตมัธยมที่จะช่วยให้เราพิสูจน์ทฤษฎีบทจำนวนมากที่ได้รับการกรงเล็บโดยใช้แลมบ์ดาผู้ช่วยพิสูจน์แคลคูลัสเช่น Coq และ Isabelle ซึ่งจะดียิ่งขึ้น จากนั้นฉันจะเริ่มใช้พีชคณิตมัธยมและดังนั้นฉันแน่ใจว่าจะมีอีกหลายคนที่อยู่กับฉัน


นี่คือคำอธิบายที่ดี การได้ยินว่าฟังก์ชั่นที่มีลำดับสูงกว่า (เช่นการประพันธ์เพลง) และการพิมพ์นั้นดีกว่าในแคลคูลัสแลมบ์ดาเป็นสิ่งที่น่าสนับสนุนแม้กระทั่ง moreso ว่าสิ่งนี้อำนวยความสะดวกในการพิสูจน์และรหัสที่พิสูจน์ได้ ฉันไม่เห็นการแยกส่วนใหญ่ของสิ่งที่คุณพูดถึงและทำไมสัญกรณ์ดั้งเดิมจึงไม่เพียงพอ (เช่นเกี่ยวกับการไม่จำเป็นต้องมีนิยามคำนิยามแยกต่างหาก f (x) = e) แต่มันมีประโยชน์มากที่คุณตั้งชื่อด้วยเหตุผลบางประการเหล่านี้และ มันให้ความรู้สึกว่าพื้นที่ใดได้รับการปรับปรุงโดยแลมบ์ดาแคลคูลัส
JDG

แน่นอนหนึ่งสามารถแนะนำคำจำกัดความท้องถิ่นของแบบฟอร์มแต่เหล่านี้แล้วจะแสดงในไวยากรณ์ของแคลคูลัสแลมบ์ดาเป็น ( λ x . E ) E ' แคลคูลัสแลมบ์ดาช่วยให้เราสามารถแสดงฟังก์ชั่นโดยไม่ต้องตั้งชื่อเช่นเดียวกับที่สามารถ (ในพีชคณิตมัธยม!) พูดถึงหมายเลข 4โดยไม่ต้องตั้งชื่อพวกมันด้วยตัวแปรบางอย่าง letx=eine(λx.e)e4
Hans Hüttel

5

เมื่อฟังก์ชั่นได้รับการอธิบายครั้งแรกกับเด็ก ๆ พวกเขาจะถูกระบุเป็นหลักด้วยกราฟ (แปลง) หรืออาจมีสูตร; นี่คือวิธีการที่ฟังก์ชั่นถูกเข้าใจในอดีตก่อนการถือกำเนิดของแนวโน้มแบบทางการในคณิตศาสตร์ ฟังก์ชั่นปัจจุบันที่สอนในแคลคูลัสปีแรกที่มีฟังก์ชั่นที่แท้จริงที่เป็นฟังก์ชั่นจากไปRRR

ฟังก์ชั่นในแคลคูลัสแลมบ์ดานั้นมีความทั่วไปมากกว่า คำจำกัดความที่แน่นอนนั้นขึ้นอยู่กับว่าแคลคูลัสแลมบ์ดาของคุณพิมพ์หรือไม่พิมพ์ ในแคลคูลัสแลมบ์ดาบริสุทธิ์ทุกอย่างเป็นฟังก์ชั่น นี่เป็นเรื่องทั่วไปมากกว่าหน้าที่ของแคลคูลัส

แม้แต่ภาษาขั้นตอนบางครั้งก็ใช้แนวคิดจากแลมบ์ดาแคลคูลัส ฟังก์ชันการเรียงลำดับใน C ยอมรับว่าเป็นพารามิเตอร์ของฟังก์ชั่นการเปรียบเทียบซึ่งใช้ในการเปรียบเทียบองค์ประกอบ แคลคูลัสแลมบ์ดาไปไกลกว่ามาก - ฟังก์ชั่นไม่เพียง แต่รับฟังก์ชั่นเป็นอินพุต แต่ยังสามารถส่งออกได้

แลมบ์ดาแคลคูลัสเป็นแบบจำลองการคำนวณที่เทียบเท่ากับกำลังของเครื่องจักรทัวริง มันเป็นระบบที่สมบูรณ์แก่ตัวเอง แคลคูลัสแลมบ์ดาบริสุทธิ์ไม่มี "5" หรือ "+" เป็นคำดั้งเดิม - สามารถกำหนดได้ภายในแคลคูลัสเช่นเดียวกับ "5" และ "+" ไม่ใช่ดั้งเดิมของทฤษฎีเซต (ภาษาโปรแกรมเชิงปฏิบัติใช้ตัวเลขตามธรรมชาติเพื่อเหตุผลด้านประสิทธิภาพ)

ฉันสงสัยว่าหนึ่งในเหตุผลที่คุณไม่ประทับใจกับแคลคูลัสแลมบ์ดาคือความคิดของมันแผ่ซ่านไปทั่ววาทกรรมการเขียนโปรแกรมจนมันดูไม่เป็นนวัตกรรมอีกต่อไป


"ฉันสงสัยว่าหนึ่งในเหตุผลที่คุณไม่ประทับใจกับแคลคูลัสแลมบ์ดา" Therin ตั้งคำถามที่ฉันถาม: แลมบ์ดาแคลคูลัสทำอะไรให้เรา? กล่าวอีกนัยหนึ่งเมื่อเราไม่ใช้แคลคูลัสแลมบ์ดาจะเกิดอะไรขึ้น เมื่อเราใช้แลมบ์ดาแคลคูลัสเราจะได้อะไร? ถ้าแคลคูลัสแลมบ์ดาเป็นครั้งแรกที่คนคิดว่าจะเกิดอะไรขึ้นถ้าฟังก์ชั่นสามารถสร้างฟังก์ชั่นได้ ระหว่างโปรแกรมไพ ธ อนเริ่มต้นของฉันทำให้ข้อความที่มีฟังก์ชั่นที่ฉันประเมินในภายหลังเหมือนกับการมอบหมายงานการตัดสินใจให้กับคนอับละอองเกสร ดูเหมือนชัดเจน
JDG

นี่คือก่อนที่ฉันจะรู้อะไรมาก ฉันแค่คิดว่ารหัสนั้นน่ารำคาญสำหรับการพิมพ์ซ้ำไปซ้ำมาและการเขียนโปรแกรมนั้นควรช่วยฉันสร้างฟังก์ชันการทำงานโดยอัตโนมัติรวมถึงฟังก์ชั่นของตัวเองด้วย
JDG

2
Python รองรับการตั้งโปรแกรมการทำงาน ภาษาโปรแกรมแรกไม่ได้ หากคุณตั้งโปรแกรมไว้ใน FORTRAN คุณจะไม่ได้สร้างโปรแกรมที่มีข้อความที่มีฟังก์ชั่นที่คุณประเมินภายหลัง คุณไม่ได้ใช้ความสามารถที่มีให้โดยแนวคิดจากแคลคูลัสแลมบ์ดา
Yuval Filmus

2
Evalมีต้นกำเนิดในLISPซึ่งได้รับอิทธิพลอย่างมากจากแคลคูลัสแลมบ์ดา บางสิ่งเช่นนี้ไม่สามารถทำได้ใน FORTRAN, C, COBOL และภาษาการเขียนโปรแกรมอื่น ๆ อีกมากมาย
Yuval Filmus

ใช่หลามสนับสนุน progamming ใช้งานได้ - แต่ฉันไม่แน่ใจว่ามันเป็น eval () ความสามารถได้รับแรงบันดาลใจจากλCalc --- คุณไม่ don'tCalc คิด: ฉันต้องการสร้างรหัสอัตโนมัติที่ฉันสามารถประเมินได้ในภายหลัง นั่นคือการพูดว่า alCalc ต้องคิดว่า "ฉันจะบอกมิแรนด้าให้ใช้วิจารณญาณที่ดีที่สุดของเธอในการบริหารแผนกของเธอ" --- กล่าวอีกนัยหนึ่งคือการรับฟังก์ชั่นเพื่อสร้างฟังก์ชั่น คุณไม่จำเป็นต้องλCalcคิดเกี่ยวกับการมอบหมายงานระดับสูง หากคุณต้องการพูดคุยเกี่ยวกับการวาดแรงบันดาลใจจาก alCalc มันเป็นจุดที่เหมาะสมกว่าสำหรับฟังก์ชั่นแลมบ์ดา, ความเข้าใจ ฯลฯ
JDG

4

x2xx2

λx.x2x2

ff(x)=x2f

การใช้แลมบ์ดานิพจน์ในภาษาการเขียนโปรแกรมมีข้อดีคล้ายกัน คุณสามารถเขียนสิ่งที่ฟังก์ชั่นทำตรงนั้นในจุดที่ต้องการแทนที่จะต้องกำหนดฟังก์ชั่นใหม่ทั้งหมดที่อื่นในโปรแกรมของคุณ

ddxx2ddxx2


θ:VV

θ(v)(f)=f(v)

หลายคนพบว่าสัญกรณ์การประเมินสองครั้งนี้ทำให้เกิดความสับสนและ / หรือความไม่แน่นอน รุ่นที่เป็นนามธรรมของแลมบ์ดา

θ=λv.λf.f(v)

ไม่มีปัญหานั้น


ในที่สุดมีทฤษฎีบทของเรื่องไร้สาระนามธรรมที่ว่า "เพียงพิมพ์แลมบ์ดาแคลคูลัส" นั้นเป็นสิ่งเดียวกับ "หมวดหมู่ปิดคาร์ทีเซียน" - ดังนั้นหากคุณเคยพบว่าตัวเองต้องการที่จะทำการคำนวณในหมวดหมู่ปิดคาร์ทีเซียน เพียงพิมพ์แคลคูลัสแลมบ์ดาให้ทำ


ฉันกลับมาที่คำถามนี้และฉันพบว่าคำตอบนี้ยอดเยี่ยม ขอขอบคุณ. คำตอบทั่วไปนี่น่าสนใจจริงๆ
JDG

4

ฉันจะบอกล่วงหน้าฉันไม่ใช่ผู้เชี่ยวชาญในหัวข้อนี้ แต่ฉันเพิ่งใช้เวลาศึกษาและสิ่งหนึ่งที่น่าสนใจที่สุดสำหรับฉันในหัวข้อใด ๆ คือประวัติศาสตร์ที่อยู่เบื้องหลัง ดังนั้นสำหรับฉันการทำความเข้าใจประวัติเบื้องหลังแคลคูลัสแลมบ์ดาช่วยอธิบายว่าทำไมมันมีประโยชน์

สรุปสั้น ๆ คือในช่วงต้นทศวรรษที่ 1900 หลังจากทฤษฎีเซตเริ่มที่จะถอดและคณิตศาสตร์ได้ถูกจินตนาการอีกครั้งตามเซตนักคณิตศาสตร์บางคนสังเกตว่าในขณะที่นิยามทฤษฎีเซตช่วยให้คุณอ้างว่ามีโครงสร้างที่แน่นอนอยู่ ไม่ได้บอกคุณว่าเพื่อสร้างและคำนวณ ดังนั้นการตั้งทฤษฎีความหมายnonconstructive Mathematicians เริ่มสงสัยว่าถ้ามีวิธีที่จะพัฒนาสร้างสรรค์คำจำกัดความที่จะไปไกลกว่าการพิสูจน์ว่าสิ่งที่เป็นและแทนที่จะพิสูจน์ว่ามันเป็นอย่างไร

จากวิกิพีเดีย :

ในคณิตศาสตร์การพิสูจน์เชิงสร้างสรรค์เป็นวิธีการพิสูจน์ที่แสดงให้เห็นถึงการมีอยู่ของวัตถุทางคณิตศาสตร์โดยการสร้างหรือการให้วิธีการในการสร้างวัตถุ สิ่งนี้ตรงกันข้ามกับการพิสูจน์ที่ไม่สร้างสรรค์ (หรือที่รู้จักกันว่าการพิสูจน์การมีอยู่หรือทฤษฎีการดำรงอยู่ที่บริสุทธิ์) ซึ่งพิสูจน์การมีอยู่ของวัตถุชนิดใดชนิดหนึ่งโดยไม่แสดงตัวอย่าง

มันแสดงให้เห็นแล้วว่าแคลคูลัสแลมบ์ดาและทัวริงเครื่องจักรสามารถเป็นตัวแทนของฟังก์ชันการคำนวณใด ๆ และจึงเทียบเท่า

ในทางทฤษฎีฟังก์ชันทางคณิตศาสตร์หรือแนวคิดใด ๆสามารถเข้ารหัสในรูปแบบแคลคูลัสแลมบ์ดาและคำนวณได้ ซึ่งหมายความว่าแลมบ์ดาแคลคูลัสสามารถเป็นพื้นฐานที่แยกจากกันโดยสิ้นเชิงสำหรับคณิตศาสตร์ แต่เห็นได้ชัดว่าน่าเบื่ออย่างยิ่ง

แคลคูลัสแลมบ์ดาไม่ได้ "มีประโยชน์" ในแง่ที่ว่าคุณจะไม่เขียนโค้ดโดยใช้มัน แต่มันจะเป็นพื้นฐานสำหรับซีแมนทิกส์เชิง denotationalซึ่งใช้เพื่ออธิบายโปรแกรมและเอฟเฟกต์ไดนามิก ใช้ในการอภิปรายความถูกต้องของโปรแกรมและความหมายทางตรรก นอกจากนี้ยังเห็นได้ชัดว่ามีอิทธิพลอย่างมากต่อการพัฒนาภาษาโปรแกรมการทำงานซึ่งวาดแนวคิดทั้งหมดของการดำเนินการจากแลมบ์ดาแคลคูลัส

หวังว่าจะช่วย

แก้ไขเพื่อเพิ่ม:ฉันเพิ่งชี้ไปที่เอกสารนี้แสดงความสัมพันธ์ระหว่างทอพอโลยีแลมบ์ดาแคลคูลัสและฟิสิกส์ ฉันอ่านคำแถลงที่น่าอัศจรรย์นี้อย่างคร่าว ๆ

ในขณะที่เครื่องทัวริงสามารถมองเห็นได้ในฐานะที่เป็นอุดมคติรูปแบบที่เรียบง่ายของคอมพิวเตอร์ฮาร์ดแวร์แคลคูลัสแลมบ์ดาเป็นเหมือนรูปแบบที่เรียบง่ายของซอฟแวร์ ... บทกวีพูดแคลคูลัสแลมบ์ดาอธิบายจักรวาลที่ทุกอย่างเป็นโปรแกรมที่และทุกอย่างเป็นข้อมูล: โปรแกรมที่มีข้อมูล

ประเด็นก็คือแคลคูลัสแลมบ์ดาเป็นรูปแบบการคำนวณซอฟต์แวร์ในอุดมคติและไม่ได้เชื่อมโยงกับการใช้งานเฉพาะในภาษาการเขียนโปรแกรมใด ๆ มันแบบจำลองการคำนวณบริสุทธิ์


เพิ่มเติมเกี่ยวกับประวัติ: ประวัติโดยย่อของ calcul-แคลคูลัสที่สารานุกรมปรัชญาสแตนฟอร์ด พวกเขามีรายการมากกว่าหนึ่งสามารถดำเนินการในชีวิต
David Tonhofer


3

แคลคูลัสแลมบ์ดาไม่ได้ถูกออกแบบมาให้เป็นภาษาการเขียนโปรแกรม อันที่จริงมันถูกสร้างขึ้นในช่วงทศวรรษที่ 1930 ก่อนที่เราจะมีคอมพิวเตอร์ที่ตั้งโปรแกรมได้ แต่มันถูกสร้างขึ้นเป็นแบบจำลองอย่างเป็นทางการสำหรับการศึกษาการคำนวณเอง หากคุณผิดหวังในการแสดงรหัสหรือฟังก์ชันทางคณิตศาสตร์อย่างง่ายนั่นเป็นเพราะนั่นไม่ใช่สิ่งที่มันมีไว้สำหรับ


1
"หลายทศวรรษก่อนที่เราจะมีคอมพิวเตอร์ที่ตั้งโปรแกรมได้" - ผิด คอมพิวเตอร์ที่ตั้งโปรแกรมได้มีอยู่ก่อน (ถ้าไม่ใช่คอมพิวเตอร์ทั่วไป) และคอมพิวเตอร์สากลเครื่องแรกสร้างขึ้นในช่วงทศวรรษที่ 1930
ราฟาเอล

-2

มีแคลคูลัสแลมบ์ดาอยู่เพื่อให้สามารถสร้างฟังก์ชั่นนิรนาม (aka lambda) ได้ หากคุณไม่ทำชื่อฟังก์ชั่นเนมสเปซสามารถทำให้ยุ่งเหยิงและสามารถเรียกใช้ชื่อฟังก์ชันที่ว่างได้ สิ่งนี้มีความสำคัญอย่างยิ่งเมื่อต้องจัดการกับสิ่งที่เรียกว่า "ฟังก์ชันลำดับสูงกว่า" ซึ่งส่งคืนฟังก์ชัน (หรือตัวชี้ฟังก์ชัน) ด้วยเหตุผลที่ชัดเจน

ฟังก์ชั่นแลมบ์ดาจะเทียบเท่ากับตัวแปรที่กำหนดขอบเขตไว้ในเครื่อง ฟังก์ชั่นการเขียนโปรแกรมโดยไม่มีฟังก์ชั่นแลมบ์ดานั้นคล้ายคลึงกับการเขียนโปรแกรมแบบโพรซีเดอร์โดยไม่มีตัวแปรในตัวเครื่องเช่นความคิดแย่ ๆ

"ทำไมแคลคูลัสแลมบ์ดาถึงเป็นเรื่อง" นักคณิตศาสตร์ชอบความซ้ำซ้อน แลมบ์ดาแคลคูลัสไม่ค่อยได้ใช้ในวิชาคณิตศาสตร์เพราะเมื่อคุณค้นพบว่าสัญกรณ์นั้นไม่มีประโยชน์มากนัก

"ถ้าคุณสามารถทำงานจากผู้ช่วยพิสูจน์แบบโต้ตอบโดยใช้พีชคณิตของโรงเรียนมัธยมที่จะช่วยให้เราพิสูจน์ทฤษฎีบทจำนวนมากที่ได้รับการพิสูจน์อย่างเป็นทางการโดยใช้ผู้ช่วยพิสูจน์แคลคูลัสแลมบ์ดาเช่น Coq และ Isabelle นั่นจะดีกว่าฉัน จากนั้นเริ่มใช้พีชคณิตมัธยมและดังนั้นฉันแน่ใจว่าจะมีคนอื่นอีกมากมายที่อยู่กับฉัน " คุณเคยได้ยินเรื่อง metamath หรือไม่? ไม่มีแลมบ์ดาแคลคูลัสเกี่ยวข้องสามารถพิสูจน์ได้ว่าทฤษฎีบท coq / isabelle จำนวนมาก


นอกเหนือจากความคิดเห็นแล้วคำตอบนี้นำเสนออะไร?
กราฟิลส์

@ ราฟาเอลข้อมูลที่ผิด คำตอบส่วนใหญ่ไม่ได้สมเหตุสมผล ไม่มีการขาดแคลนชื่อ "ฟังก์ชั่นแลมบ์ดา" ไม่เทียบเท่ากับตัวแปรที่กำหนดขอบเขต มันไม่สมเหตุสมผลเลย ฉันถือว่านี่หมายถึงการอ้างถึงletแต่ในขณะที่letสามารถเข้ารหัสด้วยฟังก์ชั่นไม่ระบุชื่อคุณชัดเจนไม่สามารถไปทางอื่น โปรแกรมการทำงานไม่ได้ต้อง "ฟังก์ชั่นแลมบ์ดา" เช่นคัสFPหรือป่านศรนารายณ์
Derek Elkins ออกจาก SE

ส่วนใหญ่ฉันต้องการโพสต์ความคิดเห็นเพื่อคำตอบของฮันส์ แต่มีกรรมไม่เพียงพอ ดังนั้นฉันจึงตัดสินใจที่จะเปลี่ยนความคิดเห็นให้เป็นคำตอบที่เต็มเปี่ยม
sn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.