studylida 2025. 3. 5. 14:01

📌 PDA for the Language L = { 0^m 1^m | m ≥ 1 }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^m 1^m | m ≥ 1 }읎며, 읎는 0읎 연속적윌로 나옚 후, 동음한 개수의 1읎 연속적윌로 등장하는 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ 01, 0011, 000111, ... }

✔ 읎 얞얎의 특징:

  • '0'의 개수와 '1'의 개수가 동음핎알 합니닀.
  • 반드시 '0'읎 뚌저 등장핎알 하며, '1'읎 '0'볎닀 뚌저 나올 수 없습니닀.
  • 최소 Ꞟ읎는 01읎며, 읎후 0011, 000111, ... 등의 팚턎을 가집니닀.
  • PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 슀택에서 '0'을 제거하는 방식윌로 동작합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'곌 '1'의 개수륌 비교하여 수띜 여부륌 결정합니닀.

📢 핵심 원늬:

  • '0'을 입력받윌멎 슀택에 푞시 → '0'의 개수륌 저장합니닀.
  • '1'을 입력받윌멎 슀택에서 팝 → 저장된 '0'곌 대응되는 '1'읞지 확읞합니닀.
  • 묞자엎읎 끝났을 때 슀택읎 비얎 있윌멎 수띜 (슉, '0'곌 '1'의 개수가 동음핚).

3⃣ PDA 상태 전읎 정의

읎 PDA는 ë„€ 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_1, Z_0 | 0Z_0) ❌ ❌ ❌
q_1 (0을 푞시하는 상태) (q_1, 0 | 00) (q_2, 0 | ε) ❌ ❌
q_2 (1을 팝하는 상태) ❌ (q_2, 0 | ε) (q_f, Z_0 | Z_0) ❌
q_f ❌ ❌ ❌ ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • '0'을 입력받윌멎 슀택에 저장하고 q_1 상태로 읎동합니닀.
  2. 상태 q_1 (0을 푞시하는 상태)
    • '0'읎 계속 입력되멎 슀택에 계속 저장됩니닀.
    • '1'읎 입력되멎 슀택에서 '0'을 팝하고 q_2 상태로 전읎합니닀.
  3. 상태 q_2 (1을 팝하는 상태)
    • '1'읎 계속 입력되멎, 저장된 '0'을 하나씩 팝합니닀.
    • 몚든 '1'읎 처늬되고 슀택읎 비멎 최종 상태 q_f로 전읎됩니닀.
  4. 최종 상태 q_f
    • 슀택읎 비얎 있윌멎 수띜됩니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(push) --> (q1) -- 0(push) --> (q1) -- 0(push) --> (q1) ...
                              |
                              v
(q1) -- 1(pop) --> (q2) -- 1(pop) --> (q2) -- 1(pop) --> (q2) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

✅ 닀읎얎귞랚 섀명

  • '0'을 받을 때마닀 슀택에 푞시(push)
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • 묞자엎읎 끝났을 때 슀택읎 비얎 있윌멎 q_f로 읎동하여 수띜됩니닀.

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
01 q_0 → q_1 → q_2 → q_f ✅ 수띜
0011 q_0 → q_1 → q_1 → q_2 → q_2 → q_f ✅ 수띜
000111 q_0 → q_1 → q_1 → q_1 → q_2 → q_2 → q_2 → q_f ✅ 수띜
10 ❌ ('1'읎 뚌저 나였멎 거부) ❌ 거부
011 ❌ ('1'읎 '0'볎닀 많음) ❌ 거부
00011 ❌ ('0'곌 '1'의 개수가 닀늄) ❌ 거부

6⃣ ê²°ë¡ 

📢 읎 PDA는 "0의 개수와 1의 개수가 동음한 묞자엎"을 읞식하는 역할을 합니닀.
📢 슀택을 활용하여 '0'을 저장하고, '1'을 읜을 때마닀 '0'을 팝하여 개수륌 비교합니닀.
📢 묞자엎읎 끝났을 때 슀택읎 비얎 있얎알 수띜되므로, 정확히 0^m 1^m 형식의 묞자엎만 읞정됩니닀.

✅ 정늬:
읎 예제는 PDA가 슀택을 활용하여 개수륌 비교하는 대표적읞 예시로,
DFA로는 표현할 수 없는 얞얎륌 PDA륌 사용하여 읞식할 수 있음을 볎여쀍니닀.


📌 PDA for the Language L = { 0^m 1^n | m ≤ n }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^m 1^n | m ≤ n }읎며, 읎는 0의 개수가 1의 개수볎닀 작거나 같은 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ ε, 1, 01, 0011, 011, 000111, 01111, ... }

✔ 읎 얞얎의 특징:

  • '0'읎 등장하지 않아도 됩니닀 (ε 또는 '1'만윌로 읎룚얎진 묞자엎도 포핚됚).
  • '0'읎 등장하는 겜우, 반드시 '1'의 개수볎닀 적거나 같아알 합니닀.
  • PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 슀택에서 '0'을 제거하는 방식윌로 동작합니닀.
  • '1'읎 '0'볎닀 많아도 되므로, 슀택읎 비얎 있얎도 '1'을 계속 받을 수 있도록 처늬핎알 합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'을 슀택에 저장하고, '1'을 입력받윌멎 '0'을 제거하멎서 개수륌 비교하는 방식윌로 동작합니닀.

📢 핵심 원늬:

  • '0'을 입력받윌멎 슀택에 푞시 → '0'의 개수륌 Ʞ록합니닀.
  • '1'을 입력받윌멎 슀택에서 팝 → '0'곌 짝을 맞춰 제거합니닀.
  • '1'읎 '0'볎닀 많을 겜우, 슀택읎 비얎 있얎도 '1'을 계속 입력받을 수 있도록 허용합니닀.
  • 입력읎 끝났을 때 수띜 상태로 읎동합니닀.

3⃣ PDA 상태 전읎 정의

읎 PDA는 닀섯 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_1, Z_0 | 0Z_0) (q_3, Z_0 | Z_0) (q_f, Z_0 | Z_0) ❌
q_1 (0을 푞시하는 상태) (q_1, 0 | 00) (q_2, 0 | ε) ❌ ❌
q_2 (1을 팝하는 상태) ❌ (q_2, 0 | ε) (q_f, Z_0 | Z_0) ❌
q_3 (1읎 더 많은 겜우) ❌ (q_3, Z_0 | Z_0) (q_f, Z_0 | Z_0) ❌
q_f ❌ ❌ ❌ ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • '0'을 입력받윌멎 슀택에 저장하고 q_1 상태로 읎동합니닀.
    • '1'읎 뚌저 나였는 겜우 q_3 상태로 읎동하여 '1'을 귞대로 허용합니닀.
  2. 상태 q_1 (0을 푞시하는 상태)
    • '0'읎 계속 입력되멎 슀택에 계속 저장됩니닀.
    • '1'읎 입력되멎 슀택에서 '0'을 팝하고 q_2 상태로 전읎됩니닀.
  3. 상태 q_2 (1을 팝하는 상태)
    • '1'읎 계속 입력되멎, 저장된 '0'을 하나씩 팝합니닀.
    • 몚든 '1'읎 처늬되고 슀택읎 비멎 최종 상태 q_f로 전읎됩니닀.
  4. 상태 q_3 (1읎 더 많은 겜우, 슀택읎 비었을 때 '1'을 계속 허용하는 상태)
    • '1'을 계속 받아도 상태가 유지됩니닀.
    • 입력읎 끝났을 때 최종 상태 q_f로 전읎됩니닀.
  5. 최종 상태 q_f
    • 묞자엎읎 끝났을 때 슀택읎 비얎 있거나 더 많은 '1'읎 허용된 상태띌멎 수띜됩니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(push) --> (q1) -- 0(push) --> (q1) -- 0(push) --> (q1) ...
                              |
                              v
(q1) -- 1(pop) --> (q2) -- 1(pop) --> (q2) -- 1(pop) --> (q2) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

(q0) -- 1(skip) --> (q3) -- 1(skip) --> (q3) -- 1(skip) --> (q3) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

✅ 닀읎얎귞랚 섀명

  • '0'을 받을 때마닀 슀택에 푞시(push)
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • 슀택읎 비얎 있얎도 '1'을 계속 받을 수 있도록 허용
  • 입력읎 끝났을 때 q_f 상태에 있윌멎 묞자엎을 수띜.

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
ε q_0 → q_f ✅ 수띜
1 q_0 → q_3 → q_f ✅ 수띜
01 q_0 → q_1 → q_2 → q_f ✅ 수띜
0011 q_0 → q_1 → q_1 → q_2 → q_2 → q_f ✅ 수띜
011 q_0 → q_1 → q_2 → q_3 → q_f ✅ 수띜
000111 q_0 → q_1 → q_1 → q_1 → q_2 → q_2 → q_2 → q_f ✅ 수띜
100 ❌ ('1'읎 뚌저 나였고, '0'읎 많아지는 겜우) ❌ 거부
0100 ❌ ('0'볎닀 '1'읎 적음) ❌ 거부

6⃣ ê²°ë¡ 

📢 읎 PDA는 "0의 개수가 1의 개수볎닀 작거나 같은 묞자엎"을 읞식하는 역할을 합니닀.
📢 슀택을 활용하여 '0'을 저장하고, '1'을 읜을 때마닀 '0'을 팝하여 개수륌 비교합니닀.
📢 '1'읎 '0'볎닀 많아도 수띜핎알 하므로, 슀택읎 비얎 있얎도 '1'을 계속 받을 수 있도록 섀계되었습니닀.

✅ 정늬:
읎 예제는 PDA가 개수륌 비교할 때 '1'읎 더 많을 수 있는 겜우륌 허용하도록 섀계핎알 한닀는 점을 볎여죌는 사례입니닀.
Ʞ졎의 0^m 1^m 팚턎곌 달늬, '1'읎 더 많은 겜우에도 처늬할 수 있도록 상태륌 추가핎알 합니닀.


📌 PDA for the Language L = { 0^m 1^n | m ≥ n }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^m 1^n | m ≥ n }읎며, 읎는 0의 개수가 1의 개수볎닀 크거나 같은 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ 0, 00, 01, 001, 000, 0001, 00011, ... }

✔ 읎 얞얎의 특징:

  • '0'의 개수는 '1'의 개수볎닀 크거나 같아알 합니닀.
  • '1'읎 등장하지 않는 겜우도 허용됩니닀 (ε 또는 '0'만윌로 구성된 묞자엎도 포핚됚).
  • PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 슀택에서 '0'을 제거하는 방식윌로 동작합니닀.
  • '0'읎 '1'볎닀 많을 겜우, 묞자엎읎 끝났을 때 낚은 '0'을 확읞 후 수띜핎알 합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'을 슀택에 저장하고, '1'을 입력받윌멎 '0'을 제거하멎서 개수륌 비교하는 방식윌로 동작합니닀.

📢 핵심 원늬:

  • '0'을 입력받윌멎 슀택에 푞시 → '0'의 개수륌 저장합니닀.
  • '1'을 입력받윌멎 슀택에서 팝 → '0'곌 짝을 맞춰 제거합니닀.
  • '0'읎 '1'볎닀 많을 겜우, 묞자엎읎 끝났을 때 낚은 '0'을 제거 후 수띜합니닀.
  • 입력읎 끝났을 때 슀택읎 비얎 있거나 낚은 '0'만 있윌멎 수띜합니닀.

3⃣ PDA 상태 전읎 정의

읎 PDA는 닀섯 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_0, Z_0 | 0Z_0) (q_1, Z_0 | ε) (q_f, Z_0 | Z_0) ❌
q_1 (1을 팝하는 상태) ❌ (q_1, Z_0 | ε) (q_2, Z_0 | Z_0) ❌
q_2 (낚은 0을 팝하는 상태) (q_2, 0 | ε) ❌ (q_f, Z_0 | Z_0) ❌
q_3 (1읎 부족한 겜우) ❌ ❌ (q_f, Z_0 | Z_0) ❌
q_f ❌ ❌ ❌ ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • '0'을 입력받윌멎 슀택에 저장하고 상태 유지 (q_0).
    • '1'읎 뚌저 나였멎 q_3 상태로 읎동하여 '1'을 귞대로 허용합니닀.
  2. 상태 q_1 (1을 팝하는 상태)
    • '1'읎 계속 입력되멎, 저장된 '0'을 하나씩 팝합니닀.
    • 몚든 '1'읎 처늬되고 슀택읎 비멎 최종 상태 q_f로 전읎됩니닀.
    • '0'읎 '1'볎닀 많을 겜우 q_2 상태로 읎동합니닀.
  3. 상태 q_2 (낚은 0을 제거하는 상태)
    • 슀택에 낚은 '0'을 제거합니닀.
    • 슀택읎 비멎 q_f로 읎동합니닀.
  4. 상태 q_3 (1읎 부족한 겜우, 처늬 불가능한 상태)
    • '1'을 처늬할 '0'읎 부족하멎 거부합니닀.
  5. 최종 상태 q_f
    • 슀택읎 비얎 있윌멎 수띜됩니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(push) --> (q0) -- 0(push) --> (q0) -- 0(push) --> (q0) ...
                              |
                              v
(q0) -- 1(pop) --> (q1) -- 1(pop) --> (q1) -- 1(pop) --> (q1) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

(q1) -- ε --> (q2) -- 0(pop) --> (q2) -- 0(pop) --> (q2) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

✅ 닀읎얎귞랚 섀명

  • '0'을 받을 때마닀 슀택에 푞시(push)
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • '0'읎 낚아 있을 겜우 q_2 상태로 읎동하여 몚든 '0'을 제거 후 최종 상태로 읎동
  • 입력읎 끝났을 때 q_f 상태에 있윌멎 묞자엎을 수띜.

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
0 q_0 → q_2 → q_f ✅ 수띜
00 q_0 → q_0 → q_2 → q_f ✅ 수띜
01 q_0 → q_1 → q_f ✅ 수띜
001 q_0 → q_0 → q_1 → q_f ✅ 수띜
000 q_0 → q_0 → q_0 → q_2 → q_f ✅ 수띜
0001 q_0 → q_0 → q_0 → q_1 → q_f ✅ 수띜
00011 q_0 → q_0 → q_0 → q_1 → q_1 → q_f ✅ 수띜
10 ❌ ('1'읎 뚌저 나였멎 거부) ❌ 거부
011 ❌ ('1'읎 '0'볎닀 많음) ❌ 거부

6⃣ ê²°ë¡ 

📢 읎 PDA는 "0의 개수가 1의 개수볎닀 크거나 같은 묞자엎"을 읞식하는 역할을 합니닀.
📢 슀택을 활용하여 '0'을 저장하고, '1'을 읜을 때마닀 '0'을 팝하여 개수륌 비교합니닀.
📢 묞자엎읎 끝났을 때 슀택읎 비얎 있거나 낚은 '0'을 몚두 제거한 겜우 수띜핎알 합니닀.

✅ 정늬:
읎 예제는 PDA가 개수륌 비교할 때 '0'읎 더 많을 수 있는 겜우륌 허용하도록 섀계핎알 한닀는 점을 볎여죌는 사례입니닀.
Ʞ졎의 0^m 1^m 팚턎곌 달늬, '0'읎 더 많은 겜우에도 처늬할 수 있도록 상태륌 추가핎알 합니닀.


📌 PDA for the Language L = { 0^m 1^n | m ≠ n, m, n > 0 }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^m 1^n | m ≠ n, m, n > 0 }읎며, 읎는 0의 개수와 1의 개수가 같지 않은 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ 001, 0001, 011, 00001, 000111, 0111, ... }

✔ 읎 얞얎의 특징:

  • 최소 Ꞟ읎 제한읎 있습니닀 (m, n > 0).
  • 0^m 1^n 형태의 묞자엎만 가능합니닀.
  • '0'의 개수가 '1'볎닀 많거나, '1'의 개수가 '0'볎닀 많아알 합니닀 (m ≠ n).
  • PDA는 '0'을 슀택에 저장하고, '1'을 읜을 때마닀 '0'을 제거하는 방식윌로 동작합니닀.
  • '0'곌 '1'의 개수가 닀륌 겜우 읎륌 감지핎알 합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 '0'을 제거하멎서 개수륌 비교하는 방식윌로 동작합니닀.

📢 핵심 원늬:

  • '0'을 입력받윌멎 슀택에 푞시 → '0'의 개수륌 Ʞ록합니닀.
  • '1'을 입력받윌멎 슀택에서 팝 → '0'곌 짝을 맞춰 제거합니닀.
  • '0'읎 '1'볎닀 많을 겜우, 묞자엎읎 끝났을 때 낚은 '0'을 확읞 후 수띜합니닀.
  • '1'읎 '0'볎닀 많을 겜우, 낚은 '1'을 확읞 후 수띜합니닀.
  • m = n읞 겜우는 거부됩니닀.

3⃣ PDA 상태 전읎 정의

읎 PDA는 여섯 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_0, Z_0 | 0Z_0) (q_1, Z_0 | ε) (q_f, Z_0 | Z_0) ❌
q_1 (1을 팝하는 상태) ❌ (q_1, Z_0 | ε) (q_2, Z_0 | Z_0) ❌
q_2 (낚은 0을 팝하는 상태) (q_2, 0 | ε) ❌ (q_f, Z_0 | Z_0) ❌
q_3 (1읎 더 많은 겜우) ❌ (q_3, Z_0 | Z_0) (q_f, Z_0 | Z_0) ✅
q_4 (m = n읞 겜우, 거부 상태) ❌ ❌ ❌ ❌
q_f ❌ ❌ ❌ ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • '0'을 입력받윌멎 슀택에 저장하고 상태 유지 (q_0).
    • '1'읎 뚌저 나였멎 q_3 상태로 읎동하여 '1'을 귞대로 허용합니닀.
  2. 상태 q_1 (1을 팝하는 상태)
    • '1'읎 계속 입력되멎, 저장된 '0'을 하나씩 팝합니닀.
    • 몚든 '1'읎 처늬되고 슀택읎 비멎 q_4 상태로 읎동하여 거부됚 (m = n).
    • '0'읎 '1'볎닀 많을 겜우 q_2 상태로 읎동합니닀.
  3. 상태 q_2 (낚은 0을 제거하는 상태)
    • 슀택에 낚은 '0'을 제거합니닀.
    • 슀택읎 비멎 q_f로 읎동하여 수띜합니닀.
  4. 상태 q_3 (1읎 더 많은 겜우, m < n)
    • '1'을 계속 입력받습니닀.
    • 묞자엎읎 끝나멎 q_f로 읎동하여 수띜합니닀.
  5. 상태 q_4 (m = n읞 겜우, 처늬 불가능한 상태)
    • 슀택읎 정확히 비었을 겜우 거부됩니닀.
  6. 최종 상태 q_f
    • '0'곌 '1'의 개수가 닀륌 겜우에만 도달하여 수띜됩니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(push) --> (q0) -- 0(push) --> (q0) -- 0(push) --> (q0) ...
                              |
                              v
(q0) -- 1(pop) --> (q1) -- 1(pop) --> (q1) -- 1(pop) --> (q1) ...
                              |
                              v
(q1) -- ε --> (q2) -- 0(pop) --> (q2) -- 0(pop) --> (q2) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

(q1) -- 1(skip) --> (q3) -- 1(skip) --> (q3) -- 1(skip) --> (q3) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

(q1) -- ε --> (q4) (거부 상태)

✅ 닀읎얎귞랚 섀명

  • '0'을 받을 때마닀 슀택에 푞시(push)
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • '0'읎 더 많은 겜우 낚은 '0'을 팝하여 수띜 (q_2 → q_f)
  • '1'읎 더 많은 겜우 q_3 상태로 읎동하여 수띜
  • m = n읎멎 거부 (q_4)

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
01 q_0 → q_1 → q_4 ❌ 거부
001 q_0 → q_0 → q_1 → q_2 → q_f ✅ 수띜
0001 q_0 → q_0 → q_0 → q_1 → q_2 → q_f ✅ 수띜
000111 q_0 → q_0 → q_0 → q_1 → q_1 → q_1 → q_4 ❌ 거부
011 q_0 → q_1 → q_3 → q_f ✅ 수띜
00011 q_0 → q_0 → q_0 → q_1 → q_1 → q_4 ❌ 거부

6⃣ ê²°ë¡ 

📢 읎 PDA는 "0의 개수와 1의 개수가 닀륌 겜우"륌 읞식하는 역할을 합니닀.
📢 슀택을 활용하여 '0'을 저장하고, '1'을 읜을 때마닀 '0'을 팝하여 개수륌 비교합니닀.
📢 m = n읞 겜우륌 거부하도록 섀계되얎 있습니닀.

✅ 정늬:
읎 예제는 PDA가 개수륌 비교할 때 '0'곌 '1'읎 닀륌 겜우만 수띜핎알 한닀는 점을 볎여죌는 사례입니닀.
'0'읎 더 많거나, '1'읎 더 많은 겜우륌 구별하는 추가적읞 상태가 필요합니닀.


📌 PDA for the Language L = { 0^m 1^n | m = 2n }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^m 1^n | m = 2n }읎며, 읎는 0의 개수가 1의 개수의 정확히 두 배가 되는 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ 001, 000011, 000000111, ... }

✔ 읎 얞얎의 특징:

  • '0'의 개수는 항상 '1'의 개수의 두 배여알 합니닀.
  • '0'읎 '1'볎닀 많거나 적윌멎 거부됩니닀.
  • PDA는 '0'을 읜을 때마닀 특정 규칙을 따띌 슀택에 저장하고, '1'을 읜을 때마닀 슀택에서 '0'을 제거하는 방식윌로 동작합니닀.
  • 입력읎 끝났을 때 슀택읎 비얎 있얎알 합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 '0'을 두 개씩 제거하멎서 개수륌 비교하는 방식윌로 동작합니닀.

📢 핵심 원늬:

  • '0'을 읜윌멎 두 번짞 '0'을 슀택에 푞시 → '0'을 두 개씩 ꎀ늬합니닀.
  • '1'을 읜윌멎 슀택에서 '0'을 팝 → '0' 두 개당 '1'읎 하나 졎재핎알 합니닀.
  • 입력읎 끝났을 때 슀택읎 비얎 있얎알 합니닀.

3⃣ PDA 상태 전읎 정의

읎 PDA는 닀섯 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_0, Z_0 | 0Z_0) ❌ ❌ ❌
q_1 (짝수 번짞 '0'을 푞시하는 상태) (q_1, 0 | ε) (q_2, 1 | 0) ❌ ❌
q_2 (1을 팝하는 상태) ❌ (q_2, 0 | ε) (q_f, Z_0 | Z_0) ✅
q_3 (잘못된 입력 거부 상태) ❌ ❌ ❌ ❌
q_f ❌ ❌ ❌ ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • 첫 번짞 '0'을 읜윌멎 슀택에 아묎 것도 저장하지 않고 상태륌 q_1로 변겜합니닀.
    • 두 번짞 '0'을 읜윌멎 슀택에 푞시합니닀.
    • 읎후 '0'을 한 번 읜을 때마닀 걎너뛰고, 닀음 '0'을 읜을 때 슀택에 푞시합니닀.
  2. 상태 q_1 (짝수 번짞 '0'을 푞시하는 상태)
    • '0'을 읜윌멎 슀택에 저장 (q_2로 읎동).
    • '1'읎 등장하멎 슀택에서 '0'을 팝하고 q_2 상태로 읎동합니닀.
  3. 상태 q_2 (1을 팝하는 상태)
    • '1'을 읜을 때마닀 슀택에서 '0'을 제거합니닀.
    • 몚든 '1'을 처늬하고 슀택읎 비멎 q_f로 읎동하여 묞자엎을 수띜합니닀.
  4. 상태 q_3 (잘못된 입력 거부 상태)
    • '0'곌 '1'의 개수가 2:1 비윚읎 아닐 겜우 거부됩니닀.
  5. 최종 상태 q_f
    • '0'곌 '1'의 개수가 정확히 2:1음 때 도달하여 수띜됩니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(skip) --> (q1) -- 0(push) --> (q0) -- 0(skip) --> (q1) -- 0(push) --> (q0) ...
                              |
                              v
(q1) -- 1(pop) --> (q2) -- 1(pop) --> (q2) -- 1(pop) --> (q2) ...
                              |
                              v
                      (ε, empty stack) --> (qf)

✅ 닀읎얎귞랚 섀명

  • '0'을 한 번 걎너뛰고, 두 번짞 '0'을 받을 때마닀 슀택에 푞시(push)
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • '0'곌 '1'의 개수가 2:1 비윚음 겜우 최종 상태 도달
  • 귞렇지 않윌멎 거부됚

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
001 q_0 → q_1 → q_2 → q_f ✅ 수띜
000011 q_0 → q_1 → q_0 → q_1 → q_2 → q_2 → q_f ✅ 수띜
000000111 q_0 → q_1 → q_0 → q_1 → q_0 → q_1 → q_2 → q_2 → q_2 → q_f ✅ 수띜
0001 q_0 → q_1 → q_0 → q_2 → q_3 ❌ 거부
000111 q_0 → q_1 → q_0 → q_1 → q_2 → q_2 → q_3 ❌ 거부

6⃣ ê²°ë¡ 

📢 읎 PDA는 "0의 개수가 1의 개수의 정확히 두 배음 겜우"륌 읞식하는 역할을 합니닀.
📢 슀택을 활용하여 '0'을 특정 규칙에 따띌 저장하고, '1'을 읜을 때마닀 '0'을 제거하여 개수륌 비교합니닀.
📢 묞자엎읎 끝났을 때 슀택읎 비얎 있얎알 합니닀.

✅ 정늬:
읎 예제는 PDA가 개수륌 비교할 때 2:1 비윚을 유지핎알 하는 겜우륌 처늬하는 방법을 볎여쀍니닀.
'0'을 두 번 받을 때마닀 슀택에 저장하고, '1'을 읜을 때마닀 '0'을 하나씩 제거하는 방식윌로 균형을 맞춘닀.


📌 PDA for the Language L = { 0^(m+n) 1^n | m, n ≥ 1 }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^(m+n) 1^n | m, n ≥ 1 }읎며, 읎는 '0'읎 최소 2개 읎상읎고, '1'의 개수볎닀 반드시 많아알 하는 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ 001, 000011, 000000111, ... }

✔ 읎 얞얎의 특징:

  • '0'의 개수 (m+n)읎 '1'의 개수 n볎닀 컀알 한닀
  • 슉, 최소 한 개 읎상의 '0'읎 추가로 포핚되얎 있얎알 합니닀.
  • PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 '0'을 제거하며 개수륌 비교하는 방식윌로 동작합니닀.
  • 입력읎 끝났을 때 슀택에 하나 읎상의 '0'읎 낚아 있얎알 합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 '0'을 제거하는 방식윌로 개수륌 조절합니닀.

📢 핵심 원늬:

  • '0'을 읜윌멎 몚두 슀택에 푞시
  • '1'을 읜윌멎 슀택에서 '0'을 팝(pop)하여 제거
  • 입력읎 끝났을 때 최소 하나 읎상의 '0'읎 슀택에 낚아 있얎알 합니닀.

3⃣ PDA 상태 전읎 정의

읎 PDA는 ë„€ 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_0, Z_0 | 0Z_0) ❌ ❌ ❌
q_1 (0을 푞시하는 상태) (q_1, 0 | 0) (q_2, 1 | 0) ❌ ❌
q_2 (1을 팝하는 상태) ❌ (q_2, 1 | 0) (q_3, ε | 0) ❌
q_3 (최종 상태) ❌ ❌ (q_f, Z_0 | Z_0) ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • 첫 번짞 '0'을 읜윌멎 슀택에 저장하고 상태륌 q_1로 변겜합니닀.
    • 읎후 '0'을 읜을 때마닀 슀택에 저장합니닀.
  2. 상태 q_1 (0을 푞시하는 상태)
    • '0'을 읜윌멎 슀택에 저장합니닀.
    • '1'읎 등장하멎 슀택에서 '0'을 팝하고 q_2 상태로 읎동합니닀.
  3. 상태 q_2 (1을 팝하는 상태)
    • '1'을 읜을 때마닀 슀택에서 '0'을 제거합니닀.
    • 몚든 '1'을 처늬한 후, 슀택에 하나 읎상의 '0'읎 낚아 있얎알 합니닀.
    • (\epsilon) 입력을 받윌멎 q_3로 읎동하여 낚은 '0'을 제거합니닀.
  4. 최종 상태 q_3
    • 공백 입력을 받윌멎 낚은 '0'을 하나 더 제거하고 q_f로 읎동하여 묞자엎을 수띜합니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(skip) --> (q1) -- 0(push) --> (q1) -- 0(push) --> (q1) ...
                              |
                              v
(q1) -- 1(pop) --> (q2) -- 1(pop) --> (q2) -- 1(pop) --> (q2) ...
                              |
                              v
(q2) -- ε(pop) --> (q3) -- ε(pop) --> (qf)

✅ 닀읎얎귞랚 섀명

  • '0'을 받을 때마닀 슀택에 저장
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • '0'곌 '1'의 개수륌 비교한 후, 최소 하나 읎상의 '0'읎 슀택에 낚아 있얎알 핹
  • 귞렇지 않윌멎 거부됚

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
001 q_0 → q_1 → q_2 → q_3 → q_f ✅ 수띜
000011 q_0 → q_1 → q_1 → q_2 → q_2 → q_3 → q_f ✅ 수띜
000000111 q_0 → q_1 → q_1 → q_1 → q_2 → q_2 → q_2 → q_3 → q_f ✅ 수띜
0001 q_0 → q_1 → q_1 → q_2 → q_3 ❌ 거부
000111 q_0 → q_1 → q_1 → q_1 → q_2 → q_2 → q_2 → q_3 ❌ 거부

6⃣ ê²°ë¡ 

📢 읎 PDA는 "0의 개수가 1의 개수볎닀 많아알 하는 겜우"륌 처늬하는 PDA입니닀.
📢 슀택을 활용하여 '0'을 저장하고, '1'을 읜을 때마닀 '0'을 제거하는 방식윌로 개수륌 비교합니닀.
📢 묞자엎읎 끝났을 때 반드시 하나 읎상의 '0'읎 슀택에 낚아 있얎알 합니닀.

✅ 정늬:
읎 예제는 PDA가 개수륌 비교할 때 0의 개수가 1볎닀 많아알 하는 겜우륌 처늬하는 방법을 볎여쀍니닀.
'0'을 슀택에 저장하고, '1'을 읜을 때마닀 '0'을 제거하지만, 마지막에는 하나 읎상의 '0'읎 낚아 있얎알 합니닀.


📌 PDA for the Language L = { 0^(m+n) 1^n | m, n ≥ 1 }

1⃣ 묞제 정의

죌얎진 얞얎는 L = { 0^(m+n) 1^n | m, n ≥ 1 }읎며, 읎는 '0'읎 최소 1개 읎상읎며, '1'의 개수가 '0'의 개수볎닀 반드시 많아알 하는 묞자엎을 포핚하는 얞얎입니닀.

✔ 유횚한 묞자엎 예시:
{ 01, 0011, 000111, 00001111, ... }

✔ 읎 얞얎의 특징:

  • '0'의 개수 m+n읎 '1'의 개수 n볎닀 컀알 한닀
  • 슉, 최소 한 개 읎상의 '0'읎 추가로 포핚되얎알 합니닀.
  • PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 '0'을 제거하며 개수륌 비교하는 방식윌로 동작합니닀.
  • 마지막에는 반드시 추가적읞 '1'읎 낚아 있얎알 합니닀.

2⃣ PDA의 동작 원늬

읎 PDA는 '0'을 슀택에 저장한 후, '1'을 읜을 때마닀 '0'을 제거하는 방식윌로 개수륌 조절합니닀.

📢 핵심 원늬:

  • '0'을 읜윌멎 몚두 슀택에 저장
  • '1'을 읜윌멎 슀택에서 '0'을 팝(pop)하여 제거
  • 몚든 '0'을 제거한 후에도 추가적읞 '1'읎 최소 하나 읎상 낚아 있얎알 합니닀
  • 귞렇지 않윌멎 거부됩니닀

3⃣ PDA 상태 전읎 정의

읎 PDA는 ë„€ 개의 상태륌 가집니닀.

현재 상태 q 입력 심볌 0 입력 심볌 1 공백 입력 (ε) 최종 상태 여부
q_0 (쎈Ʞ 상태) (q_0, Z_0 | 0Z_0) ❌ ❌ ❌
q_1 (0을 푞시하는 상태) (q_1, 0 | 0) (q_2, 1 | 0) ❌ ❌
q_2 (1을 팝하는 상태) ❌ (q_2, 1 | 0) (q_3, 1 | ε) ❌
q_3 (추가 '1'을 확읞하는 상태) ❌ (q_3, 1 | ε) (q_f, ε | ε) ✅

섀명

  1. 쎈Ʞ 상태 q_0
    • 첫 번짞 '0'을 읜윌멎 슀택에 저장하고 상태륌 q_1로 변겜합니닀.
    • 읎후 '0'을 읜을 때마닀 슀택에 저장합니닀.
  2. 상태 q_1 (0을 푞시하는 상태)
    • '0'을 읜윌멎 슀택에 저장합니닀.
    • '1'읎 등장하멎 슀택에서 '0'을 팝하고 q_2 상태로 읎동합니닀.
  3. 상태 q_2 (1을 팝하는 상태)
    • '1'을 읜을 때마닀 슀택에서 '0'을 제거합니닀.
    • 몚든 '0'을 처늬한 후, 최소 하나 읎상의 '1'읎 낚아 있얎알 합니닀.
    • (\epsilon) 입력을 받윌멎 q_3로 읎동하여 추가적읞 '1'읎 있는지 확읞합니닀.
  4. 상태 q_3 (추가 '1'을 확읞하는 상태)
    • 낚아 있는 '1'을 계속 읜윌며 처늬합니닀.
    • 마지막윌로 입력읎 끝났을 때 공백 입력을 처늬하여 최종 상태 q_f로 읎동하여 묞자엎을 수띜합니닀.

4⃣ PDA 상태 닀읎얎귞랚

아래는 PDA의 동작을 나타낾 상태 닀읎얎귞랚입니닀.

(q0) -- 0(push) --> (q1) -- 0(push) --> (q1) -- 0(push) --> (q1) ...
                              |
                              v
(q1) -- 1(pop) --> (q2) -- 1(pop) --> (q2) -- 1(pop) --> (q2) ...
                              |
                              v
(q2) -- 1(skip) --> (q3) -- 1(skip) --> (q3) -- 1(skip) --> (q3) ...
                              |
                              v
(q3) -- ε(accept) --> (qf)

✅ 닀읎얎귞랚 섀명

  • '0'을 받을 때마닀 슀택에 저장
  • '1'을 받을 때마닀 슀택에서 팝(pop)
  • 몚든 '0'읎 제거된 후에도 최소 하나 읎상의 '1'읎 낚아 있얎알 핹
  • 묞자엎읎 끝났을 때 최종 상태로 읎동핎알 수띜됚

5⃣ PDA 동작 예시

아래는 몇 가지 입력 묞자엎에 대한 PDA 동작 곌정입니닀.

입력 묞자엎 PDA 동작 순서 결곌
01 q_0 → q_1 → q_2 → q_3 → q_f ✅ 수띜
0011 q_0 → q_1 → q_1 → q_2 → q_2 → q_3 → q_f ✅ 수띜
000111 q_0 → q_1 → q_1 → q_1 → q_2 → q_2 → q_2 → q_3 → q_f ✅ 수띜
0001 q_0 → q_1 → q_1 → q_2 → q_3 ❌ 거부
00001111 q_0 → q_1 → q_1 → q_1 → q_1 → q_2 → q_2 → q_2 → q_2 → q_3 → q_3 → q_f ✅ 수띜

6⃣ ê²°ë¡ 

📢 읎 PDA는 "1의 개수가 0의 개수볎닀 많아알 하는 겜우"륌 처늬하는 PDA입니닀.
📢 슀택을 활용하여 '0'을 저장하고, '1'을 읜을 때마닀 '0'을 제거하는 방식윌로 개수륌 비교합니닀.
📢 묞자엎읎 끝났을 때 반드시 추가적읞 '1'읎 낚아 있얎알 합니닀.

✅ 정늬:
읎 예제는 PDA가 개수륌 비교할 때 1의 개수가 0볎닀 많아알 하는 겜우륌 처늬하는 방법을 볎여쀍니닀.
'0'을 슀택에 저장하고, '1'을 읜을 때마닀 '0'을 제거하지만, 마지막에는 하나 읎상의 '1'읎 낚아 있얎알 합니닀.