แลมบ์ดาแคลคูลัสเป็น syntactic ล้วนๆหรือไม่


29

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

"อาจมีฟังก์ชั่นที่ไม่ระบุชื่อ" : ฟังก์ชั่นแลมบ์ดาไม่ระบุชื่อพวกเขาทั้งหมดเรียกว่าแลมบ์ดา อนุญาตให้ใช้ในการคำนวณทางคณิตศาสตร์เพื่อใช้ตัวแปรเดียวกันสำหรับฟังก์ชั่นที่แตกต่างกันหากชื่อไม่สำคัญ ตัวอย่างเช่นทั้งสองฟังก์ชั่นในการเชื่อมต่อ Galois มักจะถูกเรียกว่า *

"ฟังก์ชั่นสามารถรับฟังก์ชั่นเป็นอินพุต" : ไม่ใช่เรื่องใหม่ที่คุณสามารถทำได้ด้วยฟังก์ชั่นทั่วไป

"ฟังก์ชั่นเป็นกล่องดำ" : เพียงแค่อินพุตและเอาต์พุตก็เป็นคำอธิบายที่ถูกต้องของฟังก์ชันทางคณิตศาสตร์ ...

นี่อาจดูเหมือนการอภิปรายหรือคำถามที่มีความเห็น แต่ฉันเชื่อว่าควรมีคำตอบที่ "ถูกต้อง" สำหรับคำถามนี้ ฉันต้องการที่จะรู้ว่าแลมบ์ดาแคลคูลัสเป็นเพียงสัญกรณ์หรือแบบแผนวากยสัมพันธ์สำหรับการทำงานกับฟังก์ชั่นทางคณิตศาสตร์หรือไม่ว่ามีความแตกต่างที่สำคัญหรือความหมายระหว่างแลมบ์ดาและฟังก์ชั่นธรรมดา


2
ฉันไม่ต้องการที่จะให้คำตอบที่สมบูรณ์จากมัน แต่ฟังก์ชั่นไม่สามารถยอมรับฟังก์ชั่นเป็นอินพุต ฉันสามารถเขียน f (g (0)) แต่ฉันไม่สามารถเขียน f (g, 0) หลังเรียกว่า "การทำงาน" และเรียกใช้กฎที่แตกต่างกัน
Cort Ammon - Reinstate Monica

ฟังก์ชัน @CortAmmon เป็นฟังก์ชัน ฟังก์ชั่นเป็นเพียงชุดคู่ (แม้ว่าการพูดอย่างเคร่งครัดมันเป็นสามเท่า (D, R, G) โดยที่ D คือโดเมน R คือช่วงและ G คือกราฟ (ชุดคู่) อีกประเด็นเล็ก ๆ ที่ฉันมี ด้วยคำตอบที่ยอมรับได้ แต่นั่นไม่ได้อยู่ที่นี่หรือที่นั่น) ดังนั้นถ้า D เป็นชุดของฟังก์ชั่นและคุณจับคู่โดยที่องค์ประกอบแรกเป็นฟังก์ชันใน D ดังนั้นคุณจะมีฟังก์ชัน ตรวจสอบวิกิพีเดีย: "ฟังก์ชั่นนี้เป็นการแมป [ฟังก์ชั่น] ... "
Neil

เช่นฟังก์ชันทั้งหมดเป็นฟังก์ชันไม่ใช่ฟังก์ชันทั้งหมดเป็นฟังก์ชัน แต่กฎทั้งหมดที่ใช้กับฟังก์ชั่นนำไปใช้กับ functionals
Neil

คำตอบ:


63

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

แง่แลมบ์ดาไม่ได้ฟังก์ชั่น 1 พวกเขาเป็นส่วนของไวยากรณ์เช่นคอลเลกชันของสัญลักษณ์บนหน้า เรามีกฎสำหรับจัดการสัญลักษณ์เหล่านี้ซึ่งเป็นการลดเบต้าที่สำคัญที่สุด คุณสามารถมีหลายที่แตกต่างกันแง่แลมบ์ดาว่าตรงตามลักษณะที่เดียวกันฟังก์ชั่น 2

ฉันจะพูดถึงประเด็นของคุณโดยตรง

อย่างแรกแลมบ์ดาไม่ใช่ชื่อที่ถูกใช้ซ้ำ ไม่เพียง แต่จะทำให้เกิดความสับสนอย่างยิ่ง แต่เราไม่ได้เขียน (หรือ ) ซึ่งเป็นสิ่งที่เราต้องการถ้าเป็นชื่อของฟังก์ชันเหมือนกับที่เราเขียน(x) ในเราสามารถแทนที่ (ถ้ามันถูกนิยามโดยคำแลมบ์ดา) ด้วยคำแลมบ์ดาที่สร้างบางสิ่งเช่นความหมายคือนิพจน์ที่สามารถใช้แทนฟังก์ชันไม่ใช่ ประกาศประกาศฟังก์ชั่น (ชื่อλ(x)(λ x)λf(x)f(x)f(λy.y)(x)(λy.y)λหรือสิ่งอื่นใด) ไม่ว่าในกรณีใดเมื่อเราใช้คำศัพท์ / สัญกรณ์เกินพิกัด (หนึ่งความหวัง) ก็ทำในลักษณะที่สามารถทำให้กระจ่างผ่านบริบทซึ่งแน่นอนไม่สามารถเป็นไปได้สำหรับเงื่อนไขแลมบ์ดา

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

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

ในความเป็นจริงการเปรียบเทียบระหว่างพหุนามกับคำแลมบ์ดานั้นใกล้เคียงกันมากและฉันสงสัยว่าคุณอาจไม่เห็นความแตกต่างระหว่างพหุนามกับฟังก์ชันที่มันแทนดังนั้นฉันจะอธิบายให้ละเอียด 3โดยทั่วไปเมื่อมีการแนะนำพหุนามหลายครั้งมักมีสัมประสิทธิ์จริงพวกเขาจะถือว่าเป็นหน้าที่ที่แท้จริงของประเภทเฉพาะ ตอนนี้ให้พิจารณาทฤษฎีของการลงทะเบียนกะตอบรับเชิงเส้น (LFSR) ส่วนใหญ่เป็นทฤษฎีของชื่อพหุนาม (uni-variate) เหนือแต่ถ้าเราคิดว่ามันเป็นฟังก์ชันแล้วมีฟังก์ชันดังกล่าวมากที่สุดอย่าง มี แต่เป็นจำนวนที่ไม่มีที่สิ้นสุดของพหุนามมากกว่าF_2 4F2F 2 F 2 4 F 2 F 2 F 2 F 2 2 N 2 N F2F24F2วิธีหนึ่งในการดูสิ่งนี้คือเราสามารถตีความพหุนามเหล่านี้เป็นอย่างอื่นที่ไม่ใช่ฟังก์ชั่นแน่นอน - พีชคณิตจะทำอะไร สำหรับ LFSRs เรามักตีความพหุนามเป็นรูปแบบการดำเนินการบน bitstreams ซึ่งหากเราต้องการสามารถแสดงเป็นหน้าที่แม้ว่า ฟังก์ชั่นส่วนใหญ่ดังกล่าวจะไม่อยู่ในภาพการตีความของ LFSRF2F2F22N2N

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

1อาจเป็นไปได้ปัญหาอาจไปในทางอื่น บางทีคุณอาจเข้าใจผิดเกี่ยวกับฟังก์ชั่น

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

3หากคุณมีความชัดเจนเกี่ยวกับความแตกต่างนี้การเปรียบเทียบควรเป็นข้อมูลที่ค่อนข้างดี

4ปัญหานี้ไม่ได้เกิดขึ้นกับเขตข้อมูลคุณลักษณะ 0 เช่นจำนวนเชิงซ้อนจำนวนจริงปันส่วนปันส่วนหรือจำนวนเต็มดังนั้นความแตกต่างจึงไม่คมชัดแม้ว่าจะยังคงมีอยู่


8
นี่เป็นคำตอบที่น่าอัศจรรย์ที่ฉันต้องบอก ล้างความเข้าใจที่คลาดเคลื่อนสำหรับฉันจริงๆ ขอบคุณ!
the0ther

4
ฉันหวังว่าฉันสามารถตอบรายละเอียดนี้ได้! สิ่งต่าง ๆ มากมายที่ฉันต้องการติดตาม โดยรวมแม้ว่าสิ่งนี้มีประโยชน์มากสำหรับฉันและเห็นได้ชัดกับคนอื่น ๆ เช่นกันดังนั้นขอขอบคุณสำหรับคำตอบอย่างละเอียดและพิจารณาแล้ว
Neil

1
มีเพียงจุดเดียวที่ฉันจะมีปัญหากับที่นี่ซึ่งเป็นข้อเรียกร้องของคุณที่ชื่อพหุนามไม่ต้อง "ทำ" บางสิ่ง "ใหม่" เพื่อให้คุ้มค่าการศึกษา แน่นอนพวกเขาทำ! แน่นอนขึ้นอยู่กับสาขาของคุณ "ใหม่" อาจมีความหมายที่แตกต่างกัน (เช่นนักคณิตศาสตร์บริสุทธิ์จะไม่แยกความแตกต่างระหว่างเวกเตอร์คอลัมน์และเวกเตอร์แถวเพราะพวกเขา isomorphic แต่นักสถิติอาจพิจารณาความแตกต่างที่เป็นประโยชน์สำหรับการคำนวณ) พิธีการใหม่ใด ๆ จะต้องพิสูจน์ตัวเอง
Neil

2
@Neil: เชิงอรรถ # 2 โดยเฉพาะมีหลักฐานที่ชัดเจนมากว่าแคลคูลัสแลมบ์ดา "ทำสิ่งใหม่" ที่ "ฟังก์ชั่น" ปกติ "ไม่สามารถทำได้" สำหรับตัวอย่างที่เป็นรูปธรรมมากขึ้นของการแสดงออกแลมบ์ดาที่ไม่ดีก่อตั้งดูcombinators จุดคงที่ เลขโบสถ์ยังทำให้การอ่านที่น่าสนใจโดยเฉพาะอย่างยิ่งการทำงานของบรรพบุรุษ
Kevin

1
ฉันจะเพิ่ม lambdas นั้นเป็นฟังก์ชั่นไม่ได้ทำอะไรที่มีประโยชน์ สิ่งเดียวที่คุณทำได้กับแลมบ์ดาคือผ่านแลมบ์ด้าและส่งคืนแลมบ์ดา คุณไม่มีทางที่จะทดสอบสิ่งที่แลมบ์ดาทำ คุณสามารถส่งแลมบ์ดาอื่นได้เท่านั้นเพื่อรับแลมบ์ดาอื่นเป็นการตอบแทน ในฐานะที่เป็นฟังก์ชั่นชุดของ "ฟังก์ชั่นแลมบ์ดา" จะทำหน้าที่เหมือนกับชุดซิงเกิลตันที่มีเพียงฟังก์ชันตัวตน เป็นเพียงการพิจารณาอินพุตและเอาต์พุตของแลมบ์ดาเป็นนิพจน์ที่คุณสามารถแยกแยะแลมบ์ดาได้
Florian F

0

คิดเกี่ยวกับแนวคิดของตัวแปร ในภาษาเก่าอย่างพื้นฐานคุณไม่มีการจัดสรรแบบไดนามิกและคุณต้องการชื่อหนึ่งชื่อสำหรับแต่ละตัวแปร (สิ่งนี้ไม่ถูกต้องอย่างสมบูรณ์เพราะคุณมีอาร์เรย์ แต่ความคิดคือ ... ) ในหลาย ๆ ปัญหาคุณต้องจัดสรรตัวแปรได้มากเท่าที่คุณต้องการโดยไม่ จำกัด จำนวนชื่อที่โปรแกรมของคุณกำหนด

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


เหตุใดฉันจึงไม่สามารถทำได้ด้วยฟังก์ชั่นที่ตั้งชื่อตามปกติ ถ้าฉันเขียนf(x)=let g(y)=x+y in gนักคณิตศาสตร์ทุกคนจะรู้ได้ทันทีว่าอะไรมีความหมายและเห็นด้วยว่านี่เป็นวัตถุทางคณิตศาสตร์ที่สมเหตุสมผล (อาจจะมีบางเรื่องเกี่ยวกับความชัดเจนเกี่ยวกับโดเมนf) พวกเขาจะมีความสุขอย่างสมบูรณ์ถ้าฉันเขียนชุด{f(n) | n ∈ ℕ}ซึ่งมีฟังก์ชั่นมากมายอนันต์และโดยเฉพาะอย่างยิ่งไม่ได้ถูก จำกัด โดยมีเพียงชื่อจำนวน จำกัด ที่จะใช้
Daniel Wagner

คำถามเกี่ยวกับแคลคูลัสแลมบ์ดา ในขณะที่มีความเกี่ยวข้องนั่นไม่ใช่สิ่งเดียวกับฟังก์ชั่นแลมบ์ดาในการเขียนโปรแกรมภาษา
Andy Dent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.