คำถามติดแท็ก coq

Coq เป็นสุภาษิตทฤษฎีบทแบบโต้ตอบที่อิงตาม Calculus of Inductive Constructions

6
การเรียนรู้ทฤษฎีการพิสูจน์อัตโนมัติ
ฉันกำลังเรียนรู้ทฤษฎีการพิสูจน์โดยอัตโนมัติ / นักแก้ปัญหา / ผู้ช่วยพิสูจน์ด้วยตนเองและโพสต์คำถามเกี่ยวกับกระบวนการเริ่มต้นที่นี่ โปรดทราบว่าหัวข้อเหล่านี้ไม่สามารถย่อยได้ง่ายโดยไม่มีพื้นหลังใน logics (ทางคณิตศาสตร์) หากคุณมีปัญหาเกี่ยวกับคำศัพท์พื้นฐานโปรดอ่านสิ่งเหล่านี้เช่นLogics in Computer Scienceโดย M. Huth และ M. Ryan (โดยเฉพาะบทที่หนึ่งสองและสี่) หรือAn Introduction to Mathematical Logic และ Type Theoryโดย P แอนดรู สำหรับการแนะนำสั้น ๆ ลงในลำดับตรรกะที่สูงขึ้น (HOL) ดูที่นี่ ฉันดูCoqและอ่านบทแรกของการเพิ่มขึ้นของอิซาเบลในหมู่คนอื่น ๆ ; ประเภทของผู้ให้บริการทฤษฎีบทอัตโนมัติ ฉันรู้จัก Prolog มาสองสามทศวรรษแล้วและตอนนี้ฉันได้เรียนรู้ F # ดังนั้น ML, O'Caml และ LISP จึงเป็นโบนัส Haskell เป็นสัตว์ร้ายต่างชนิดกัน …

2
เหตุใด C ประเภทโมฆะจึงไม่คล้ายกับประเภทที่ว่าง / ด้านล่าง
Wikipedia ตลอดจนแหล่งข้อมูลอื่น ๆ ที่ฉันได้พบรายการvoidประเภทC เป็นหน่วยประเภทซึ่งตรงข้ามกับประเภทที่ว่างเปล่า ฉันพบว่ามันสับสนเพราะฉันคิดว่าvoidเหมาะกับนิยามของประเภทที่ว่าง / ล่าง ไม่มีค่านิยมใด ๆ อยู่voidเท่าที่ฉันจะบอกได้ ฟังก์ชั่นที่มีประเภทคืนค่าเป็นโมฆะระบุว่าฟังก์ชั่นจะไม่ส่งคืนสิ่งใดดังนั้นจึงสามารถทำงานได้เพียงผลข้างเคียงเท่านั้น ตัวชี้ชนิดvoid*เป็นชนิดย่อยของชนิดตัวชี้อื่นทั้งหมด นอกจากนี้การแปลงไปยังและจากvoid*ใน C นั้นเป็นนัย ผมไม่แน่ใจว่าถ้าจุดสุดท้ายมีบุญใด ๆ ที่เป็นข้อโต้แย้งสำหรับvoidการเป็นประเภทที่ว่างเปล่าเป็นมากหรือน้อยเป็นกรณีพิเศษที่มีความสัมพันธ์ไม่มากที่จะvoid*void ในทางกลับกันvoidตัวมันเองไม่ใช่ประเภทย่อยของประเภทอื่นทั้งหมดซึ่งเท่าที่ฉันสามารถบอกได้ว่าเป็นข้อกำหนดสำหรับประเภทที่จะเป็นประเภทด้านล่าง
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

1
เป็นไปได้ที่จะพิสูจน์ความลังเลของปัญหาการหยุดพักใน Coq หรือไม่?
ฉันกำลังดู " ห้าขั้นตอนของการยอมรับคณิตศาสตร์เชิงสร้างสรรค์ " โดย Andrej Bauer และเขาบอกว่ามีการพิสูจน์สองแบบด้วยความขัดแย้ง (หรือสองสิ่งที่นักคณิตศาสตร์เรียกการพิสูจน์ด้วยความขัดแย้ง): สมมติว่าเป็นเท็จ ... blah blah blah, ความขัดแย้ง ดังนั้นPจึงเป็นจริงPPPPPP สมมติว่าเป็นจริง ... blah blah blah, ความขัดแย้ง ดังนั้นPจึง เป็นเท็จPPPPPP คนแรกเทียบเท่ากับกฎหมายว่าด้วยการแยกคนกลาง (LEM) และคนที่สองคือวิธีพิสูจน์การปฏิเสธ การพิสูจน์ความลังเลของปัญหา Halting (HP) เป็นข้อพิสูจน์จากความขัดแย้ง: สมมติว่ามีเครื่องที่สามารถตัดสินใจ HP ... blah blah blah, ความขัดแย้ง ดังนั้นDไม่มีอยู่DDDDDD ดังนั้นให้เป็น " Dอยู่และสามารถตัดสินใจ HP" สมมติว่าPเป็นจริง ... blah blah blah, ความขัดแย้ง ดังนั้นPจึงเป็นเท็จPPPDDDPPPPPP …

2
นิยามแบบเรียกซ้ำมากกว่าชนิดอุปนัยที่มีส่วนประกอบซ้อนอยู่
พิจารณาประเภทอุปนัยที่มีเกิดขึ้นซ้ำในบางตำแหน่งที่ซ้อนกัน แต่เป็นบวกอย่างเคร่งครัด ตัวอย่างเช่นต้นไม้ที่มีการ จำกัด การแยกด้วยโหนดโดยใช้โครงสร้างข้อมูลรายการทั่วไปเพื่อจัดเก็บเด็ก ๆ Inductive LTree : Set := Node : list LTree -> LTree. วิธีที่ไร้เดียงสาของการกำหนดฟังก์ชั่นแบบเรียกซ้ำผ่านต้นไม้เหล่านี้โดยการเรียกซ้ำกว่าต้นไม้และรายการต้นไม้ไม่ทำงาน นี่คือตัวอย่างของsizeฟังก์ชันที่คำนวณจำนวนโหนด Fixpoint size (t : LTree) : nat := match t with Node l => 1 + (size_l l) end with size_l (l : list LTree) : nat := match l with …

4
มีใครสร้างระบบจริงที่เขียนโปรแกรมคอมพิวเตอร์จากสเปค?
มีใครเคยเขียนระบบ (ซอฟต์แวร์หรือคำอธิบายโดยละเอียดบนกระดาษพร้อมตัวอย่างง่ายๆ) ที่สร้างโปรแกรมคอมพิวเตอร์หรือไม่? ฉันป้อนและสร้างโปรแกรมที่แสดงรายการหมายเลขเฉพาะน้อยกว่า 10 ถูกกำหนดเป็น อาจารย์บอกว่าพวกเขาทำได้ แต่ไม่มีใครให้ตัวอย่างที่สมบูรณ์จริง ๆPr i m e ( x ) ∧ x &lt; 10PRผมม.อี(x)∧x&lt;10Prime(x) \wedge x<10Pr i m e ( x )PRผมม.อี(x)Prime(x)1 &lt; x ∧ ∄ส. t . 1 &lt; A ∧ A &lt; x ∧ x = A × B , พร้อม A, B …

1
ตรรกะลำดับที่สองแบบโมนาดิคสำหรับ Dummies
ฉันเป็นโปรแกรมเมอร์ที่มีการจับออโตมาตะ แต่ไม่ใช่ในเชิงตรรกะ ฉันอ่านในเอกสารว่าทั้งสองมีความสัมพันธ์กันแน่นมาก Finite Automata (DFA) ที่กำหนดอย่างชัดเจน Tree Automata และ Automatic Pushdown ที่มองเห็นได้ล้วนเกี่ยวข้องกับ Monadic Second Order Logic (MSO) แม้ว่าฉันจะเข้าใจออโตมาตะและผู้คน (ในเอกสาร) ได้พยายามอธิบายความสัมพันธ์กับ MSO ให้ฉันพวกเขามักจะมีพื้นฐานที่แข็งแกร่งในด้านตรรกะและความเข้าใจใน MSO เมื่อฉันดูหนังสือและหลักสูตรเกี่ยวกับลอจิกพวกเขาส่วนใหญ่จะจัดการกับลอจิกลำดับแรกเท่านั้นซึ่งดูเหมือนจะค่อนข้างง่ายและประกอบด้วยแนวคิดเพียงไม่กี่อย่าง: ตัวแปรหรือหรือและไม่ใช่นัยสำหรับทุกคนที่มีอยู่ ฯลฯ ใครสามารถอธิบายหรือชี้ให้ฉันไปยังทรัพยากรที่สามารถอธิบายได้: ตรรกะลำดับที่สองคืออะไรในทางตรงกันข้ามกับตรรกะลำดับแรก Monadic กับตรรกะที่ไม่ใช่ Monadic คืออะไร เหตุใดจึงเป็นสิ่งสำคัญที่ตรรกะลำดับที่สองที่จะเป็นแบบ monadic ที่จะตัดสินใจได้หรือทำไมคำถามนี้ผิด? เหตุใดจึงมีลอจิกลำดับที่สองที่เป็นเอกเทศ ความสัมพันธ์กับ DFA อย่างน้อย? ถ้ามันเป็นทรัพยากรมันคงจะดีถ้ามันถือว่าฉันเป็นโปรแกรมเมอร์ไม่ใช่นักตรรกวิทยา ซึ่งหมายความว่าฉันต้องการที่จะเข้าใจว่าฉันจะใช้มันเป็นรหัสเพราะจนกระทั่งแล้วคณิตศาสตร์ก็รู้สึกเหมือนเวทมนตร์ให้ฉัน;) ขอบคุณสำหรับความช่วยเหลือใด ๆ ที่คุณสามารถให้ฉัน ฉันจะขอบคุณมันจริงๆ

1
อะไรคือความแตกต่างระหว่างชุดและประเภทใน Coq [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Computer Science Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ประเภท AFAIU สามารถเป็นSetองค์ประกอบที่มีโปรแกรมหรือpropositionองค์ประกอบที่มีการพิสูจน์ ดังนั้นตามความเข้าใจนี้: Inductive prod (X Y: Type) : Set := | pair: X -&gt; Y -&gt; prod X Y. รหัสต่อไปนี้ควรรวบรวม แต่มันไม่ได้เกิดจากข้อผิดพลาดดังต่อไปนี้ ถ้าฉันเปลี่ยนSetด้วยTypeหรืออื่น ๆTypeด้วยSetมันรวบรวมดี ใครสามารถช่วยฉันเข้าใจว่าข้อผิดพลาดต่อไปนี้หมายถึงอะไร ฉันพยายามสอนตัวเอง Coq โดยใช้หนังสือ Software Foundations ข้อผิดพลาด: Error: Large non-propositional inductive types must be …

2
การพิสูจน์ความซ้ำซากกับ coq
ปัจจุบันฉันต้องเรียนรู้ Coq และไม่ทราบวิธีจัดการกับor: ตัวอย่างง่ายๆอย่างที่ฉันไม่เห็นวิธีที่จะพิสูจน์: Theorem T0: x \/ ~x. ฉันจะขอบคุณมันจริงๆถ้ามีคนช่วยฉันได้ สำหรับการอ้างอิงฉันใช้สูตรโกงนี้ ตัวอย่างของการพิสูจน์ที่ฉันมีอยู่ในใจ: นี่คือการปฏิเสธคู่: Require Import Classical_Prop. Parameters x: Prop. Theorem T7: (~~x) -&gt; x. intro H. apply NNPP. exact H. Qed.
12 logic  coq 

1
เหตุใดประเภทการเรียกซ้ำจึงเป็นสิ่งจำเป็นสำหรับการพิสูจน์ในระบบชนิดที่ขึ้นต่อกัน
ฉันค่อนข้างใหม่ในการพิมพ์ทฤษฎีและการเขียนโปรแกรมขึ้นอยู่กับ ฉันกำลังศึกษาแคลคูลัสของการก่อสร้าง (CoC) และระบบบริสุทธิ์อื่น ๆ ฉันสนใจเป็นพิเศษที่จะใช้มันเพื่อเป็นสื่อกลางในการเก็บรักษาหลักฐานสำหรับการแปล ผมเข้าใจว่า(ร่วม) ประเภท recursive เป็นแทนได้ , คอมพิวเตอร์โดยใช้เป็นชนิดคอนสตรัคเท่านั้น ฉันได้อ่านแล้วว่าพวกเขาไม่สามารถใช้ในการสร้างหลักฐานโดยการเหนี่ยวนำ (ยกโทษให้ฉันฉันไม่สามารถหาที่ตอนนี้!) เช่นว่าฉันไม่สามารถพิสูจน์ได้ว่า0 ≠ 1ใน CoC ธรรมดา (แม้ว่าแน็ตสามารถพิมพ์ได้เช่นΠ ( N : ∗ ) . Π ( S : N → N ) . Π ( Z : N ) . N )ΠΠ\Pi0 ≠ 10≠10\neq 1ชัยนาทชัยนาท\texttt{Nat}Π ( N : …

3
ความหลากหลายและประเภทข้อมูลอุปนัย
ฉันอยากรู้. ฉันได้ทำงานกับประเภทข้อมูลนี้ในOCaml : type 'a exptree = | Epsilon | Delta of 'a exptree * 'a exptree | Omicron of 'a | Iota of 'a exptree exptree ซึ่งสามารถจัดการได้โดยใช้ฟังก์ชั่นวนซ้ำอย่างชัดเจน (คุณลักษณะที่ถูกเพิ่มเข้ามาเมื่อไม่นานมานี้) ตัวอย่าง: let rec map : 'a 'b. ('a -&gt; 'b) -&gt; 'a exptree -&gt; 'b exptree = fun f -&gt; begin …

2
คำจำกัดความที่สร้างสรรค์มาตรฐานของจำนวนเต็ม rationals และ reals?
จำนวนธรรมชาติถูกกำหนด inductively เป็น (ใช้ไวยากรณ์ Coq เป็นตัวอย่าง) Inductive nat: Set := | O: nat | S: nat -&gt; nat. มีวิธีมาตรฐานในการกำหนดจำนวนเต็ม (และชุดอื่น ๆ เช่น rationals และ reals) อย่างสร้างสรรค์?

2
ทฤษฎีบทพิสูจน์ใน Coq
พื้นหลัง ฉันกำลังเรียนความช่วยเหลือ Coq ด้วยตัวเอง จนถึงตอนนี้ฉันได้อ่านCoqของ Yves Bertot อย่างรวดเร็วแล้ว ตอนนี้เป้าหมายของฉันคือการพิสูจน์ผลลัพธ์พื้นฐานบางอย่างเกี่ยวกับตัวเลขธรรมชาติโดยใช้อัลกอริธึมการหารที่เรียกว่าสุดยอด อย่างไรก็ตามฉันได้พบกับความพ่ายแพ้ระหว่างทางไปสู่เป้าหมายนั้น โดยเฉพาะอย่างยิ่งผลลัพธ์ต่อไปนี้ทั้งสองได้พิสูจน์แล้ว (ปุนตั้งใจ) จะยากที่จะพิสูจน์ใน Coq กว่าที่ฉันคิดในตอนแรก ในความเป็นจริงฉันมีหลังจากพยายามหลายครั้งไร้ผลใช้เพื่อพิสูจน์พวกเขาด้วยมือ (ดังแสดงด้านล่าง) ชัดเจนว่าไม่ได้ช่วยให้ฉันมีความเชี่ยวชาญในการจัดการ Coq มากขึ้น นี่คือเหตุผลที่ฉันหันไปฟอรั่มนี้ ความหวังของฉันคือคนในไซต์นี้สามารถและยินดีเพื่อช่วยฉันแปลข้อพิสูจน์ด้านล่างเป็นหลักฐานที่ Coq ยอมรับ ความช่วยเหลือทั้งหมดได้รับการชื่นชมอย่างจริงใจ! ทฤษฎีบท เพื่อทุกสิ่ง x , y∈ Nx,y∈Nx,y \in N x &lt; S( y) ⊂ x &lt; y∨ ฉัน( N, x , y)x&lt;S(y)⊂x&lt;y∨I(N,x,y)\begin{equation} x < S(y) \subset …

1
เหตุใด Coq จึงรวมเอาการแสดงออกมาเป็นภาษาหลัก
Coq รวมถึงการแสดงออกให้เป็นภาษาหลักของมัน เราสามารถแปลการแสดงออกให้กับแอพพลิเคชั่นเช่นนี้: let x : t = v in b ~&gt; (\(x:t). b) v ฉันเข้าใจว่ามันไม่ได้ผลเสมอไปเพราะค่าvจะไม่สามารถใช้ได้เมื่อพิมพ์แบบตรวจbสอบ อย่างไรก็ตามเรื่องนี้สามารถแก้ไขได้อย่างง่ายดายโดยปลอกพิเศษ typechecking (\(x:t). b) vของการใช้งานของฟอร์ม สิ่งนี้ช่วยให้เราสามารถลบการแสดงออกในราคาพิเศษในขณะพิมพ์ เหตุใด Coq จึงรวมถึงให้รวมการแสดงออก? พวกเขามีข้อได้เปรียบอื่น ๆ (นอกเหนือจากไม่จำเป็นต้องใช้กรณีพิเศษ)?

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