คำถามติดแท็ก lambda-calculus

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

3
มีความแตกต่างระหว่าง
ขณะนี้ฉันกำลังเรียนรู้แคลคูลัสแลมบ์ดาและสงสัยเกี่ยวกับการเขียนคำแลมด้าสองประเภทที่แตกต่างกันดังต่อไปนี้ λxy.xyλxy.xy\lambda xy.xy λ x λ y. x yλx.λY.xY\lambda x.\lambda y.xy มีความแตกต่างในความหมายหรือวิธีที่คุณใช้การลดเบต้าหรือว่าเป็นเพียงสองวิธีในการแสดงสิ่งเดียวกันหรือไม่ โดยเฉพาะคำจำกัดความของการสร้างคู่นี้ทำให้ฉันประหลาดใจ: คู่ = λ x y. λ พี พีx YλxY.λพี.พีxY\lambda xy.\lambda p.pxy

2
ปริมาณสากล / การดำรงอยู่?
ฉันกำลังดิ้นรนเพื่อทำความเข้าใจกับวัตถุประสงค์ของการวัดปริมาณประเภทที่เป็นสากลและมีอยู่จริง ฉันเล่นรอบกับการเขียนภาษาของเล่นบนพื้นฐานของแคลคูลัสของการก่อสร้าง ฉันได้อ่านเกี่ยวกับMorteและHenkเพื่อช่วยให้ฉันเข้าใจมากขึ้น ฉันไม่เข้าใจว่าทำไม CoC มีทั้งแลมบ์ดาและโดยสังเขป ( ∀ x : . B )( λ x : . B )(λx:A.B)(\lambda x:A . B) ( ∀ x : . B )(∀x:A.B)(\forall x:A . B) สำหรับฉันแล้วแลมบ์ดาบอกให้รู้ว่าระบบย่อยที่ส่งผ่านด้วยตนเอง ในคำอื่น ๆ ที่ต่อไปนี้ ( ∀ x : ∗ . λ a : x . a )(∀x:∗.λa:x.a)(\forall x …

1
ตัวอย่างที่กระชับของต้นทุนชี้แจงของการอนุมานประเภท ML
ฉันทราบว่าค่าใช้จ่ายของการอนุมานประเภทในภาษาที่ใช้งานได้เช่น OCaml อาจสูงมาก การอ้างสิทธิ์คือมีลำดับของนิพจน์เช่นนั้นสำหรับแต่ละนิพจน์ความยาวของประเภทที่สอดคล้องกันนั้นจะเป็นเลขชี้กำลังบนความยาวของนิพจน์ ฉันกำหนดลำดับด้านล่าง คำถามของฉันคือ: คุณรู้จักลำดับที่มีนิพจน์ที่กระชับกว่าซึ่งประสบความสำเร็จในประเภทเดียวกันหรือไม่? # fun a -> a;; - : 'a -> 'a = <fun> # fun b a -> b a;; - : ('a -> 'b) -> 'a -> 'b = <fun> # fun c b a -> c b (b a);; - : (('a …

2
SK2 แคลคูลัสเป็นพื้นฐานที่สมบูรณ์หรือไม่ซึ่ง K2 เป็นตัวรวม K ที่พลิกกลับหรือไม่
โดยเฉพาะถ้าฉันกำหนดใหม่เป็น แทน จะแคลคูลัสเป็นพื้นฐานการแข่งขันหรือไม่?K2K2K_2K2= λ x ( λ y. Y)K2=λx.(λy.y)K_2 = \lambda x. (\lambda y. y)K= λ x ( λ y. x )K=λx.(λy.x)K = \lambda x. (\lambda y. x){ S, เค2, ผม}{S,K2,I}\{S, K_2,I\} ฉันเดาว่า "ไม่" เพียงเพราะฉันไม่สามารถสร้าง combinator K ปกติจาก , , และ combinators แต่ฉันไม่มีอัลกอริทึมที่จะติดตามหรือฉันมีสัญชาตญาณที่ดี เกี่ยวกับการทำสิ่งต่าง ๆ จากผู้รวมกลุ่มSSSผมIIK2K2K_2 ดูเหมือนว่าคุณสามารถกำหนด ด้วย -calculus แต่ฉันไม่สามารถทำงานย้อนกลับจากที่ได้รับในแง่ของและที่เหลือK2= …

2
จุดบรรจบของการขยายเบต้า
Let →β→β\to_\betaพ.ศ. ββ\beta -reduction ในλλ\lambdaแคลคูลัส กำหนดββ\beta -expansion ←β←β\leftarrow_\betaโดยt′←βt⟺t→βt′t′←βt⟺t→βt′t'\leftarrow_\beta t \iff t\to_\beta t' ' คือ←β←β\leftarrow_\betaไหลมารวมกัน? ในคำอื่น ๆ ที่เราจะมีที่ใดl,d,rl,d,rl,d,rถ้าl→∗βd←∗βrl→β∗d←β∗rl \to_\beta^* d\leftarrow_\beta^* rแล้วมีอยู่uuuดังกล่าวที่l←∗βu→∗βrl←β∗u→β∗rl\leftarrow_\beta^* u \to_\beta^* r ? คำสำคัญ: การบรรจบขึ้น, คว่ำทรัพย์สิน CR ฉันเริ่มต้นด้วยการดูที่คุณสมบัติที่อ่อนแอกว่า: การบรรจบกันของท้องถิ่น (เช่นถ้าl→βd←βrl→βd←βrl \to_\beta d\leftarrow_\beta r , ดังนั้นl←∗βu→∗βrl←β∗u→β∗rl\leftarrow_\beta^* u \to_\beta^* r ) แม้ว่านี้เป็นความจริงก็จะได้หมายความถึงการบรรจบกันตั้งแต่ββ\beta -expansion ไม่ยุติ แต่ฉันคิดว่ามันจะช่วยให้ฉันเข้าใจอุปสรรค (บนสุด)ในกรณีที่ทั้งสองลดลงอยู่ที่ระดับบนสมมติฐานที่จะกลายเป็น(λx1.b1)a1→b1[a1/x1]=b2[a2/x2]←(λx2.b2)a2(λx1.b1)a1→b1[a1/x1]=b2[a2/x2]←(λx2.b2)a2(\lambda x_1.b_1)a_1\rightarrow b_1[a_1/x_1]=b_2[a_2/x_2]\leftarrow (\lambda x_2.b_2)a_2 2 …

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

1
การวิเคราะห์ความซับซ้อนของอัลกอริทึมในการใช้งานภาษาโปรแกรมเชิงฟังก์ชัน
ฉันได้เรียนรู้ในวันนี้ว่าการวิเคราะห์อัลกอริทึมนั้นแตกต่างกันตามโมเดลการคำนวณ มันเป็นสิ่งที่ฉันไม่เคยคิดหรือเคยได้ยิน ตัวอย่างที่ให้ฉันซึ่งแสดงให้เห็นเพิ่มเติมโดย User @chiคือ: เช่นพิจารณางาน: รับ ผลตอบแทน x_iใน RAM สิ่งนี้สามารถแก้ไขได้ใน เนื่องจากการเข้าถึงอาร์เรย์เป็นเวลาคงที่ การใช้ TM นั้นเราจำเป็นต้องสแกนอินพุตทั้งหมดดังนั้นx i O ( 1 ) O ( n )( i , x1, … , xn)(ผม,x1,...,xn)(i,x_1 ,…,x_n )xผมxผมx_iO ( 1 )O(1)O(1)O ( n )O(n)O(n) ทำให้ฉันสงสัยเกี่ยวกับภาษาที่ใช้งานได้ จากความเข้าใจของฉัน "ภาษาหน้าที่มีความสัมพันธ์อย่างใกล้ชิดกับแคลคูลัสแลมบ์ดา" (จากความคิดเห็นของ Yuval Filmus ที่นี่ ) ดังนั้นหากภาษาที่ใช้งานอยู่บนพื้นฐานของแคลคูลัสแลมบ์ดา แต่พวกมันทำงานบนเครื่องที่ใช้ RAM เป็นวิธีที่เหมาะสมในการวิเคราะห์ความซับซ้อนของอัลกอริทึมที่ใช้งานโดยใช้โครงสร้างข้อมูลและภาษาที่ใช้งานได้จริง …

1
ประเภทตนเองทำให้แคลคูลัสของการสร้างอุปนัยล้าสมัยหรือไม่?
ประเภทตัวเองเป็นส่วนขยายของแคลคูลัสของการก่อสร้าง [1] ที่อนุญาตให้ภาษาในการแสดงประเภทข้อมูลเกี่ยวกับพีชคณิตเข้ารหัสผ่านการเข้ารหัสสก็อต Scott Encoding ให้ความสามารถในการจับคู่รูปแบบO(1)ซึ่งเป็นหนึ่งในแรงจูงใจหลักสำหรับการรวมคำจำกัดความอุปนัยไว้ใน CC แต่ประเภทของตัวเองถูกสร้างขึ้นมาเพื่อทฤษฎีพื้นฐานที่เรียบง่ายและสง่างามมากและดูเหมือนจะไม่ทรงพลังเลย ประเภทตนเองภายใต้มุมมองทางทฤษฎีทำให้ CIC ล้าสมัยหรือยังมีแง่มุมใดบ้างที่ CIC นั้นเป็นที่ชื่นชอบในความสัมพันธ์กับ Self Tyes? [1] http://staff.computing.dundee.ac.uk/pengfu/document/talks/mvd-2012.pdf

2
การตีความแบบรวมของแคลคูลัสแลมบ์ดา
ตามPeter Selinger , แลมบ์ดาแคลคูลัสเป็นพีชคณิต (PDF) ในช่วงต้นของบทความนี้เขาพูดว่า: การตีความ combinatory ของแคลคูลัสแลมบ์ดาเป็นที่รู้จักกันไม่สมบูรณ์เพราะมันไม่ได้ตอบสนองความξξξ -rule: ภายใต้การตีความ, M=NM=NM = Nไม่ได้หมายความถึงλx.M=λx.Nλx.M=λx.N\lambda x.M = \lambda x.N (Barendregt, 1984) คำถาม: การเทียบเคียงแบบนี้หมายถึงอะไร? เมื่อนิยามคำนิยามของความเท่าเทียมนี้แล้วอะไรคือตัวอย่างของนัยที่เกี่ยวข้อง?

2
กำหนดรายการโดยใช้ระบบพิมพ์ Hindley-Milner เท่านั้น
ผมทำงานเกี่ยวกับคอมไพเลอร์แคลคูลัสแลมบ์ดาขนาดเล็กที่มีการทำงาน Hindley-มิลเนอร์ระบบอนุมานชนิดและตอนนี้ยังสนับสนุนการปล่อย recursive ของ (ไม่อยู่ในรหัสที่เชื่อมโยง) ซึ่งผมเข้าใจว่าควรจะเพียงพอที่จะทำให้มันสมบูรณ์ทัวริง ปัญหาคือตอนนี้ฉันไม่รู้ว่าจะสนับสนุนรายการหรือไม่ว่าจะสนับสนุนพวกเขาแล้วและฉันก็ต้องหาวิธีการเข้ารหัสพวกเขา ฉันต้องการที่จะสามารถกำหนดได้โดยไม่ต้องเพิ่มกฎใหม่ในระบบประเภท วิธีที่ง่ายที่สุดที่ฉันสามารถนึกถึงรายการxคือเป็นสิ่งที่เป็นnull(หรือรายการที่ว่างเปล่า) หรือคู่ที่มีทั้งxรายการxและ แต่การทำเช่นนี้ฉันต้องสามารถกำหนดคู่และหรือของซึ่งฉันเชื่อว่าเป็นผลิตภัณฑ์และประเภทผลรวม ดูเหมือนว่าฉันสามารถกำหนดคู่ด้วยวิธีนี้: pair = λabf.fab first = λp.p(λab.a) second = λp.p(λab.b) เนื่องจากpairจะมีคนประเภทที่a -> (b -> ((a -> (b -> x)) -> x))หลังจากผ่านการพูดเป็นintและstringก็ต้องการให้ผลอะไรกับชนิด(int -> (string -> x)) -> xซึ่งจะเป็นตัวแทนของคู่ที่และint stringสิ่งที่รบกวนจิตใจฉันอยู่ที่นี่คือถ้านั่นหมายถึงคู่ทำไมมันไม่สมเหตุสมผลเชิงเหตุผลหรือไม่บอกเป็นนัย ๆint and string? อย่างไรก็ตามเทียบเท่ากับ(((int and string) -> x) -> x)ราวกับว่าฉันสามารถมีชนิดผลิตภัณฑ์เป็นพารามิเตอร์ของฟังก์ชันเท่านั้น คำตอบนี้ดูเหมือนจะแก้ไขปัญหานี้ได้ …

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

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

1
การคำนวณแคลคูลัสแลมบ์ดาที่เกี่ยวข้องกับเลขคริสตจักร
ฉันเข้าใจว่าเลขคริสตจักร ดูเหมือน ( ... n ครั้ง ... ) Z นี่หมายความว่าไม่มีอะไรมากไปกว่า "ฟังก์ชั่นใช้คูณกับฟังก์ชัน "cncnc_nλs.λz.sλs.λz.s\lambda s. \lambda z. sszszs\;zsssnnnzzz นิยามที่เป็นไปได้ของมีดังต่อไปนี้:s) เมื่อมองไปที่ร่างกายฉันเข้าใจถึงตรรกะเบื้องหลังฟังก์ชั่น อย่างไรก็ตามเมื่อฉันเริ่มประเมินฉันติด ฉันจะอธิบายด้วยตัวอย่าง:timestimes\mathtt{times}times=λm.λn.λs.m(ns)times=λm.λn.λs.m(ns)\mathtt{times} = \lambda m. \lambda n. \lambda s. m \; (n\; s) (λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)→∗→∗→∗λs.(λs.λz.ssz)((λs.λz.sssz)s))λs.(λs.λz.ssz)(λz.sssz)λs.λz.(λz.sssz)(λz.sssz)z(λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)→∗λs.(λs.λz.ssz)((λs.λz.sssz)s))→∗λs.(λs.λz.ssz)(λz.sssz)→∗λs.λz.(λz.sssz)(λz.sssz)z\begin{align*} (\lambda m. \lambda n. \lambda s. m \; (n\; s))(\lambda s.\lambda z.s\;s\;z)(\lambda s.\lambda z.s\;s\;s\;z) \mspace{-4em} \\ \to^*& \lambda …

1
cal -culculus: ประสิทธิภาพสูงสุดในการแสดงฟังก์ชั่นหน่วยความจำคืออะไร?
ฉันต้องการเปรียบเทียบประสิทธิภาพของฟังก์ชั่นเข้ารหัส (Church's / Scott's) เทียบกับโครงสร้างข้อมูลที่เข้ารหัสคลาสสิก (แอสเซมเบลอร์ / C) แต่ก่อนที่ฉันจะทำสิ่งนั้นฉันต้องรู้ว่าประสิทธิภาพ / สามารถเป็นตัวแทนของฟังก์ชันในหน่วยความจำได้อย่างไร ฟังก์ชั่นนี้สามารถใช้งานได้บางส่วน (ปิดหรือที่รู้จัก) ฉันสนใจทั้งอัลกอริธึมการเข้ารหัสปัจจุบันภาษาการใช้งานที่ได้รับความนิยม (Haskell, ML) ใช้และในภาษาที่มีประสิทธิภาพที่สุดที่สามารถทำได้ จุดโบนัส: มีการเข้ารหัสดังกล่าวว่าแผนที่ฟังก์ชั่นการเข้ารหัสจำนวนเต็มจำนวนเต็มพื้นเมือง ( short, intฯลฯ ใน C) เป็นไปได้ไหม ฉันให้ความสำคัญกับประสิทธิภาพตามประสิทธิภาพ กล่าวอีกอย่างหนึ่งก็คือยิ่งการเข้ารหัสมีประสิทธิภาพน้อยลงก็มีผลต่อประสิทธิภาพการคำนวณด้วยโครงสร้างข้อมูลที่ใช้งานได้

1
ซุปเปอร์จักรวาลคืออะไร?
ฉันอ่านนี้กระดาษที่รู้จักกันดีในจักรวาลในประเภททฤษฎี ตอนแรกฉันคาดหวังบางอย่างที่คล้ายกันSetωใน Agda แต่ปรากฎว่ามันเป็นอะไรที่ธรรมดากว่า ดูเหมือนว่าจะพูดถึงการสร้างเอกภพจากประเภทอุปนัยแบบเรียกซ้ำ - ซ้ำไปเป็นตัวยึด (คล้ายกับและ ) คำถามหลักที่ฉันต้องการถามคือความตั้งใจเบื้องหลังคืออะไรΠΠ\PiΣΣ\Sigma นี่คือรหัส Idris บางตัวที่กำหนดจักรวาลสไตล์ Tarski ตามปกติ: mutual public export data U : (level : Nat) -> Type where GroundU : Ground -> U level BinderU : Binder -> (a : U level) -> (b : (x : T {level} a) -> …

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