Talen en automaten/2011-12/producten/Prelude

Uit Werkplaats
Ga naar: navigatie, zoeken
on schedule

Page Break




Algolfrag.jpg

Talen en automaten

Erik Barendsen


 © comments



Prelude

Ben Brücker, Tom Sanders

PreludeLogo.png


Talen en automaten 2011-12



15:20 A






Ben Brücker Informatica
 e-mail 

cursuspagina

Ben Brücker.jpg

Tom Sanders Bachelor Informatica
 e-mail 

cursuspagina

Tom Sanders.jpg

Page Break




PreludeLogo.png


Beschrijving

Prelude is een esoterische programmeertaal ontworpen door Nikita “Lament” Ayzikovsky, die tevens—zo wordt geclaimd op zijn (of haar) profielpagina—verantwoordelijk was voor de taal Smallfuck.[1] Zoals met veel esoterische programmeertalen, lijkt Prelude zo goed als uitgestorven te zijn: de enige resterende verwijzing naar de taal lijkt een wiki-pagina op Esolangs.org te zijn, waarbij zelfs de gelinkte ‘Draft specification’ uit 2007 niet langer wordt aangeboden door de webserver waar deze ooit een thuis had.

Daar de beschrijving op Esolangs.org van niet al te hoge kwaliteit bleek te zijn door de aanwezigheid van een aantal onduidelijke (en soms zelfs ambigue) uitspraken, hadden we hier niet genoeg aan voor ons werkstuk. In de eerste instantie besloten we te beginnen met het reverse engineeren van de C-interpreter, maar deze bleek de taal slechts gedeeltelijk te implementeren. Onze zoektocht naar een uitgebreidere specificatie van Prelude bracht ons uiteindelijk bij het #esolang-channel op de server irc.freenode.net, waar de ontwerper volgens zijn/haar profiel op Esolangs.org regelmatig te vinden zou zijn. Hier kon Alex Smith, de schrijver van de C-interpreter waar we in de eerste instantie vanuit gingen, ons aan een oude backup van de bovengenoemde ‘Draft specification’ helpen, alsmede Laments eigen implementatie van een interpreter (geschreven in Python), waaruit in ieder geval zou moeten blijken wat zijn/haar intenties voor verschillende onderdelen van de taal waren. Hiermee hadden we voldoende informatie om de taal te analyseren.

Concept

Hoewel Prelude op het eerste gezicht veel weg lijkt te hebben van Brainfuck, werkt Prelude fundamenteel anders. Iedere regel in een Prelude-programma bevat een set instructies voor een nieuwe voice, een soort parallel lopend programma met een eigen stack-datastructuur en set instructies. Instructies in Prelude zijn ofwel manipulaties op de stack van de huidige voice, ofwel operaties die waardes uit de stack van voorgaande of volgende voices kunnen uitlezen. In theorie wordt voor iedere voice steeds een enkele instructie parallel uitgevoerd, waarbij de stacks aan het einde van iedere cykel ge-update worden. Dit concept beschrijft een interessante manier van programmeren die een fundamenteel andere denkwijze vereist dan alle andere programmeertalen die wij zijn tegengekomen.

Operaties

Teken Actie
? Lees een teken uit de input stream en push deze naar de stack.
! Pop een waarde van de stack en print deze als ASCII-teken naar de output stream.
0..9 Push een enkele digit naar de stack.
+ Pop twee waardes en push de som.
- Pop twee waardes en push het verschil tussen de onderste- en bovenste waarde.
# Drop: pop een waarde zonder hier iets mee te doen.
( Begin een loop met als conditie een niet-nul-waarde voor het bovenste element van de stack. Mag niet parallel uitgevoerd worden met een andere ( of ).
) Einde van de loop indien bovenste element van de stack nul is, anders volgende iteratie. Mag niet parallel uitgevoerd worden met een andere ( of ).
. Nop. Dit zijn alle tekens die aan geen enkele instructie zijn gekoppeld en worden dus genegeerd.

Operaties op een andere stack:

Teken Beschrijving
^ Push de top waarde van de stack van de bovenstaande voice. Als deze in de bovenste voice wordt gebruikt, push de stack van de onderste voice.
v Push de top waarde van de stack van de onderstaande voice. Als deze in de onderste voice wordt gebruikt, push de stack van de bovenste voice.

Code-voorbeelden

Om de werking van Prelude wat beter te illustreren, volgen hier enkele code-voorbeelden voor een aantal simpele programma’s.

Cat

Het bekende Cat-programma is misschien wel het meest eenvoudige (enigszins nuttige) programma dat we in Prelude kunnen schrijven. In de eerste instantie wordt een ‘1’ op de stack gepusht om aan de loop-conditie te voldoen, waarna eindeloos tekens gelezen en weer naar het scherm geschreven worden.

1(?!)

"Hello World"

Een beschrijving van een taal is nooit compleet zonder een “Hello World” code-voorbeeld, dus mag deze vanzelfsprekend ook niet in ons werkstuk ontbreken. Daar het introduceren van meerdere voices Prelude doet uitstaan van Brainfuck en andere Turing-machine-achtigen, tonen wij twee varianten die allebei hetzelfde resultaat opleveren, maar hier op een fundamenteel andere wijze toe komen.

"Hello World" met 2 voices

In het onderstaande voorbeeld is gebruikgemaakt van slechts twee voices: één voor rekenkundige berekeningen om steeds tot de ASCII-code van de volgende letter te komen en één voor de uitvoer naar het scherm (daar de uitvoer-operatie het huidige resultaat van de stack popt, terwijl wij hier graag door mee willen rekenen). Deze structuur komt sterk overeen met die van een Brainfuck-programma en volgens de wiki-pagina op Esolangs.org is ieder Brainfuck-programma dan ook naar een Prelude-programma in deze vorm om te zetten.

99999999+++++++9992++++7+.3+.#9995+++9999991+++++++996+++3+6-8-..
...............^!......^!^^!!^!......^!............^!....^!^!^!^!
"Hello World" met 16 voices

Aangezien we getallen van over de 100 nodig zullen hebben voor de ASCII-codes in “Hello World”, beginnen we met het uitrekenen van een aantal veelvouden van 9, het maximale “ruw” te pushen getal. Na het uitrekenen van een veelvoud, wordt deze door de daaronder liggende voice overgenomen middels de ^-operator, zodat deze ook voor volgende voices beschikbaar zal zijn. Veelvouden die niet gebruikt gaan worden voor de huidige letter, worden ‘gedropt’ middels de #-operatie en anders zal het restant om tot de gewenste ASCII-code te komen hierbij opgeteld worden. Uiteindelijk zal het getal op het juiste moment geprint worden met de !-operatie.

Deze aanpak bleek een stuk eenvoudiger en vooral minder foutgevoelig dan de aanpak met 2 voices, wat ons ervan heeft overtuigd dat het gebruik van meerdere voices daadwerkelijk een meerwaarde boven de iteratieve aanpak kan bieden.

999++.......................................... // 9*3
.....^^99+++................................... // 9*8
......^#....^9+................................ // 9*9
.......^#....^#^99++........................... // 9*11
........^#....^#^#..^9+........................ // 9*12
.........^5+...^#^#..^#^#................!..... // spatie (9*3+5)
..........^#....^.^#..^#^#..........!.......... // H (9*8+0)
...........^#....^#^6+.^#^#...............!.... // W (9*9+6)
............^#....^#^#..^.^#1+................! // d (9*11+1)
.............^#....^#^#..^.^#2+......!......... // e (9*11+2)
..............^#....^#^#..^#^.........!........ // l (9*12+0)
...............^#....^#^#..^#^.........!....... // l (9*12+0)
................^#....^#^#..^#^..............!. // l (9*12+0)
.................^#....^#^#..^#^3+......!...... // o (9*12+1)
..................^#....^#^#..^#^3+........!... // o (9*12+1)
...................^#....^#^#..^#^6+........!.. // r (9*12+6)

Opmerking: aan het einde van de regels is commentaar toegevoegd na de //-tekens; dit is geen onderdeel van de source code.

Regulier?

Gezien de beperking dat iedere loop een open- en sluit-teken moet hebben, vermoeden we dat Prelude niet regulier is. Om dat te bewijzen, gaan we het pomplemma voor reguliere talen toepassen:

Stel dat Prelude (vanaf nu de taal Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle L\,} ) wél regulier is, dan bestaat er een DFA met Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle k\,} states die Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle L\,} accepteert. Nu bekijken we het woord Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z = (^k)^k\,} , waarvoor natuurlijk geldt dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z \in L } (want ieder loop wordt gesloten) en Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle lengte(z) \geq k} . Volgens het pomplemma kunnen we Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z\,} nu opsplitsen volgens Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z = uvw\,} , waarbij geldt dat:

  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^iw \in L} voor alle Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle i \in \mathbb{N}}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle lengte(uv) \le k}

Er geldt dus een verdeling: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \frac{(^p}{u} \frac{(^q}{v} \frac{(^{k-p-q})^k}{w}}

Nu gaan we ons woord Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z} één keer pompen, dus krijgen we Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2w\,} , maar dit is Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle (^{k+q})^k\,} en Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle k+q \neq k} (niet iedere loop wordt afgesloten), dus Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2w \notin L} . Er bestaat dus geen decompositie van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle (^k)^k\,} . Dit is in tegenspraak met onze eerdere aanname dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle L\,} regulier is, dus moet Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle L\,} wel niet regulier zijn.

Conclusie: Prelude is niet regulier.

Contextvrij?

De loop-structuur in Prelude heeft de speciale eigenschap dat de herhaling over alle voices spreidt, met als gevolg dat deze in verschillende voices mag worden geopend en gesloten. Hierbij geldt echter dat er parallel slechts ofwel een loop geopend ofwel gesloten mag worden: er mag dus maximaal 1 ( of ) in iedere ‘instructiekolom’ staan. Een andere vereiste is dat voor elk sluithaakje er al een corresponderend openingshaakje moet zijn geweest in een willekeurige voice. Na veel proberen zonder succes zijn we er uiteindelijk overtuigd van geraakt dat deze eigenschap niet uitgedrukt kan worden in een contextvrije grammatica of met een PDA.

Pomplemma voor contextvrije talen

We gaan nu dus proberen ons vermoeden dat Prelude niet contextvrij is te bewijzen met het pomplemma voor contextvrije talen:

Stel dat Prelude (vanaf nu de taal Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle L\,} ) wel contextvrij is, laat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle k\,} dan de grenswaarde uit het pomplemma zijn. Neem Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z = \begin{matrix} (^k & .^k & ( & . \\ .^k & )^k & . & . & ) \end{matrix}} oftewel als string: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z = (^k\quad.^k\quad(\quad.\quad \backslash n \quad.^k\quad)^k\quad.\quad.\quad)} , dan Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z \in L} . Neem aan dat er een decompositie Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uvwxy\,} van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z\,} is die aan het pomplemma voldoet.

  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^iwx^iy \in L} voor iedere Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle i \in \mathbb{N}} ,
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle lengte(vx) > 0\,} , en
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle lengte(vwx) \le k} .

Gezien de regel Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle lengte(vwx) \le k} kunnen we een gevalsonderscheiding maken van waar de string Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\,} zich bevind:

  • Geval 1: Geheel in de haakjes.
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in(^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in\ )^k}
  • Geval 2: Geheel in de nop's.
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^k} (eerste instantie)
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^k} (tweede instantie)
  • Geval 3: Op een overgang
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .\quad\backslash n}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .\quad\backslash n\quad.^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in (\quad .\quad\backslash n\quad.^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .\quad\backslash n\quad.^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \backslash n\quad.^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad)^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \ )^k\quad.}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \ )^k\quad.\quad}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \ )^k\quad.\quad.\quad)}

Geval 1: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\,} geheel in de haakjes

In het geval van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in (^k} krijgen we de decompositie: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \frac{(^p}{u} \frac{(^q}{v} \frac{(^r}{w} \frac{(^s}{x} \frac{(^{k-p-q-r-s}\quad.^k\quad(\quad.\quad \backslash n \quad.^k\quad)^k\quad.\quad.\quad)}{y}}

Wanneer we dit een keer pompen krijgen we: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y\quad =\quad(^{k+2}\quad.^k\quad(\quad.\quad \backslash n \quad.^k\quad)^k\quad.\quad.\quad) \quad\in z} . Er zijn in dit geval dus te veel openingshaakjes in verhouding tot de sluithaakjes. Dit betekent dus dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L}

Het bewijs voor Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in )^k} is analoog aan dat van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in (^k} , dus ook hier zal gelden dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L} .

Geval 2: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\,} geheel in de nop's

In het geval van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^k} (eerste instantie) krijgen we de decompositie: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \frac{(^k}{u} \frac{.^q}{v} \frac{.^r}{w} \frac{.^s}{x} \frac{.^{k-q-r-s}\quad(\quad.\quad \backslash n \quad.^k\quad)^k\quad.\quad.\quad)}{y}}

Wanneer we dit een keer pompen krijgen we: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y\quad = \quad(^{k}\quad.^{k+2}\quad(\quad.\quad \backslash n \quad.^k\quad)^k\quad. \quad. \quad) \quad\in z} .

Zoals te zien wanner men deze code in twee regels schrijft en de Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle .^{k+2}\,} uitwerkt tot Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle .^k\ .\ .} hebben twee haakjes dan de zelfde positie in een kolom. Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \begin{matrix} (^k & .^k & . & . & ( & . \\ .^k & )^k & . & . & ) & \end{matrix} }

Dat betekent impliciet dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L} . Het bewijs voor Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^k} (tweede instantie) is analoog aan dat van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^k} (eerste instantie). Dus ook hier zal Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L} zijn.

Geval 3: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\,} op een overgang

Geval 1 van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\,} op overgangen: In het geval van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .} krijgen we de decompositie: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \frac{(^k}{u} \frac{.^p}{v} \frac{.^{k-p}}{w} \frac{(}{x} \frac{\quad.\quad \backslash n \quad.^k\quad)^k\quad.\quad.\quad)}{y}}

Wanneer we dit een keer pompen krijgen we: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y\quad =\quad(^{k}\quad.^{k+1}\quad(^2\quad.\quad \backslash n \quad.^k\quad)^k\quad.\quad.\quad) \quad\in z} . Er zijn in dit geval dus te veel openingshaakjes in verhouding tot de sluithaakjes. Dat betekent impliciet dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L}

De bewijzen voor:

  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .\quad\backslash n}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}\quad(\quad .\quad\backslash n\quad.^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in (\quad .\quad\backslash n\quad.^k}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \ )^k\quad.}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \ )^k\quad.\quad}
  • Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \ )^k\quad.\quad.\quad)}

zijn allemaal analoog aan dat van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .^{k}} omdat er overal een van de twee soorten haakjes wordt veranderd. Dus ook hier zal Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L} zijn.

Geval 2 van vwz op overgangen: In het geval van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \backslash n\quad.^k} krijgen we de decompositie: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \frac{(^k\quad.^k\quad(\quad.\quad}{u}\frac{\backslash n}{v} \frac{.^{k-p}}{w}\frac{.^p}{x}\frac{)^k\quad.\quad.\quad)}{y}}

Wanneer we dit een keer pompen krijgen we: Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y\quad = \quad(^{k}\quad.^{k}\quad(\quad.\quad \backslash n^2 \quad.^{k+1}\quad)^k\quad. \quad. \quad) \quad\in z} .

Zoals te zien wanner men deze code in twee regels schrijft en de waardes een beetje uitwerkt dan hebben twee haakjes de zelfde positie in een kolom. Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \quad\begin{matrix} (^k & \ \ \ .^{k-1} & . & ( & . \\\backslash n\\ .^{k} & . & )^{k-1} & ) & . & . & ) & \end{matrix} }

Dat betekent impliciet dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L} . Het bewijs voor Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in .\quad\backslash n\quad.^k} is wederom analoog aan dat van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle vwz\in \backslash n\quad.^k} . Dus ook hier zal gelden dat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^2wx^2y \notin L} .


Dus: geen decompositie van Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle z\,} voldoet aan Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^iwx^iy \in L} voor iedere Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle i \in \mathbb{N}} . Dat is een tegenspraak, dus Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle L\,} is niet contextvrij.

Externe links