คำถามติดแท็ก proof-techniques

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

2
จุดบรรจบกันของระบบการเขียนใหม่ที่เรียบง่าย
สมมติว่าเรามีภาษาง่าย ๆ ที่ประกอบด้วยข้อกำหนด: truetrue\mathtt{true} falsefalse\mathtt{false} ถ้าเป็นเทอมดังนั้นฉันคือft1,t2,t3t1,t2,t3t_1,t_2,t_3ift1thent2elset3ift1thent2elset3\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 ตอนนี้สมมติกฎการประเมินผลเชิงตรรกะดังต่อไปนี้: iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t′1ift1thent2elset3→ift′1thent2elset3[E-If]iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t1′ift1thent2elset3→ift1′thent2elset3[E-If] \begin{gather*} \dfrac{} {\mathtt{if}\: \mathtt{true} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_2} \text{[E-IfTrue]} \quad \dfrac{} {\mathtt{if}\: \mathtt{false} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_3} \text{[E-IfFalse]} \\ \dfrac{t_1 \to t_1'} {\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to \mathtt{if}\: t_1' \:\mathtt{then}\: t_2 …

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
ทฤษฎีบทหลักไม่สามารถใช้ได้?
รับสมการแบบเรียกซ้ำดังนี้ T(n)=2T(n2)+nlognT(n)=2T(n2)+nlog⁡n T(n) = 2T\left(\frac{n}{2}\right)+n\log nเราต้องการประยุกต์ใช้ทฤษฎีบทหลักและทราบว่า nlog2(2)=n.nlog2⁡(2)=n. n^{\log_2(2)} = n. ตอนนี้เราตรวจสอบสองกรณีแรกสำหรับนั่นคือว่าε>0ε>0\varepsilon > 0 nlogn∈O(n1−ε)nlog⁡n∈O(n1−ε)n\log n \in O(n^{1-\varepsilon})หรือ nlogn∈Θ(n)nlog⁡n∈Θ(n)n\log n \in \Theta(n)(N) ทั้งสองกรณีไม่พอใจ ดังนั้นเราต้องตรวจสอบกรณีที่สามนั่นก็คือ nlogn∈Ω(n1+ε)nlog⁡n∈Ω(n1+ε)n\log n \in \Omega(n^{1+\varepsilon}) ) ฉันคิดว่าเงื่อนไขที่สามไม่เป็นที่พอใจเช่นกัน แต่ทำไม และอะไรจะเป็นคำอธิบายที่ดีสำหรับสาเหตุที่ไม่สามารถนำทฤษฎีบทต้นแบบมาใช้ได้ในกรณีนี้

2
วิธีจัดการกับอาร์เรย์ในระหว่างการพิสูจน์ความถูกต้องของ Hoare-style
ในการอภิปรายคำถามนี้ Gilles กล่าวอย่างถูกต้องว่าการพิสูจน์ความถูกต้องใด ๆ ของอัลกอริทึมที่ใช้อาร์เรย์ต้องพิสูจน์ว่าไม่มีการเข้าถึงอาร์เรย์นอกขอบเขต ขึ้นอยู่กับรุ่นรันไทม์สิ่งนี้จะทำให้เกิดข้อผิดพลาดรันไทม์หรือการเข้าถึงองค์ประกอบที่ไม่ใช่อาร์เรย์ เทคนิคหนึ่งที่พบบ่อยในการดำเนินการพิสูจน์ความถูกต้องเช่น (อย่างน้อยในการศึกษาปริญญาตรีและอาจจะอยู่ในการตรวจสอบโดยอัตโนมัติ) โดยใช้ตรรกะโฮร์ ฉันไม่ทราบว่าชุดกฎมาตรฐานมีอะไรที่เกี่ยวข้องกับอาร์เรย์ ดูเหมือนว่าพวกเขาจะถูก จำกัด ให้ตัวแปรตัวแปร ฉันจินตนาการถึงการเพิ่มสัจพจน์ของแบบฟอร์ม {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} แต่ก็ไม่เป็นที่ชัดเจนกับผมว่าคุณจะจัดการกับการเข้าถึงอาร์เรย์บนด้านขวามือคือถ้ามันเป็นส่วนหนึ่งของการแสดงออกที่ซับซ้อนในบางคำสั่งx : = EEEEx:=Ex:=Ex := E วิธีการเข้าถึงอาร์เรย์สามารถสร้างแบบจำลองในตรรกะของ Hoare เพื่อให้ไม่มีการเข้าถึงที่ไม่ถูกต้องสามารถและต้องได้รับการพิสูจน์ความถูกต้องของโปรแกรม? รู้รอบอาจสันนิษฐานได้ว่าเราไม่อนุญาตให้ใช้องค์ประกอบของอาร์เรย์ในงบนอกเหนือจากหรือเป็นส่วนหนึ่งของEบางตัวในx : = Eเนื่องจากไม่ได้ จำกัด การแสดงออก เราสามารถกำหนดตัวแปรชั่วคราวตามค่าที่ต้องการเช่น write t …

1
บทแทรกสำหรับภาษาที่ไม่มีบริบทกำหนดไว้หรือไม่
ศัพท์เฉพาะการปั๊มสำหรับภาษาปกติสามารถใช้เพื่อพิสูจน์ว่าภาษาบางอย่างไม่ปกติและการปั๊มบทแทรกสำหรับภาษาที่ไม่มีบริบท (พร้อมกับบทแทรกของ Ogden) สามารถใช้เพื่อพิสูจน์ว่าภาษาบางอย่างไม่บริบท มีการแทรกการสูบน้ำสำหรับการกำหนดภาษาบริบทฟรีหรือไม่ นั่นคือมีบทแทรกคล้ายกับบทแทรกที่สามารถใช้เพื่อแสดงว่าภาษาไม่ใช่ DCFL หรือไม่? ฉันอยากรู้อยากเห็นเพราะเกือบทั้งหมดของเทคนิคการพิสูจน์ที่ฉันรู้ว่าแสดงให้เห็นว่าภาษาไม่ใช่ DCFL นั้นซับซ้อนและฉันหวังว่าจะมีเทคนิคที่ง่ายกว่านี้

2
เราสามารถแสดงภาษาที่ไม่สามารถนับได้ด้วยการแสดงให้เห็นว่าไม่มีตัวยืนยันสำหรับภาษานั้นหรือไม่?
หนึ่งในคำจำกัดความของการคำนวณที่นับได้ (ce, เทียบเท่ากับการนับซ้ำซ้ำ, เทียบเท่ากับ semidecidable) คือ: เป็นซีอี IFF มีเป็นภาษา decidable V ⊆ Σ * (เรียกว่าตรวจสอบ) เซนต์สำหรับทุก x ∈ Σ * ,A⊆Σ∗A⊆Σ∗A \subseteq \Sigma^*V⊆Σ∗V⊆Σ∗V\subseteq \Sigma^*x∈Σ∗x∈Σ∗x\in \Sigma^* IFF มีอยู่ Y ∈ Σ * ST ⟨ x , y ที่⟩ ∈ Vx∈Ax∈Ax\in Ay∈Σ∗y∈Σ∗y\in\Sigma^*⟨x,y⟩∈V⟨x,y⟩∈V\langle x, y \rangle \in V ดังนั้นวิธีหนึ่งที่จะแสดงให้เห็นว่าภาษานั้นไม่ใช่ ce คือการแสดงให้เห็นว่าไม่มีตัวตรวจสอบสามารถตัดสินใจได้ วิธีนี้มีประโยชน์หรือไม่ที่จะแสดงว่าภาษาไม่ได้อยู่ในแนวปฏิบัติใช่ไหมVVV

4
เทคนิคทางการทั่วไปสำหรับการพิสูจน์รหัสฟังก์ชั่นที่ถูกต้องคืออะไร?
ฉันต้องการแสดงหลักฐานสำหรับส่วนของโปรแกรม Haskell ที่ฉันเขียนเป็นส่วนหนึ่งของวิทยานิพนธ์ของฉัน ถึงตอนนี้ฉันไม่สามารถหางานอ้างอิงที่ดีได้ การเขียนโปรแกรมเบื้องต้นเกี่ยวกับหนังสือของ Graham Hutton ใน Haskell ( Google Books ) - ซึ่งฉันอ่านขณะเรียนรู้ Haskell— สัมผัสกับเทคนิคสองสามประการสำหรับการให้เหตุผลเกี่ยวกับโปรแกรมเช่น การใช้เหตุผลเชิงสมการ ใช้รูปแบบที่ไม่ทับซ้อนกัน รายการเหนี่ยวนำ ในบทที่ 13 แต่มันไม่เชิงลึกมาก มีหนังสือหรือบทความใดบ้างที่คุณสามารถแนะนำซึ่งให้ภาพรวมรายละเอียดเพิ่มเติมของเทคนิคการพิสูจน์อย่างเป็นทางการสำหรับ Haskell หรือรหัสการทำงานอื่น ๆ

3
ฉันจะตรวจสอบว่า DFA เทียบเท่ากับ NFA ได้อย่างไร
ฉันเรียนรู้วิธีการแปลง NFA ให้เป็น DFA และฉันต้องการให้แน่ใจว่าฉันทำถูกต้อง เห็นได้ชัดว่าการกลับไปในทิศทางอื่นไม่ใช่เรื่อง ไม่มีใครรู้วิธีการตรวจสอบว่า DFA เทียบเท่ากับ NFA หรือไม่

3
เป็นไปได้ที่จะพิสูจน์ความปลอดภัยของด้ายหรือไม่
ให้โปรแกรมประกอบด้วยตัวแปรและคำแนะนำที่แก้ไขตัวแปรเหล่านี้และดั้งเดิมการซิงโครไนซ์ (จอภาพ, mutex, การซิงโครไนส์ของ java หรือการล็อกของ C #) เป็นไปได้ไหมที่จะพิสูจน์ว่าโปรแกรมดังกล่าวปลอดภัยหรือไม่? มีรูปแบบที่เป็นทางการสำหรับอธิบายสิ่งต่าง ๆ เช่นความปลอดภัยของด้ายหรือสภาพการแข่งรถหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.