|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Hur kan du använda pumpens lemma för att bevisa att ett språk inte är regelbundet?

    Pumping Lemma för vanliga språk är ett kraftfullt verktyg för att bevisa att ett språk är * inte * regelbundet. Det fungerar genom motsägelse:du antar att språket * är * regelbundet och visar sedan att detta antagande leder till en motsägelse av själva lemma. Så här fungerar det:

    1. Pumping Lemma -uttalandet:

    Pumpens lemma säger att för alla regelbundna språk l finns det en pumplängd P så att alla strängar i L med längd | W | ≥ P kan delas upp i tre underlag, W =XYZ, tillfredsställer följande villkor:

    * | XY | ≤ P: Längden på sammankopplingen av x och y är mindre än eller lika med p.

    * | y |> 0: Underlaget är inte tom.

    * för alla i ≥ 0, xy i z ∈ L: Pumpning av noll eller fler gånger (inklusive att ta bort det helt när i =0) resulterar i en sträng som fortfarande finns på språket L.

    2. Bevisstrategi:

    Följ dessa steg för att bevisa att ett språk l inte är regelbundet med hjälp av pumpens lemma:

    * Antag att L är regelbundet: Börja med att anta, för motsägelse, att l är ett regelbundet språk.

    * Välj en pumplängd P: Pumpens lemma garanterar förekomsten av en pumplängd P; Du behöver inte hitta dess faktiska värde, bara hänvisa till det som 'p'.

    * Välj en sträng w ∈ L så att | w | ≥ P: Välj försiktigt en sträng W från språket L vars längd är åtminstone p. Valet av W är avgörande; Det måste låta dig skapa en motsägelse i nästa steg. Detta involverar ofta strängar med en specifik struktur relaterad till språkets definition.

    * Visa att ingen nedbrytning w =xyz uppfyller pumpens lemma -förhållanden: Detta är bevisets hjärta. För * eventuell * möjlig nedbrytning av W till XYZ tillfredsställande | XY | ≤ p och | y |> 0, du måste visa att det finns några i ≥ 0 så att xy i Z ∉ L. Detta innebär att pumpa Y bryter mot definitionen av språket L. Ofta demonstrerar du detta genom att visa att pumpa Y antingen kommer att:

    * introducera en obalans: Ändra antalet förekomster för någon symbol, vilket bryter mot en räkningsbegränsning i L.

    * Skapa en ogiltig struktur: Bryt mönstret eller strukturen som krävs enligt L:s definition.

    * introducera en ogiltig underlag: Skapa en underlag som inte tillhör språket.

    * drar slutsatsen att L inte är regelbunden: Eftersom du har visat att ingen sådan nedbrytning kan existera för den valda strängen W, motsäger detta pumpande lemma. Därför måste det första antagandet att L är regelbundet vara falskt och L är inte regelbundet.

    Exempel:Proving {a n b n | n ≥ 0} är inte regelbundet:

    Låt l ={a n b n | n ≥ 0}.

    1. Antag att L är regelbunden.

    2. Välj P: Låt P vara pumplängden.

    3. Välj W: Låt W =A p B p . Det är uppenbart att w ∈ L och | W | ≥ p.

    4. Visa ingen nedbrytning uppfyller förhållandena: Låt oss överväga alla nedbrytningar w =xyz så att | xy | ≤ p och | y |> 0. Sedan | XY | ≤ p, y måste bestå * endast * av A:er (eftersom y är en underlag från de första P -tecken). Således, y =a k För vissa k> 0. Pump y noll gånger:xy 0 z =a p-k B p . Den här strängen är inte i L eftersom antalet A och B är olika. Detta strider mot pumpens lemma.

    5. Slutsats: Eftersom vi har nått en motsägelse måste vårt antagande att L är regelbundet vara falskt. Därför l ={a n b n | n ≥ 0} är inte ett vanligt språk.

    Nyckeln är att noggrant välja strängen "w" och på ett smart sätt analysera alla möjliga nedbrytningar "xyz" för att visa att pumpning "y" alltid leder till en sträng utanför språket. Ju mer komplexa språket, desto mer komplicerat blir valet av `w` och analysen.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur du ändrar storlek på en kontroll mall
    ·Vad är skillnaden mellan förformaterad och anpassad i…
    ·Den AWK Indexfunktionen
    ·Hur man skapar WinAPI Listbox
    ·Hur man skapar ett lågpassfilter Använda Filter2 i MA…
    ·Fördelar med Rijndael Algoritmer
    ·Hur man använder en Mux att genomföra en logisk ekvat…
    ·Ta bort en mapp i VB.Net
    ·En Process Explorer Script
    ·Hur man förhindrar en Navigation Bar Från trycka ner …
    Utvalda artiklarna
    ·Hur till Omvänd element i en array i C
    ·Hur man skriver en enkel COBOL Program
    ·Hur man utföra en uppdatering MySQL Query
    ·Den grundläggande MySQL Connection i PHP-skript med fe…
    ·Hur man använder PHP för att spåra besökarnas Refer…
    ·Hur man öppnar en binär fil i Python
    ·Vad är en programvara som programmerare använder för…
    ·Hur man bestämma storleken på strukturen vid Runtime …
    ·Visar ett PGM bildblock på C + +
    ·Hur du formaterar datumsträng i MySQL med PHP
    Copyright © Dator Kunskap https://www.dator.xyz