GithubHelp home page GithubHelp logo

diego-braga7 / bonus-teo-comp Goto Github PK

View Code? Open in Web Editor NEW

This project forked from freeufg/bonus-teo-comp

0.0 1.0 0.0 118 KB

Repositório criado para o projeto bônus valendo hum ponto na média na disciplina de Teoria da Computação da UFG Jataí.

License: GNU General Public License v3.0

Java 100.00%

bonus-teo-comp's Introduction

Projeto BonusTeoComp

Responsável: Prof. Esdras Lins Bispo Jr.         Email: [email protected]
Data de criação: 28 de novembro de 2013

  1. Introdução

No semestre de 2013.2, está sendo ministrada a disciplina de Teoria da Computação no Bacharelado em Ciência da Computação na Universidade Federal de Goiás (UFG) no Câmpus Jataí. Nesta disciplina, tópicos em Teoria da Computabilidade estão sendo abordados, como por exemplo, decidibilidade. Foi proposto pelo Prof. Esdras Bispo Jr. a implementação da máquina de Turing que decide a linguagem LAFD. Será apresentado a seguir a descrição do problema (Seção 2), a metodologia (Seção 3), e os critérios a serem utilizados para atribuição do ponto bônus (Seção 4).

  1. Descrição do Problema

O problema da aceitação é um problema clássico em Teoria da Computação. Podemos descrever ele informalmente da seguinte forma:

Para um dado modelo computacional MC e uma cadeia w, é possível identificar se MC aceita w?

Como estratégia de resolução deste problema, podemos definir uma linguagem L, de forma que,

L = { <M,w> | M é um MC que aceita a cadeia de entrada w}.

E, se para um dado par <M,w> conseguirmos decidir se <M,w> ∈ L, então conseguiremos resolver o problema da aceitação. Com outras palavras, uma forma de resolver o problema da aceitação é provar que L é decidível.

2.1 Problema de aceitação em um AFD

Podemos aplicar o problema da aceitação em um Autômato Finito Determinístico (AFD). Definiremos uma linguagem LAFD, como se segue,

LAFD = { <B,w> | B é um AFD que aceita a cadeia de entrada w}.

Logo, se provarmos que LAFD é decidível, então teremos uma solução para o problema da aceitação em um AFD. Segue abaixo a demonstração proposta por Sipser (2007):

IDÉIA DA PROVA: Simplesmente precisamos apresentar uma máquina de Turing MAFD que decide LAFD.

MAFD = "Sobre a entrada <B,w>, em que B é um AFD e w é uma cadeia:

  1. Simule B sobre a entrada w.
  2. Se a simulacão não termina em um estado de aceitação, aceite. Se ela termina em um estado de não-aceitação, rejeite."

PROVA: Mencionamos apenas alguns poucos detalhes de implementação dessa prova. Para aqueles de vocês familiarizados com escrever programas em alguma linguagem de programação padrão, imagine como você escreveria um programa para realizar a simulação.

Primeiro, vamos examinar a entrada <B,w>. Ela é uma representação de um AFD B juntamente com uma cadeia w. Uma representação razoável de B é simplesmente uma lista de seus cinco componentes, Q, Σ, δ, q0 e F. Quando MAFD recebe sua entrada, MAFD primeiro determina se ela representa apropriadamente um AFD B e uma cadeia w. Se não, MAFD rejeita.

Então MAFD realiza a simulação diretamente. Ela mantém registro do estado atual de B e da posição atual de B na entrada w escrevendo essa informação na sua fita. Inicialmente, o estado atual de B é q0 e a posição atual de B sobre a entrada é o símbolo mais à esquerda de w. Os estados e a posição são atualizados conforme a função de transição especificada δ. Quando MAFD termina de processar o último símbolo de w, MAFD aceita a entrada se B está em um estado de aceitação; MAFD rejeita a entrada se B está em um estado de não-aceitação.

2.2 Desafio proposto

O Prof. Esdras Bispo Jr. durante a aula do dia 28 de novembro de 2013 propôs aos alunos a implementação da MAFD. A proposta foi no sentido de implementar uma máquina de Turing genérica e, depois, instanciar um algoritmo específico para implementar MAFD. Logo o desafio só será resolvido se MAFD decidir LAFD (i.e. para qualquer para <B,w>, MAFD aceitará ou rejeitará o par). Os pormenores da metodologia da proposta é descrito na seção seguinte.

  1. Metodologia

O desafio deve ser resolvido utilizando a linguagem Java e a IDE NetBeans 7.3 (ou superior). Será o utilizado o repositório no GitHub (https://github.com/bispojr/bonus-teo-comp/) e as contribuições se darão através de commits enviados para o projeto. As contribuições se darão através de implementação de issues criadas no repositório referido. Qualquer um poderá criar issues, porém apenas aquelas validadas pelo Prof. Esdras Bispo Jr. serão passíveis de serem pontuadas para a disciplina. O paradigma de linguagem utilizado será a orientação para objetos.

  1. Critérios de Pontuação

  • Cada issue terá uma pontuação específica;
  • Cada aluno terá que implementar pelo menos uma issue para obter a pontuação mínima;
  • A pontuação será dada de acordo com a complexidade de cada issue e com o número de issue desenvolvida por cada contribuidor do projeto;
  • A pontuação máxima no projeto será de hum ponto extra na média da disciplina de Teoria da Computação.
  1. Referências

  • SIPSER, Michael. Introdução à teoria da Computação, 2a Edição, Editora Thomson Learning, 2007.

bonus-teo-comp's People

Contributors

bispojr avatar

Watchers

Diego de Oliveira Braga avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.