Prof.: Edson Holanda Teoria da computação

Slides:



Advertisements
Apresentações semelhantes
Funções em C Prof. Fabiano Utiyama.
Advertisements

Técnicas de Programação II Revisão TP1 Parte2
Um programa em C Bibliotecas Variáveis globais
Linguagem de Programação IV
Manipulação de Strings Marco Reis. Novo arquivo Adicione ManipulacaoDeStrings.c ao projeto. Cada projeto pode ter apenas um método main. Como outros programas.
Funções em C.
Programação para Engenharia I
Algoritmos e Programação Linguagens de Programação Teoria Aula 7 (19/05) Universidade Federal do Vale do São.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Introdução à Computação - Jorge Macêdo
Aula 1 Tipo Abstrato de Dados
Vetores (ou arranjos unidimensionais) adaptado de material da profa
Linguagem C LPG-I – Estruturas de Repetição Prof. Flavio Marcello
UDESC - Prof. Juliano Maia1 Funções. UDESC - Prof. Juliano Maia2 Índice Seção 1 – Funções em C Seção 2 – Iniciação Ponteiros Seção 3 – Recursão.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Treinamento no GRADEp HelloWorld Args. Slide 2 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - julho 2005 HelloWorld e Args Autoria Autora.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
PROGRAMAÇÃO ou LINGUAGEM C?
Cronograma de SCII - 2o. Ano de STPD - Profs. Fátima e Paulo
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Ponteiros em Linguagem C
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Linguagem de Programação
Strings Definição: Não confundir caracteres com strings
O Portal do Estudante de Computação
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
Aula 2 - Conceitos Preliminares para Programar em C
PROGRAMAÇÃO ESTRUTURADA II
© 2003 Introdução à programaçãoComputadores e programação I Linguagens de programação Introdução ao C (continuação)
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
Computador Cleópatra Programação Assembly e Alto Nível
Interface C / Assembly Modo Real
Computação Eletrônica
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Técnicas de Programação I Prof:. Msc. Arimatéia Junior Fortaleza-2011.
APRENDER A APRENDER deve ser nossa meta. Comandos de Controle de Programa Comandos de Seleção Prof. Me. Jeime Nunes.
PROGRAMAÇÃO ou LINGUAGEM C?
Declarando e Chamando Funções
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo VI Desenhos e Animação.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo VII Variáveis Indexadas Numéricas.
Wellington Felix.  Criada por Brian Kernighan e Denis Ritchie, na década de 1970, para uso em um computador DEC PDP-11 em Unix  C++ é uma extensão da.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Aula 5 - Exercícios Prof. Leandro M. Almeida.
Revisão Luis Antonio Tavares
Ciclos for, while e do...while
Programação de Computadores I – Arquivos
Linguagem C - Funções Automação Industrial Informática Básica
Analise e Conceito de C++ e C#
DSC/CCT/UFCG Profs.: José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria José Eustáquio Rangel de Queiroz Roberto Medeiros de.
Algoritmo e Programação
Profa. Mercedes Gonzales Márquez
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Slides 19 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Binários”.
Fundamentos de Programação1 Aula N. 01 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Introdução e elementos principais”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Fundamentos de Programação 1 Slides C – Número 4 Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “vetores de números e de caracteres”
Fundamentos de Programação 1 Slides 7 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Funções”
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
Prof. Tertuliano Estrutura Condicional em C++
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C” 1.
Fundamentos de Programação 1
Ponteiros Parte III.
Fundamentos de Programação 1
Transcrição da apresentação:

Prof.: Edson Holanda edsonholanda@gmail.com Teoria da computação Indecidibilidade Prof.: Edson Holanda edsonholanda@gmail.com Teoria da computação

Programa Hello, World main( ) { printf( "Hello, World \n"); getch( ); }

????? “O programa P com a entrada E, imprime a string ‘Hello, world’?”

Programa Hello 2 main() { int n, total, x, y, z; scanf("%d", &n); while(1) {for (x = 1; x <= total - 2; x++) for ( y = 1; y <= total -1; y++) { z = total - x - y; if (exp(x,n) + exp(y,n) == exp (z,n)) { printf("Hello, World");} } total++; } }

Programa Hello 2 int exp(int i, int n) { int res, j; res = 1; for ( j = 1 ; j <= n ; j++ ) { res = res * i; } return(res); }

Último teorema de Fermat “Não existem soluções inteiras para a equação xn + yn = zn , se n > 2”.

Testador hipotético P Testador de Hello, world Sim H E Não

Testador hipotético P Sim H1 E Hello, World

Testador hipotético Sim P H2 Hello, World

O que acontece quando…. ? Sim H2 H2 Hello, World

Vamos chamar esse problema de ‘Hello, world’

Princípio da Redução Hello, world Problema Hello, world Redução de Hello, world Problema Chamar F1

Reduzindo um problema a outro Construir Instância de P1 Sim Não Instância de P2 Decidir

Um exemplo de redução Vamos mostrar que o problema: “ O programa P, dada a entrada E,chamará a função f1?” é indecidível. Obs.: Vamos supor que o programa possui uma função chamada f1

Prova: Usaremos uma demonstração por absurdo; Como só conhecemos um problema indecidível, Hello, world fará o papel de P1 no diagrama mostrado anteriormente.

Prova: (cont.) Precisamos projetar um algoritmo que converta o problema Hello, world no problema de chamar F1.

Prova: (cont.) Ou seja, dado o programa P e sua entrada E, devemos contruir uma programa R e uma entrada Z tais que R, com a entrada Z, chame F1 SSE P com a entrada E imprimir Hello, world.

Prova: (cont.) A construção Se P tem uma função F1, renomeie essa função e todas as chamadas a ela. ( vamos chamar esse novo programa de P1)

Prova: (cont.) A construção Adicione a P1 uma função F1. Essa função não faz nada e não é chamada. ( vamos chamar esse novo programa de P2)

Prova: (cont.) A construção Modifique P2 para memorizar os 12 primeiros caracteres que ele imprime (armazenando em um vetor global V. ( vamos chamar esse novo programa de P3)

Prova: (cont.) A construção Modifique P3 de forma que, sempre que executar qualquer instrução de saída, ele verifique em seguida no vetor V se escreveu 12 caracteres ou mais e, se for o caso, se Hello, world são esses 12 primeiros caracteres. Nesse caso, chame a nova função F1. O programa resultade é R e a entrada Z é igual a E.

Prova: (cont.) conclusão Dessa forma transformamos um problema Hello, world em um caso do problema chamar F1. Logo, se o problema chamar F1 fosse decidível, então o problema Hello, world também seria. O que é um absurdo poís sabemos que Hello, world é indecidível. Portanto, o problema chamar F1 também é indecidível.

Importante: Sobre a prova através de redução: Observe a importância do raciocínio recursivo na implementação do programa H2.

Importante: A tese de Church estabelece uma correspondência entre as noções de Algoritmo e Máquina de Turing. Ou seja, podemos pensar num algoritmo como uma máquina de turing que sempre pára, para qualquer entrada, aceitando ou rejeitando.

Importante: Lembre que L é uma linguagem recursivamente enumerável (RE) SSE L = L1(M) para alguma Máquina de Turing M. Ling. Recursivas  Decidíveis  MT sempre pára.

Uma modificação na MT Seja M = (Q ,,  , q0, ß, F) uma Máquina de Turing. Assumiremos que a fita é infinita, tanto do lado direito quanto do lado esquerdo. A palavra de entrada w será formado por todos os símbolos diferentes do branco, desde o mais a esquerda até o mais o direita.

Outro problema indecidível Vamos provar que é indecidível a linguagem que consiste em pares (M,w) tais que: 1. M é uma máquina de turing (codificada em binário), com alfabeto de entrada { 0, 1 } 2. w é um string de 0´s e 1´s. 3. M aceita a entrada w.

Enumeração dos strings binários Ordene todos os strings de acordo com o comprimento e os de mesmo comprimento por ordem lexicográfica. Ex: , 0, 1, 00, 01, ... Dessa maneira podemos falar do primeiro string (w1), do segundo string (w2), etc.

Codificação para máquinas de Turing Seja M = (Q ,,  , q0, ß, F), precisamos atribuir números naturais aos estados, aos símbolos e aos sentidos (E e D). 1. Sejam q1,q2,...,qr para algum r. Vamos admitir que q1 sempre será o estado inicial e que q2 será o único estado de aceitação (final).

Codificação para máquinas de Turing 2. Sejam X1, X2, ..., Xs para algum s. Vamos admitir que X1 sempre será 0, X2 será 1 e que X3 será ß. Os demais símbolos são atribuídos de maneira aleatória aos próximos naturais. 3. Atribuiremos D1 ao sentido E e D2 ao sentido D.

Codificação para máquinas de Turing Agora podemos codificar o função de transição (qi, Xj) = (qk, Xl, Dm), para alguns naturais i, j, k, l e m. Codificaremos essa regra pelo string 0i10j10k10l10m Obs.: Como todos os valores i, j, k, l e m são, pelo menos, iguais a 1, não temos dois, ou mais, 1´s consecutivos.

Codificação para máquinas de Turing Um código para a MT M inteira consiste em todos os códigos para as transições, em alguma ordem, separados por pares de 1´s: C111C211...Cn-111Cn

Codificação para máquinas de Turing Exercício: Codifica a MT M abaixo, M = ({q1,q2,q3},{0,1}, , q1, ß, {q2}) na qual  consiste nas regras: (q1, 1) = (q3, 0, E), (q3, 0) = (q1, 1, E), (q3, 1) = (q2, 0, D),

Codificação para máquinas de Turing Lembrem que precisamos codificar pares que consistem em uma MT e uma string, (M, w). Para esse par usamos a codificação anterior para M, seguida de 111 e por w. Obs.: Em um código para uma MT não contém três 1´s consecutivos.

Enumeração de MT´s Agora podemos ordenar todas as MT´s de acordo com o comprimento e as de mesmo comprimento por ordem lexicográfica. Assim, podemos falar da Mi(i-ésima máquina de Turing). Obs.: Se o string não for uma representação bem formada de alguma MT, então ela representa um MT sem movimentos. L(M)={ }

A linguagem da diagonalização A linguagem Ld, a linguagem da diagonalização, é o conjunto de strings wi tais que wi não está em L(Mi). Vetor caracteristico: Formado por todas as strings que são aceitas pela MT Mi. O complementa da diagonal não é o vetor característico de nenhuma MT.

Teorema: Ld não é RE Ou seja, não existe nenhuma MT que aceite Ld. Prova: Vamos supor que Ld é L(M) para alguma TM M. Como Ld é uma linguagem sobre o alfabeto {0,1}, M está na lista de MT que construímos, ou seja, existe um código para M, digamos que seja i ( M = Mi).

Teorema: Ld não é RE Wi está em Ld ? Se wi está em Ld, então Mi aceita wi. Entretanto, por definição de Ld, wi não está em Ld, porque contém somente os valores wj tais que Mj não aceita Mj.

Teorema: Ld não é RE Wi está em Ld ? Se wi não está em Ld, então Mi não aceita wi. Portanto, por definição de Ld, wi está em Ld. O que é uma contradição (absurdo) !!