Welkom op de Nederland Computer Kennisnetwerk!  
 
Zoeken computer kennis
Home Hardware Netwerken Programmering Software Computerstoring Besturingssysteem
Computer Kennis >> Programmering >> Computer Programming Languages >> Content
Hoe kan men bewijzen dat de taal beslisbaar is?
Om te bewijzen dat een taal L beslisbaar is, moet je aantonen dat er een Turing-machine (of een gelijkwaardig rekenmodel) bestaat die strings in L stopt en accepteert en strings die niet in L voorkomen, verwerpt. Er zijn verschillende manieren om dit aan te tonen:

1. Een Turingmachine (of algoritme) construeren:

Dit is de meest directe aanpak. Je beschrijft expliciet een Turing-machine (of een algoritme op hoog niveau dat eenvoudig kan worden vertaald in een Turing-machine) die de taal bepaalt. Deze beschrijving moet betrekking hebben op:

* Invoer: Hoe de Turing-machine de invoerreeks ontvangt.

* Staten: De verschillende toestanden waarin de machine zich kan bevinden.

* Overgangen: Hoe de machine tussen staten beweegt op basis van de huidige status en het symbool dat van de tape wordt gelezen.

* Acceptatie/afwijzing: Hoe de machine acceptatie (bijvoorbeeld het invoeren van een "accept"-status) of afwijzing (bijvoorbeeld het invoeren van een "afwijzen"-status) signaleert.

* Stoppen: Cruciaal is dat u moet aantonen dat de machine *altijd* stopt, ongeacht of de invoerreeks in L staat of niet. Dit is het meest uitdagende deel.

Voorbeeld: Beschouw de taal L ={w | w is een palindroom}. We kunnen een Turingmachine beschrijven die:

1. Scant de invoerband van links naar rechts, waarbij het eerste en laatste symbool worden gemarkeerd.

2. Verplaatst de markeringen vanaf beide uiteinden een stap naar binnen.

3. Herhaalt stap 2 totdat de markeringen elkaar ontmoeten (de string is een palindroom) of totdat de markeringen elkaar kruisen (de string is geen palindroom).

4. Accepteert als de markeringen elkaar ontmoeten en verwerpt als ze elkaar kruisen.

Deze machine stopt altijd, wat bewijst dat L beslisbaar is.

2. Reductie tot een bekende beslisbare taal:

Als je kunt aantonen dat jouw taal L kan worden gereduceerd tot een bekende beslisbare taal L', bewijst dit dat L ook beslisbaar is. Een reductie is een berekenbare functie f zodat:

* x ∈ L dan en slechts dan als f(x) ∈ L'

Als je een algoritme hebt om L' te beslissen, kun je dit gebruiken om L te beslissen door eerst de reductie f toe te passen. Omdat zowel f als het algoritme voor L' berekenbaar zijn, is het gecombineerde proces ook berekenbaar, waardoor L wordt bepaald.

Voorbeeld: Laat L de taal zijn van tekenreeksen die geldige rekenkundige uitdrukkingen vertegenwoordigen. We kunnen L reduceren tot een contextvrije grammatica (CFG) taal L' die beslisbaar is (er bestaan ​​parsalgoritmen voor CFG's). De reductie zou het transformeren van de rekenkundige expressiereeks in een ontleedboom inhouden volgens de grammatica. Als de transformatie slaagt en er een geldige ontleedboom wordt gegenereerd, bevindt de string zich in L; anders is het niet zo.

3. Sluitingseigenschappen van beslisbare talen gebruiken:

Beslisbare talen worden gesloten onder bepaalde bewerkingen, zoals unie, snijpunt, aaneenschakeling, Kleene-ster en complement. Als je je taal L kunt uitdrukken met behulp van deze bewerkingen op bekende beslisbare talen, dan is L ook beslisbaar.

Voorbeeld: Als L1 en L2 beslisbaar zijn, dan is L1 ∪ L2 ook beslisbaar. U kunt L1 ∪ L2 bepalen door de beslissingsalgoritmen voor L1 en L2 uit te voeren op de invoerreeks; als een van beide accepteert, accepteert de vakbond.

Samengevat: Het bewijzen van de beslisbaarheid komt neer op het aantonen dat er een deterministisch algoritme (of Turing-machine) bestaat dat elke invoerreeks altijd zal stoppen en correct zal classificeren als behorend tot de taal of niet. De methode die u kiest, hangt af van de specifieke taal en uw intuïtie over de eigenschappen ervan. De meest gebruikelijke aanpak is het direct construeren van een Turing-machine of -algoritme, maar reducties en afsluitingseigenschappen zijn krachtige hulpmiddelen voor complexere talen.

Previous: Next:
  Computer Programming Languages
·Hoe te ViewState Ga naar de on…
·Hoe maak je een een-complement…
·Hoe kunt u het auteursrechtsym…
·Hoe kan ik een vorige Karakter…
·How To : HTML-fragment in Beri…
·Wat is de betekenis van de toe…
·Hoe te MATLAB gebruiken Zonder…
·Wat zijn enkele toepassingen v…
·Hoe maak je een login & Respon…
  Related Articles
Waarom gebruiken we functies bij het pro…
Welke rol speelt een tolk bij het progra…
Wat is de rol van een compiler bij compu…
Wat is het doel van een voorwaardelijke …
Wat is de hiërarchie van programmeertal…
Wat is de analoge definitie in de inform…
Wat is redex en hoe verhoudt dit zich to…
Wat is assembleertaal en hoe wordt het g…
Wat is assemblagecode en hoe wordt deze …
  Programmering Articles
·Hoe kan ik een aangepaste knop in Maak P…
·Hoe te converteren naar 3D data 2D behul…
·Welke rol speelt een tolk bij het progra…
·Instructies voor hoe te Schakel JavaScri…
·Hoe eigen HMI Symbolen Creëren 
·Verschillen tussen HTML 5 & HTML 4 
·Toegang tot een webcam Via Java 
·Hoe kan ik tijd VBA -functies 
·Hoe maak je een gids lezen in Scala 
Copyright © Computer Kennis https://www.nldit.com