ROTEIRO DAS AULAS. 3 de agosto de 2016

Tamanho: px
Começar a partir da página:

Download "ROTEIRO DAS AULAS. 3 de agosto de 2016"

Transcrição

1 ROTEIRO DAS AULAS 3 de agosto de 2016 Sumário 1 Preliminares Série histórica da matemática Panorama da matemática no século XIX Evolução da lógica como assunto matemático Cantor Hilbert Série histórica da computação sob o ponto de vista da matemática Fundamentos Procedimento e algoritmo Conjuntos recursivos e conjuntos recursivamente enumeráveis Problemas decidíveis e indecidíveis versus algoritmos & procedimentos Propósitos da Teoria da Computação Computabilidade Principais resultados em lógica/meta-matemática no início do século XX Teoria da computabilidade Máquina de Turing Linguagem Máquina de Turing Modificações de máquinas de Turing Máquina de Turing não-determinística Máquina de Turing Universal Função recursiva Classes das funções recursivas Classe das funções recursivas primitivas Classe das funções µ- recursivas

2 6 Complexidade de problemas Classes de problemas Classe P (polinomial, MT determinística) Classe NP (polinomial, MT não-determinística) Classe entre P e NP Classe NP-completo Classe NP-difícil Problemas de otimização versus problemas de decisão Conjectura P = NP Teoremas Comentários Complexidade de algoritmos Análise de eficiência & razão de crescimento de tempo Notação assintótica aplicada à limites de tempo Classes de algoritmos Encontrando Big-Ó Encontrando Big-Omega Encontrando Big-Téta

3 1 Preliminares 4642D Teoria da Computação Preliminares BIBLIOGRAFIA HAEUSLER, H.A. Matemática de Alan Turing e a Ciência da Computação. professor da TecMF/DI-PUC-Rio proferida na FACIN em 2014). (palestra do 1.1 Série histórica da matemática equação da onda 1 século XVII D Alembert Euler 1747 séries infinitas 1759 Fourier 1811 equação do calor conjectura de Fourier conceito de conjunto Bolzano De Morgan 1830 álgebras não-numéricas Problemas de fundamentação: convergência, real, funções, continuidade etc Dirichlet Caychy Dedekind Weirestrass Boole Schoeder 1854 álgebra dos conjuntos e relações lógicas Teoria ingênua dos conjuntos 2 Cantor cardiais ordinais axioma da escolha Frege lógica formal teoria axiomática dos conjuntos Hilbert 1900 programa de Hilbert Panorama da matemática no século XIX Problemas da Física-Matemática (Sec. XVIII-XIX): Equação da Onda Equação do Calor Técnicas de Fourier Séries Infinitas são usadas na solução de Eq. Dif. Parciais 3

4 Problemas de Fundamentação Séries divergentes x Séries Convergentes Conceito de infinito não era preciso O próprio conceito de número real não era preciso Definição de convergência não existia Conceito de função não era preciso = Necessidade de teoria mais abrangente e abstrata... Dedekind ( ) Cauchy ( ) Bolzano ( ) Riemman ( ) Peano (1889) Weierstrass ( ) Hilbert ( ) Definição de número real. Princípio de definição de funções por indução (recursão primitiva) 1888 Aritmetização da Análise, definição dos conceitos de limite, funções e funções contínuas, convergência de sequências e séries infinitas Definição do conceito de integral e Teorema Fundamental do Cálculo. Geometrias Não-Euclidianas Define os axiomas da aritmética. Estabelece critérios para a diferenciação e integração, termo a termo, de séries infinitas. Estabelece a fundamentação da geometria. 1.3 Evolução da lógica como assunto matemático DeMorgan (1830) Boole (1854) Frege (1879) Frege (1884) Observa que a álgebra não necessita lidar tão somente com conceitos numéricos. Descreve uma álgebra a partir de operações entre conjuntos e relações lógicas, confirmando DeMorgan. Estabele a lógica como um sistema formal que tem sua linguagem particular e distinta da natural. O conceito de prova matemática passa a ser formal. Busca a fundamentação da aritmética em bases puramente lógicas, com a adição do conceito de pertinência ( ) como primitivo. ===> O paradoxo de Russell!! 1.4 Cantor paradoxos e infinitos CANTOR elabora e apresenta para a comunidade matemática a teoria ingênua dos conjuntos. 4

5 A comunidade matemática tem resistência em aceitar teoria ingênua dos conjuntos de CANTOR em função do receio do infinito. A teoria de conjuntos de CANTOR é denominada ingênua pela identificação de paradoxos 4 : Paradoxo de Hausdorf e Banach-Tarski Paradoxo de Russel (1902): Não existe o conjunto de todos os conjuntos. R = {x tal que x / x} ==> R / R se e somente se R R. Comentário: O paradoxo de Russel mostra que pode ser gerada uma contradição a partir das leis fundamentais da Teoria dos Conjuntos e, por isto, a teoria passa a ser denominada Teoria Ingênua de Conjuntos. Na computação, o paradoxo de Russel é importante por sua associação com o problema da parada. Existência de regiões do plano euclideano sem medida. Exemplos de paradoxos PARADOXO PARADOXO PARADOXO DUPLO PARADOXO DO BARBEIRO: Em uma certa ilha existe um só barbeiro e este barbeia todos os homens e somente aqueles que não se barbeiam a si mesmos. Pergunta-se: o barbeiro barbeia a si mesmo ou não? Se o barbeiro se barbeia, entramos em contradição com o fato dele somente barbear aqueles que não barbeiam a si próprios. Se ele não se barbeia, então ele deve se barbear pois esta é a sua tarefa. DO MENTIROSO: (Liar paradoxo de Liar) Epimênides, o cretense, disse: - Eu sou mentiroso. Pelo que a frase significa: Se Epimênides disse a verdade então ele não disse a verdade. Se Epimênides não disse a verdade então ele disse a verdade. DA EXCEÇÃO: Todas as regras têm exceção. Esta é uma regra. Portanto ela deve ter exceção. Logo, deve existir uma regra sem exceção. PARADOXO: Um professor de Direito fez um acordo com um aluno: o aluno não precisaria pagar pelas aulas dadas por ele se perdesse sua primeira causa, mas se ele ganhasse, deveria pagar pelas aulas. Terminado o curso, o aluno não aceitou nenhuma causa. A fim de cobrá-lo o professor processou o. Em sua defesa, o aluno apresentou o seguinte argumento: - Ou ganho ou perco a causa; se ganhar não precisarei pagar porque afinal eu ganhei e se perder também não precisarei pagar pois, de acordo com o trato feito com o professor, ao perder a minha primeira causa, também não precisarei pagar. A que o professor retrucou: - Ou ganho ou perco a causa; se ganhar o aluno deverá me pagar, posto que ganhei o embate; se perder ele também deverá me pagar, pois o nosso trato anterior impõe que ele me pague, pois venceu sua primeira causa. Quem afinal tem razão? DE GRELING: Um adjetivo é chamado de heterólogo se não possui a propriedade que ele mesmo expressa e é chamado de homólogo se possui. Por exemplo, polissílaba é uma palavra polissílaba e proparoxítona é uma palavra 4 Situações contraditórias que parecem escapar ao senso comum, pois violam a intuição e aparentemente confundem. 5

6 PARADOXO proparoxítona. Estes são exemplos de adjetivos homólogos. Todo adjetivo que não for homólogo deve ser heterólogo. Heterólogo é um adjetivo. Como os adjetivos são divididos em duas classes (homólogos e heterólogos), a palavra heterólogo deve estar em uma delas. Se o adjetivo heterólogo for heterólogo, ele não possui a propriedade de ser heterólogo e portanto é homólogo. Se ele for homólogo ele possui a propriedade que ele mesmo expressa e portanto é heterólogo. BURALI-FORTI: Não há o ordinal de todos os ordinais. Comentário: Paradoxos são importantes, pois servem para impulsionar o raciocínio e superar limitações. Usualmente, paradoxos estão associados a conjuntos muito grande ou mal definidos, ou seja, conjuntos permanentemente inacabados. teoria ingênua dos conjuntos Coleção de zero ou mais objetos distintos, denominados elementos, os quais não possuem qualquer relação de ordem associada. A representação de conjuntos é realizada de duas formas: por extensão, onde são listados todos os elementos do conjunto; por compreensão, onde o conjunto é representados por suas propriedades. Conjuntos são identificados por letras maiúsculas. x C significa que x é elemento do conjunto C e x / C significa que x não pertence à C. A notação {x tal que x ϕ e P(x)}significa o conjunto de todos os objetos x para o qual P(x) é verdadeiro. Assim, {x tal que x é um número natural par}é o conjunto {2, 4, 6,...}. Se A e B são conjuntos então A B significa que todo elemento de A está em B. A B significa que todo elemento de A é elemento de B e que em B existe pelo menos um elemento que não está em A. Dois conjuntos são iguais se e somente se A B e B A. O conjunto vazio, denotado por {}, é o conjunto que não possui elementos. A B é o conjunto formado por todos os elementos de A ou de B. A B é o conjunto formado por todos os elementos que estão em A e que estão em B. A \ B é o conjunto {x tal que x A e x / B}. O símbolo N denota o conjunto dos números naturais. O conjunto dos números naturais positivos é denotado por N +. Se X e Y são conjuntos então o produto cartesiano X Y é o conjunto de pares ordenados {(x, y) tal que x X e y Y}. 6

7 Se X e Y são iguais então X Y é denotado por X 2. Uma relação f : X Y é uma coleção de pares ordenados (x, y) X Y, ou seja, é um subconjunto de X Y. O domínio de f, denotado por dom( f ) é a coleção {x tal que (x, y) f, para algum y}. Se x dom( f ) então f é definida em x. Se x / dom( f ) então f não está definida em x. O conjunto imagem de f, denotado por im( f ), é o conjunto {y tal que (x, y) f, para algum x}. Se A X então f (A) = {y tal que (x, y) f. para algum x A}. f (dom( f )) = im( f ). A inversa f 1 : Y X da relação f : X Y é o conjunto dos pares {(y, x) tal que (x, y) f }. Uma relação f : X Y é uma função se f (x) contém no máximo um elemento para cada x X, isto é, para cada entrada x em f é produzida no máximo uma única saída. Se dom( f ) = X, isto é, para cada entrada é produzida exatamente uma saída, f é denominada função total. Uma função é dita injetora se x, x dom( f ) e x = x então f (x) = f (x ). Uma função f : X Y é sobrejetora se im( f ) = Y. Uma função f : X Y é bijetora se f é injetora e sobrejetora. Se f : X Y e g : Y Z são funções ou relações então a composição de f e g é g f : X Z, o conjunto dos pares ordenados {(x, z) tal que (x, y) f e (y, z) g, para algum y Y}. OBS1: OBS2: O conjunto de funções totais é fechado com relação à composição. g f (x) = g( f (x)). Uma função f : N n N é denominada uma função de aridade n ou n-ária e o valor de f em (x 1, x 2,..., x n ) dom( f ) é escrito por f (x 1, x 2,..., x n ). Uma função n-ária é total se dom( f ) = N n e é parcial se dom( f ) N n. [cardinalidade] A cardinalidade de um conjunto é a medida de seu tamanho. Para um conjunto finito A = {a 1, a 2,..., a k }, #A é k. Dois conjuntos A e B são ditos ter a mesma cardinalidade (ou seja, #A = #B ) se existe uma função bijetora f : A B. A cardinalidade de A é menor ou igual à cardinalidade de B (ou seja, #A #B) se existir uma função f injetora f : A B ou uma bijeção f : A C, onde C B. Também, #A < B se #A #B e #A = #B. 7

8 Em 1874, Cantor introduziu a Teoria de Conjuntos e provou a existência de conjuntos infinitos com cardinalidades diferentes. Ou seja, nem todo conjunto infinito tem a mesma cardinalidade. A Teoria da Computação tem interesse especial pelo conjunto dos números naturais, denominado ℵ 0 (aleph). Se um conjunto pode ser colocado em correspondência biunívoca com o conjunto dos naturais então ele também tem cardinalidade ℵ 0. Um conjunto A é enumerável (contável) se ele é finito ou tem cardinalidade ℵ 0 Uma enumeração para um conjunto X enumerável infinito representada por uma sequência X = {a 0, a 1, a 2,...}é uma bijeção h(a i ) = i N. Exemplos: (1) Conjunto das palavras de um alfabeto finito Σ m = {a 1, a 2,..., a m }, isto é, Σ é enumerável onde h função v : Σ k N, (σ 1, σ 2,..., σ k ) = σ i n i, onde n é a base. i=0 (2) O conjunto LP de programas escritos em qualquer linguagem de programação é enumerável, pois para qualquer LP existe um alfabeto Σ tal que quelquer programa está em Σ. Um conjunto é dito não-enumerável se #A > ℵ 0. Em 1874 Cantor inventou um método, denominado diagonalização de Cantor, para provar que existem conjuntos não-enumeráveis. técnicas de prova Técnica de prova 5. Consiste de uma proposição do tipo p q que sempre verdadeira (tautologia), ou seja, que p q. A afirmação p é denominada hipótese e q tese. Técnicas de provas são utilizadas na computação. OBS: O Teorema da Incompletude de Göedel foi um dos primeiros teoremas da computação. Prova direta: (p q) Supor que a hipótese (p) é verdadeira e, a partir da hipótese, provar que a tese (q) é verdadeira. Exemplo: Prove que o produto de dois inteiros pares é par. Prova: Supor que x e y são números inteiros pares, ou seja, x = 2m e y = 2n. Então, xy = (2m)(2n) = 22mn = 2(2mn) que, por definição, é um número par. Logo, o produto de dois interios pares é par. 5 Frege (1879) - A lógica é estabelecida como sistema formal que tem uma linguagem particular e distinta da natural e o mundo das técnicas de prova se estabelece. 8

9 Prova por contraposição: (p q q p) ou seja, prova-se que q p. Para tanto, supor que q (hipótese) é verdadeira e, a partir desta, provar que p (tese) é verdadeira (prova direta). Exemplo: Prove que 3n + 2 é ímpar, onde n é um número inteiro ímpar. Prova:Supor que n é par, ou seja, n = 2k. Então, 3n + 2 = 3(2k) + 2 = 6k + 2 = 2(3k + 1) que, por definição é um número par. Logo, se n é ímpar então 3n + 2 é ímpar. Prova por redução ao absurdo: p q (p q) F, ou seja, supor a hipótese p e a negação da tese q ( q) e concluir uma contradição (em geral q e q). Exemplo: Se um número somado a ele mesmo é ele mesmo então esse número é zero. Prova: Supor x + x = x e que x = 0. Mas, x + x = x 2x = x 2 = 1 o que é um absurdo! Logo, a afirmação é verdadeira somente se x = 0. Prova por indução (primeiro princípio): Consiste em provar que para todo n inteiro positivo, P(n) é verdadeira, ou seja: base da indução: P(1) é verdadeira; passo da indução: Se P(n) é verdadeira então P(n + 1) é verdadeira. Exemplo: Prove que o número de linhas de uma tabela verdade para n proposições é dado por 2 n. Prova: base da indução: Se n = 1 então P(1) é verdadeira, pois P(1) = 2 = 2 1. passo da indução: Supor que P(n) = 2 n é verdadeira. Então P(n + 1) = 2(2 n ) = 2 n+1. Logo, P(n) P(n + 1) é verdadeira. método da diagonalização O método foi apresentado por Cantor em O método foi utilizado para provar... [utilidade da correspondência um-para-um: emparelhamento] que existem conjuntos infinitos que não podem ser mapeados em uma correspondência um-para-um com o conjunto infinito de números naturais. OBS: Conjuntos infinitos que não admitem emparelhamento com o conjunto N dos naturais são denominados conjuntos não-enumeráveis, sendo que a cardinalidade de conjuntos não-enumeráveis é tratada pela Teoria dos Números Cardinais de Cantor. [que há mais números reais do que inteiros] Teorema de Cantor: Para cada conjunto S, o conjunto das partes de S (ou seja, o conjunto de todos os subconjuntos de S, denotado por P(S)) tem cardinalidade maior do que o próprio S. OBS: O resultado formalizado pelo Teorema de Cantor implica que a noção do conjunto de todos os conjuntos é inconsistente. Se S fosse o conjunto de todos os conjuntos então P(S) seria ao mesmo tempo maior do que S e um subconjunto de S. 9

10 [ a infinidade de infinitos que a operação do conjunto das partes dá origem. Hipótese do continuum: A cardinalidade do conjunto dos números reais R é maior do que a do conjunto dos números naturais N. Logo, parece possível que exista um conjunto cuja cardinalidade esteja entre a dos números naturais N e dos reais R. O método foi fundamental para tentar provar que P = NP. 1.5 Hilbert HILBERT é considerado o fundador da Teoria da Computação quando criou a disciplina metamatemática e introduziu o estudo de sistemas formais através de métodos da teoria dos números. O foco metodológico da Teoria da Computação é iteração, indução, recursão. Iteração: Forma mais simples de reduzir sequências de operações realizadas repetidamente sendo que para isto são utilizados condicionais como for e while-do. Recursão: Auto-referência onde um conceito é definido em função dele mesmo. Não existe circularidade no uso da auto-referência, porque as sub-partes são sempre menores do que o objeto definido inicialmente. Depois de um número finito de passos, se chega a base (caso base) e a auto-referência termina. Indução: Definições indutivas e provas usam base e passo indutivo para contemplar todos os casos possíveis. É uma metodologia bastante clássica de construir teorias com sistemas lógicos a partir da definição de objetos (axiomas) e operações (regras) para obter provas (teoremas). 10

11 1.6 Série histórica da computação sob o ponto de vista da matemática Dedekind define as funções primitivas recursivas Göedel usa as funções primitivas recursivas associando-as a provas em aritmética Ackerman define uma função que necessita de recursão simultânea Rózsa Pèter prova que as funções primitivas recursivas formam a classe definida por recursão simples e nested a partir de funções iniciais constantes, identidade e a função sucessor. Prova que a função de Ackermann é na realidade definida por recursão em duas variáveis e não é, portanto, primitivamente recursiva mas é computável Post define um conceito de computação baseada em computação simbólica Turing define uma máquina formal (modelo formal) a partir de princípios simples: ler, escrever, apagar símbolos em uma fita - e define o conceito de Máquina Universal (Máquina de Turing Universal). Prova que não existe máquina capaz de verificar se outra máquina pára ou não Church define o labda-cálculo e mostra que este é capaz de definr todas as funções para as quais existe uma máquina de Turing. Church-Kleene definem as funções recursivas gerais como base do trabalho de Göedel Markov estabelece o conceito de computável com base na identificação de palavras e símbolos justificando o ponto de vista finitário da computação. 11

12 2 Fundamentos 4642D Teoria da Computação Fundamentos BIBLIOGRAFIA CARNIELLI, Walter; EPSTEIN, Richard L. Computabilidade, funções computáveis, lógica e os fundamentos da matemática. São Paulo: UNESP, (bibliografia complementar) 2.1 Procedimento e algoritmo O conceito de algoritmo é fundamental na ciência da computação e pode ser definido formalmente, segundo vários propósitos da teoria da computação, ou informalmente em função da definição de prcediment. Procedimento: Conjunto finito de instruções executadas mecanicamente em uma quantidade fixa de tempo e com uma quantidade fixa de esforço. Um bom exemplo de procedimento é um programa de computador escrito em linguagem de máquina, pois tal programa possui um número finito de passos, todos executáveis mecanicamente com uma quantidade fixa de recursos. Algoritmo: Procedimento que sempre pára, ou seja, cuja execução chegará ao final, independentemente de quais sejam suas entradas. Adicionalmente, dizemos que um procedimento termina para uma determinada entrada, se existe um número finito n, tal que após a execução de n instruções (não necessariamente distintas), não existem mais instruções a serem executadas ou a última instrução executada foi uma instrução halt. Exemplos : 1. Dado um número inteiro positivo a, determinar se a é número primo ou não. 2. Dado um inteiro a, determinar se existe um número perfeito maior que a. Obs: Um número é perfeito se a soma de seus divisores (exceto ele mesmo) é igual ao próprio número. 3. Dado um programa escrito em uma determinada linguagem de programação, determinar se esse programa está sintaticamente correto. Obs: Este problema é uma instância do seguinte problema genérico: Dada uma cadeia de caracteres x determinar se a cadeia é gerada por uma Gramática Livre de Contexto (ou reconhecida por um Autômato de Pilha). 4. Dado um programa qualquer, determinar se existe alguma entrada para a qual o programa entrará em loop. 12

13 Os problemas enunciados nos exemplos 1 e 3 possuem representação algoritmica enquanto que os problemas dos exemplos 2 e 4 só são representáveis através de procedimentos. 2.2 Conjuntos recursivos e conjuntos recursivamente enumeráveis Conjunto recursivamente enumerável: Conjunto representado por um procedimento. Conjunto recursivo: Conjunto representado por um algoritmo. Como procedimentos e algoritmos podem ser representados através de vários modelos formais (gramáticas e autômatos, por exemplo), podemos também definir conjuntos recursivos e recursivamente enumeráveis em função de tais modelos. 2.3 Problemas decidíveis e indecidíveis versus algoritmos & procedimentos Problema resolvível: Problema resolvível por um procedimento efetivo. Procedimento efetivo: Sinônimo de função recursiva (Goedel, 1936). Máquina de Turing que sempre chega a um estado final, para todas as entradas (Turing, 1936). Cálculo lambda onde a operação de iteração é considerada primitiva (Church, 1936). Conjunto de regras de produção (manipulação simbólica) que são aplicadas à cadeia de símbolos produzindo novas cadeias de símbolos (Post, 1943). Problema decidível: Problema resolvível por um algoritmo, para todas as entradas; caso contrário ele é um problema indecidível. Ou seja, um problema decidível é um procedimento efetivo. Um problema decidível é associado a uma linguagem recursiva (LR) L, ou seja, a uma máquina de Turing M que aceita as palavras da linguagem e rejeita as palavras que não estão. { Se w L então M aceita e pára no estado de aceitação L = T(M) = Se w / L então M rejeita e pára num estado de não-aceitação Exemplos de problemas decidíveis 1. Programa que verifica se é um número é primo. 2. Programa que verifica se a palavra pertence à linguagem. Um problema não-decidível é associado a uma linguagem recursivamente enumerável (LRE), ou seja, a uma uma máquina de Turing (não pensada como um algoritmo) que aceita as palavras da linguagem, mas pode não parar quando as palavras não estão. Exemplos de problemas não-decidíveis 1. Programa que recebe uma entrada e imprime como saída Alô, mundo!. 13

14 2. Problema da equivalência entre compiladores: Programa que verifica se dois compiladores reconhecem a mesma linguagem. 3. Detector universal de loops: Dado um programa P e uma entrada w, verificar se P(w) pára ou não para toda entrada w. 4. Problema da linguagem da diagonalização (LD) : Seja L uma linguagem e M uma máquina de Turing. A linguagem da diagonalização é o conjunto de todas as palavras w tais que w / L(M). 5. Problema da linguagem universal (LU) : Seja L uma linguagem, M uma máquina de Turing e w L(M) uma palavra. A linguagem universal é o conjunto de todas as palavras que codificam um par (M, w). Na prática não basta apenas saber se um problema é decidível, pois mesmo que um problema seja decidível ele pode exigir um tempo de computação da ordem de vários ciclos de vida do universo, mesmo se fossem utilizados computadores para sua solução, cuja tecnologia fosse baseada dentro das possibilidades mais otimistas da física moderna. Do ponto de vista computacional, a classe de problemas formam a seguinte hierarquia: problemas computáveis fáceis (complexidade polinomial) difíceis (problema com complexidade acima de exponencial arimetizáveis não-computáveis não-aritmetizáveis intratáveis Pelas definições apresentadas, é possível constatar claramente a relação entre problemas decidíveis e indecidíveis com conjuntos recursivos e recursivamente enumeráveis. Ou seja, um problema é decidível se o conjunto de soluções das diversas instâncias do problema é um conjunto recursivo, e indecidível caso tal conjunto seja recursivamente enumerável. Assim sendo, torna-se evidente que a questão da decidibilidade pode ser tratada formalmente através dos modelos que compõem a Teoria das Linguagens e Autômatos. A classe dos problemas não-decidíveis é representada pelo problema da parada. Problema da parada: (ENTSCHEIDUNGPROBLEM HALTING PROBLEM) Dado um procedimento Z e uma entrada X, decidir (determinar) se Z termina quando aplicado à X. A indecidibilidade deste problema é extremamente útil para demonstrar a indecidibilidade de outros problemas através da redução destes para o HALTING PROBLEM. 14

15 Church e Turing, inspirados nas técnicas de prova utilizadas por Göedel (1931) para provar seu TEOREMA DA INCOMPLETUDE 6, demonstraram independentemente que o PROBLEMA DA PARADA é não-decidível, ou seja, não existe um algoritmo que possa decidir corretamente se proposições matemáticas arbitrárias são verdadeiras ou falsas. O problema da parada é não-decidível, ou seja, é LRE e a prova matemática pode ser realizada associando o problema ao problema da LINGUAGEM DA DIAGONALIZAÇÃO. O problema da parada é não-decidível (ou seja, é LRE) e a prova matemática pode ser realizada associando o problema ao problema da LINGUAGEM UNIVERSAL. 2.4 Propósitos da Teoria da Computação Até aqui definimos procedures e algoritmos de maneira intuitiva e informal. Contudo eles podem ser definidos rigorosamente (precisamente) através de vários formalismos conhecidos como propósitos (ou princípios) da Teoria da Computação. Tais formalismos tem sido explorados largamente na Ciência da Computação, onde servem como MODELOS na solução de diversos problemas práticos. Dentre os formalismos mais importantes, podemos citar: a) Máquinas de Turing (Turing, 1936) b) Gramáticas (Chomsky, 1959) c) Algoritmos de Markov (Markov, 1951) d) Lambda Calculus (Church, 1941) e) Sistemas Post e Sistemas de Produção (Emil Post, 1936) f) Funções Recursivas (Kleene, 1936) Importante destacar que todo procedimento (ou algoritmo) descrito por algum destes formalismos, pode também ser descrita através de qualquer um dos demais; fato este que sugere a equivalência entre os formalismos. 6 O matemático alemão David Hilbert estabeleceu em 1900 que os matemáticos deveriam buscar expressar a matemática na forma de um sistema formal, consistente, completo e decidível. Em 1931, Göedel provou que o ideal de Hilbert era impossível de satisfazer, mesmo no caso da aritmética simples. Este resultado é conhecido como o primeiro teorema da incompletude de Göedel. 15

16 3 Computabilidade 4642D Teoria da Computação Computabilidade BIBLIOGRAFIA BOOLOS, George S.; JEFFREY, Richard C. Computability and logic. 3. ed. Cambridge University Press, (bibliografia básica) DIVERIO, Tiaraju. A.; MENEZES, Paulo. F. B. Teoria da computação: máquinas universais e computabilidade. 2. ed. Porto Alegre: Sagra-Luzzatto, (bibliografia complementar) HOPCROFT, John E.; MOTWANI, Rajeev; ULLMAN, Jeffrey D. Introdução à teoria de autômatos, linguagens e computação. (bibliografia básica) LEWIS, Harry. R.; PAPADIMITRIOU, Christos. H. Elementos de Teoria da Computação. (bibliografia básica) 16

17 3.1 Principais resultados em lógica/meta-matemática no início do século XX teoria dos tipos aritmética sem a multiplicação é decidível aritmética sem a adição e o sucessor é decidível (só sucessor) aritmética com adição e relação menor é decidível decidibilidade da Teoria dos Reais completude do cálculo de primeira ordem aritmetização da linguagem teorema da incompletude 3.2 Teoria da computabilidade Teoria dos Tipos como solução ao paradoxo em Russell Presburger (1929) prova que a aritmética sem a multiplicação é decidível. Russell e Whitehead publicam o Principia Mathematica. Skolem (1931) prova que a aritmética sem a adição e o sucessor é decidível. Herbrand (1931) prova a consistência de um fragmento fraco da aritmética (só o sucessor). Tarski (1930) prova que a aritmética com adição e a relação menor é decidível. (1936) Formaliza a semântica adequada para a lógica de primeira ordem. e em 1949 prova da decidibilidade da Teoria dos Reais. Gödel (1930) prova a completude do cálculo de primeira ordem. Gödel (1931) introduz a idéia de aritmetizar (codificar na forma numérica) a linguagem de um sistema formal de forma que (meta) teoremas do sistema possam ser vistos como teoremas aritméticos e prova seu famoso teorema da incompletude. Obs: #α é o código de α. Gödel (1931) prova a não-provabilidade da consistência. A Teoria da Computabilidade tem origem com a Tese de Church (1936) a qual também é responsável pelo uso de modelos formais (formalismos) na Teoria da Computação. TESE DE CHURCH - Todo processo computável (descrito por um procedimento) pode ser realizado por uma Máquina de Turing. A tese (apesar de não ter sido provada também não existe contra-prova) é universalmente aceita. Logo, é possível afirmar que máquinas de Turing constituem o formalismo mais genérico para a representação de procedimento e que qualquer outro formalismo será significativo se for considerado equivalente às máquinas de Turing. A demonstração formal da equivalência entre os diversos formalismos citados e máquinas de Turing, reforça a TESE DE CHURCH. 17

18 A TESE DE CHURCH afirma que apenas funções recursivas podem ser calculadas mecanicamente. Isto implica que procedimentos aritméticos não podem ser usados para decidir a consistência de declarações formuladas de acordo com as leis da aritmética. A TESE DE CHURCH estabelece a relação entre recursividade e computabilidade. Ou seja, um problema é resolvível se a solução é representada por uma função recursiva. Antes da TESE DE CHURCH a classificação de problemas como resolvíveis ou não era uma especulação informal, ou seja, não consistia numa formulação rigorosa e, portanto, não poderia se demonstrada matematicamente. Depois da TESE DE CHURCH a classificação de problemas como resolvíveis ou não é provada matematicamente. TESE DE CHURCH-TURING - Nada será considerado algoritmo se não puder ser reproduzido por uma máquina de Turing cuja parada é garantida para todas as entradas e todas são chamadas corretamente de algoritmos. A TESE DE CHURCH-TURING relaciona o conceito informal ao conceito formal de algoritmo. Ou seja, a noção intuitiva de algoritmo (procedimento efetivo) ao modelo de máquina de Turing (objeto matemático). A TESE DE CHURCH-TURING não é um teorema e, portanto, não pode ser demonstrada. 18

19 4 Máquina de Turing 4642D Teoria da Computação Máquina de Turing BIBLIOGRAFIA DIVERIO, Tiaraju. A.; MENEZES, Paulo. F. B. Teoria da computação: máquinas universais e computabilidade. 2. ed. Porto Alegre: Sagra-Luzzatto, (bibliografia complementar) HOPCROFT, John E.; MOTWANI, Rajeev; ULLMAN, Jeffrey D. Introdução à teoria de autômatos, linguagens e computação. (bibliografia básica) LEWIS, Harry. R.; PAPADIMITRIOU, Christos. H. Elementos de Teoria da Computação. (bibliografia básica) 4.1 Linguagem Alfabeto: Palavra: Conjunto finito, denotado por Σ, cujos elementos são símbolos ou caracteres. O alfabeto denotado por Σ contém o símbolo branco (ou vazio). Sequência finita de símbolos justapostos que pertencem a um alfabeto, denotada por w. A palavra vazia, denotada por ε, é uma sequência sem símbolos. A palavra inversa, denotada por w R, é a palavra escrita da direita para esquerda. O comprimento da palavra w, denotado por w, corresponde ao número de símbolos da palavra. A concatenação das palavras w 1, w 2 é denotada por w 1 w 2. Qualquer subsequência da palavra é uma subpalavra. Qualquer subsequência inicial da palavra é um prefixo. Qualquer subsequência final da palavra é um sufixo. Linguagem: Uma linguagem é constituída por um conjunto de palavras w definidas sobre um alfabeto Σ. 19

20 4.2 Máquina de Turing Máquina de Turing: (definição) Uma Máquina de Turing M é descrita por M = (Q, Σ, Γ, δ, q 0,, F), onde Q é o conjunto finito de estados, Σ é o alfabeto de símbolos de entrada, Γ o conjunto de símbolos da fita, δ é a função de transição, q 0 Q estado inicial, Γ é o símbolo branco ( / Σ, aparece inicialmente em todas as células da fita), F Q conjunto de estados finais. A MT é um formalismo matemático. Não é possível provar matematicamente que uma MT é a generalização do computador. Entretanto, todas as evidências externas e internas imaginadas semprem foram verficadas. Isto faz com que se acredite que outras generalizações do computador terão, no máximo, a mesma capacidade da MT. Uma MT é constituída pelos seguintes componentes: FITA: Conjunto de quadros sendo que cada quadrado contém apenas um caracter. É possível escrever, apagar e ler o conteúdo da fita. CABEÇOTE: Se movimenta sobre a fita para a direita(r), esquerda(l) ou fica parado (S). O cabeçote se movimenta um quadrado por vez. UNIDADE-DE-CONTROLE: Na unidade de controle são armazenadas as instruções de máquina. ESTADOS: O comportamento da máquina é descrito por um conjunto de estados. Existe apenas um estado inicial. Existe, pelo menos um, estado final. Máquina Norma 7, Máquina de Post 8, Máquina com pilhas 9 são equivalentes à MT. Teorema: Seja L uma linguagem que pode ser reconhecida por uma máquina de Turing de k- cabeçotes e k-fitas. Então, L = T(M) para alguma máquina de Turing de 1 cabeçote e 1 fita. A MT determinística (máquina usual) é associada ao tempo polinomial. A MT determinística reage às instruções sempre da mesma forma. A MT é um programa para uma Máquina Universal (MTU). A MT é utilizada para estudar computabilidade, ou seja, a solução de problemas: MT-reconhecedora-de-linguagem: Utilizada no estudo de linguagens e de suas propriedades. Neste caso, o conjunto de estados finais é muito importante. MT-realizadora-de-função: Utilizada no estudo de funções computáveis e de suas propriedades. Neste caso, o conjunto de estados finais não é importante. Solucionabilidade-de-problemas: Utilizada no estudo da solução de problemas: computáveis (solucionáveis, parcialmente solucionáveis); não-computáveis (nãosolucionáveis) - e de suas propriedades. 7 Máquina de registadores, sendo que o conjunto de registradores é infinito. 8 Máquina baseada na estrutura de dados do tipo fila (primeiro armazenado, primeiro recuperado). 9 Máquina baseada na estrutura de dados do tipo pilha onde são necessárias pela menos duas pilhas para simular o mesmo pode computacional de uma fita ou fila (último armazenado, primeiro recuperado). 20

21 4.3 Modificações de máquinas de Turing MT com múltiplas fitas (MT multidimensional) - A máquima possui k-fitas (infinitas à esquerda e à direita), k-cabeçotes sendo que existe um cabeçote para cada fita, é acrescentado ao conjunto de movimentos do cabeçote os movimentos para cima(u) e para baixo(d) para possibilitar o movimento entre fitas, a programação da máquina exige regras para a entrada escrita em cada fita. os símbolos da fita definem um vetor cujos componentes pertencem ao alfabeto. MT com mútiplos cabeçotes - A máquina possui k-cabeçotes sobre uma única fita sendo que cada cabeçote possui movimento independente, ou seja, ele pode cerificar o estado de mais de uma posição da fita ao mesmo tempo. A instrução de máquina tem seis componentes: < e 1, c 1, a, b, R, e 2 > onde e 1 informa o estado atual, c 1 o cabeçote utilizado, a o valor apontado pelo cabeçote c 1, b o valor escrito na fita, R a direção do movimento do cabeçote c 2, e 2 o estado final da transição. A palavra w é aceita por uma MT de dois cabeçotes e duas fitas se, quando w é escrita na fita 1 e o cabeçote 1 percorre o símbolo mais a esquerda de w no estado q 0 e a fita 2 está inicialmente em branco, M finalmente pára em seu estado de aceitação q f. Outras MTs: probabilística, com suprimento extra de bits aleatórios 10, quântica, simétrica, alternada Nenhuma extensão de MT aumenta seu poder computacional. 4.4 Máquina de Turing não-determinística Definição: Uma máquina M é chamada de MT não-determinística se ela incluir quíntuplas que especifiquem movimentos múltiplos para um dado par estado/símbolo, isto é, se para uma mesma entrada é possível a transição para mais de um estado. Diz-se que uma cadeia w é aceita por uma MTg não-determinística se existir alguma cadeia de transições da máquina na entrada w que alcança uma condição de parada que inclui o estado de aceitação q f. Teorema: Seja M uma MT não-determinística que aceita L. Então, existe uma máquina determinística M que também aceita L. Em uma MT o não-determinismo é representado através da existência de mais de uma unidade de controle, ou seja, uma para cada possibilidade de ação. Sendo que cada unidade de controle realiza o processamento independente e não compartilha recursos como os demais. A MT não-determinística possui uma fita adicional contendo informações que não podem ser modificadas pelo controle central. A ideia da fita adicional é dar à máquina informações auxiliares para ajudar a determinar se uma entrada e deve ou não ser aceita. 10 A CAPACIDADE DE TOMAR DECISÕES PROBABILÍSTICAS MUITAS VEZES AJUDA ALGORITMOS A RESOLVEREM PRO- BLEMAS DE FORMA MAIS EFICIENTE. ALGORITMOS QUE USAM BITS ALEATÓRIOS SÃO CHAMADOS ALGORITMOS PRO- BABILÍSTICOS. O MAIS SURPREENDENTE DISSO TUDO É QUE CADA UM DESSES MODELOS PODE SER CONVERTIDO PARA OUTRO, SEM FORNECER QUALQUER PODER COMPUTACIONAL EXTRA. 21

22 A MT não-determinística é associada ao tempo não-polinomial. Uma MT não-determinística tem o mesmo poder computacional da MT usual (ou seja, da MT determinística). 4.5 Máquina de Turing Universal A MTU (máquina de Turing Universal) é muito similar ao modelo de Von Neumann de um computador (arquitetura de Von Neumann), onde programa e dados são armazenados no mesmo meio. Uma máquina de Turing universal pode emular qualquer outra máquina de Turing através da definição de estados e símbolos. A MTU é definida: pelos símbolos que a máquina de Turing usa pelos estados e transições da máquina de Turing pelas regras de codificação que definem a entrada na fita Definição de MTU: Existe uma máquina de Turing U que é universal, no sentido de que o comportamento de qualquer outra máquina M pode ser codificado como uma cadeia e(m) tal que U processará qualquer cadeia da forma (e(m), w) da forma como w seria processado por M. Funcionamento - descrição usual se w M w então (e(m), w) U w. Suponha uma máquina com p-cabeças percorrendo uma única fita na qual são impressos símbolos do alfabeto Σ. A qualquer momento o cabeçote de controle estará no estado q Q e receberá como entrada os p-símbolos percorridos pelos cabeçotes, isto é, um elemento de Σ p. A saída da unidade de controle é um elemento (Σ p M) { pare}, onde M = l l é uma instrução possível para os cabeçotes se moverem no máximo a distância 1. Então, a máquina de Turing é especificada pela quíntupla (q i, x j, q l, x k, l) com a única diferença de que os x s e os l s são vetores e que se deve empregar uma convenção para resolver conflitos se os dois cabeçotes tentam imprimir símbolos diferentes num único quadrado. Uma computação de tal máquina começa com a atribuição de um estado à unidade de controle e a atribuição das posições iniciais para os cabeçotes. Como de costume, é assumido que a fita tem no máximo finitos quadrados nãobrancos. Então, a computação prossegue normalmente, parando quando nenhuma quíntupla começando por q i x j é aplicável. 22

23 Funcionamento da MTU - descrição utilizando múltiplas fitas Uma MTU com uma fita precisa definir um marcador de fim de programa e de início da fita. É preciso também alternar a leitura/gravação entre MTs específicas e seus dados. É mais simples descrever uma MTU com múltiplas fitas. É mais fácil descrever uma MTU utilizadno 2 fitas... É ainda mais fácil descrever uma MTU com 3 fitas. Na primeira fita é codificado o conjunto de estados da MT que será emulada. Na segunda fita, a entrada da MTU. A terceira fita é uma memória de trabalho do estado corrente da máquina emulada. O programa MTU inicia lendo o programa da fita para saber o estado inicial e anota este estado no na fita de estatus. Os estados da MTU seguem o mesmo processo: 1- lê o estado corrente da fita de dados 2- lê o programa da fita de programa e localiza a instrução do estado e da célula corrente. Anota a informação na fita de estatus. A instrução inclui o novo estado. 3- se o novo estado é páre então a MTU fica parada; senão vai para o passo 4 4- aplica a instrução do estado na fita de dados, ou seja, re-escreve uma célula e se move sobre a fita de dados para a direita/esquerda. 5- atualiza o estatus da fita 6- vai para o passo 1 Evidências de uma MTU interna: demonstração de que qualquer extensão das características da máquina proposta computa a mesma classe de funções, ou seja, não aumentar seu poder computacional. externa: exame de outros modelos que definem a noção de algoritmo juntamente com a prova de que são, no máximo, computacionalmente equivalentes. Considerações finais: Usualmente a fita de dados da MTU será idêntica a produzida pela MT que ela está emulando se o programa da MTU está correto. De acordo com a especificação o processo continua para sempre ou pára. Se pára então deve estar no mesmo estado de aceitação ou rejeição. A sentença uma MTU emula uma MT específica significa que o estado final e a fita de dados são idênticas à da MT emulada. É certo que a MTU realiza mais passos do que a MT emulada. Se qualquer MT pode ser emulada por uma MTU então uma MTU pode emular a si mesma. A complexidade de uma MT emular a si mesma é ilustrada, por exemplo, pelo desenho das mãos de Escher. O objetivo de Alan Turing com a MT foi o definir um método formal para reconhecer ou criar padrões ou mensagens, sendo que na sequência isto foi utilizado para o desenvolvimento de provas matemáticas. 23

24 Uma aplicação da capacidade da MTU emular qualquer MT consiste em utilizar esta propriedade para identificar classes de problemas (complexidade de problemas). O exemplo mais importante disto foi a utilização da MTU foi para resolver o PROBLEMA DA PARADA e o PROBLEMA DE DECISÃO apresentado por David Hilbert. 24

25 5 Função recursiva 4642D Teoria da Computação Modelos formais: Função Recursiva BIBLIOGRAFIA BOOLOS, George S.; JEFFREY, Richard C. Computability and logic. 3. ed. Cambridge University Press, (bibliografia básica) DIVERIO, Tiaraju. A.; MENEZES, Paulo. F. B. Teoria da computação: máquinas universais e computabilidade. 2. ed. Porto Alegre: Sagra-Luzzatto, (bibliografia complementar) Recursão A Teoria da Recursão teve origem no anos 30, através dos estudos de Göedel, Church, Turing, Kleene e Post. A Teoria da Recursão tem seu principal resultado na definição de Turing computável (ou seja, a formalização do conceito de algoritmo). A recursão é um mecanismo implícito utilizado para expressar algo complexo em termos de versões mais simples dele mesmo. A recursão se estrutura a partir do caso-base e do caso-recursivo. O caso-recursivo define a solução do problema em função de soluções menores. O caso-base deve existir para garantir o fim da recursão. A recursão se aplica à diferentes áreas: arquitetura: construções em estilo gótico do século XII desenho: trabalhos de Escher música: obras de Bach: Jesus alegria dos homens - e Beethoven: sinfonias n.5 e n.9 linguagem: Chomsky - utilizou recursão para ampliar infinitamente a linguagem natural; encaixar frases em frases (recursão na escrita) matemática: Cantor - utilização da função sucessor para construção do conjunto dos números naturais, ou seja, N é o menor conjunto que satisfaz as condições: (i) 0 N (ii) se n N então (n + 1) N Outro exemplo na matemática é a definição de função: n N, { f at (0) (x) = x f at(n) = f at (n+1) (x) = f at( f at (n) (x)) 25

26 computação: * cálculo lambda: Church - recursão aplicada ao estudo de funções computáveis * função recursiva: Kleene - recursão no estudo de funções computáveis * teorema da incompletude: Goedel - recursão no estudo de sistemas A recursão é um conceito importante para o pensamento computacional (ver algoritmo de divisão euclidiana C3.A7.C3.A3o_do_algoritmo) 5.1 Classes das funções recursivas classe das funções lambda-definíveis Série histórica David Hilbert (1921)... Kurt Göedel (1931)... Kleene (1936)... propôs que a fundamentação da matemática seja totalmente reformulada de forma rigorosa, partindo da aritmética. O plano de Hilbert era reduzir toda a fundamentação matemática a um número finito de axiomas a partir dos quais qualquer proposição matemática poderia ser provada. provou, através do teorema da incompletude, que o plano de Hilbert não era possível de ser realizado. O teorema da incompletude diz que em qualquer sistema axiomático contendo a aritmética de Peano, existem afirmações verdadeiras que não podem ser demonstradas a partir de axiomas. introduziu uma terminologia própria para apresentação matemática de funções recursivas. 5.2 Classe das funções recursivas primitivas Conceito Classe das funções recursivas primitivas (ou classe das funções parciais recursivas) é a menor classe de funções que inclui todas as funções que são obtidas através de um número finito de aplicações de funções básicas e é fechada com relação à substituição e a recursão primitiva. Funções básicas: função zero, função identidade, função sucessor. Teoremas Teorema: Todas as funções recursivas primitivas são computáveis. Demonstração: Basta notar que todas as funções iniciais são computáveis e que as funções obtidas de funções computáveis por composição ou recursão primitiva ainda são computáveis. 26

27 Teorema: Todas as funções recursivas primitivas são funções totais. Demonstração: Basta notar que as funções iniciais são totais (ou bijetoras) e que as funções obtidas a partir de funções totais por composição ou recursão primitiva ainda são totais. Teorema: Sejam f : N k 0 N 0 e g : N k+2 0 N 0 funções computáveis. h = rec( f, g), obtida a partir de f e g por recursão primitiva, também é computável. Apresentação matemática - formalismo de Kleene Funções básicas: função zero, função identidade, função sucessor função zero (ou função constante): Denotada por g(x). Retorna o valor zero para qualquer valor x de entrada: g(x) = 0. função identidade (ou função sucessor): Denotada por suc(x). Retorna o valor (x + 1) para qualquer valor x de entrada, ou seja, suc(x) = x + 1. Função projeção: Denotada por proj j i (x 1, x 2,..., x j ), i j para todo i, j N. Retorna x i para proj j i (x 1, x 2,..., x j ). Exemplo: proj1 1(x) = x; proj2 1 (x, y) = x; proj2 2 (x, y) = y. Operadores básicos (composição de função) Sejam f uma função de n argumentos e h uma função de m argumentos. Então, f (x 1,..., x n ) = g(h 1, (x 1,..., x n ),..., h m (x 1,..., x n )) de g e h 1,..., h m. Isto é representado por f = [g h 1,..., h m ], onde o caso mais simples é quando m = 1, h 1 é representado por h e f (x) = [g h](x). Definição segundo o formalismo de Kleene Sejam g : N N, g(x 1,..., x n ), h : N n N, h 1 (x 1,..., x n ),..., h m (x 1,..., x n ) funções. A função recursiva primitiva é definida por: { f (x 1,..., x n, 0) = g(x 1,..., x n ) f (x 1,..., x n, y + 1) = h(x 1,..., x n, y, f (x 1,..., x n, y)) Comentários Comentário-1: Se a função pertence à classe de funções recursivas primitivas então é associada ao comando condicional se-então. Comentário-2: Funções recursivas primitivas são as funções iniciais e todas aquelas que podem ser obtidas a partir das funções iniciais pela aplicação de um número finito de vezes das operações de composição e recursão primitiva. 27

28 Exemplos As funções soma, multiplicação e exponenciação são recursivas primitivas. A função fatorial é recursiva primitiva. Para pensar... Função de Ackermann: Seja A : N 2 N a função é definida por: (i) A(0, y) = y + 1 (ii) A(x + 1, 0) = A(x, 1) (iii) A(x + 1, y + 1) = A(x, A(x + 1, y)) A função A é total e computável, pois, por exemplo: A(1, 1) = A(0, A(1, 0)) # por (iii) A(1, 1) = A(1, 0) + 1 # por (i) A(1, 1) = A(0, 1) + 1 # por (ii) A(1, 1) = 3 # por (i) Por sua vez, A(4, y) = }{{} (y+3) vezes A função A não é recursiva primitiva! Teorema: Existem funções totais computáveis que não são recursivas primitivas. 5.3 Classe das funções µ- recursivas Conceito Classe das funções µ-recursivas é obtida pelo processo de minimização, ou seja, de definir uma nova função f ao procurar por valores de uma certa função g usando o operador µ de minimização sobre g. Funções básicas: função zero, função identidade, função sucessor, operador de minimização. Operador de minimização: Seja f : N k N função. A minimização (ilimitada) de f é a função (parcial) M r : N k N tal que x min {y N tal que f ( x, y) = 0}, onde x representa a k-upla x = (x 1,..., x k ) também denotada por µy[ f ( x, y) = 0]. Exemplos de minimização de função Exemplo-1: Seja f = proj1 3 : N3 N tal que (x 1, x 2, x 3 ) x 1. A função de minimização de f é dada por M f : N 2 N tal que 28

29 (x 1, x 2 ) min {y N tal que f (x 1, x 2, y) = 0} = min {y N tal que x 1 = 0}. Logo, a função M f está definida nos pontos (x 1, x 2 ) tais que x 1 = 0, tendo-se M f (0, x 2 ) = min N = 0. Exemplo-2: Seja g = proj 3 3 : N3 N tal que (x 1, x 2, x 3 ) x 3. A função de minimização de g é dada por M g : N 2 N tal que (x 1, x 2 ) min {y N tal que g(x 1, x 2, y) = 0} = min {y N tal que y = 0} = min {0} = 0. Ou seja, M g = zero (2). Exemplo-3: Seja a função f : N 2 N tal que (x, y) { 0 se x = y 2 1 senão A função de minimização M f é dada por M f : N N tal que x min {y N tal que f (x, y) = 0} = min { y N tal que x = y 2} { x se x é quadrado perfeito = n.d. senão. Teoremas Teorema: Toda a função µ-recursiva é parcial. Demonstração: (função injetora)... Teorema: Uma função f é µ-recursiva se e somente se é computável. Definição segundo o formalismo de Kleene O processo de minimização de uma função g é representado pela operação µy [g(s, y) = 1] que satisfaz g dada por: se g(s, i) = 0 para 0 i y em que i N f (S) = o menor y tal que g(s, y) = 1 se y existe 0, caso contrário onde 1 e 0 representam valores lógicos verdadeiro e falso, respectivamente. Comentários Comentário-1: Funções µ-recursivas são funções iniciais e todas aquelsa que podem ser obtidas a partir das funções iniciais pela aplicação de um número finito de vezes das operações de composição, recursão primitiva e minimização. Comentário-2: O operador de minimização µ falha quando aplicado a alguns argumentos e, portanto, a função µ-recursiva é parcial. 29

30 Comentário-3: A classe das funções µ-recursivas está diretamente relacionada ao teorema da incompletude de Göedel que mostra que existem funções não-computáveis. Comentário-4: Se a função pertence à classe de funções µ-recursivas então é associada ao comando condicional enquanto-faça. Para pensar... A função de Ackermann é µ-recursiva - Esta fato é conhecido como conjectura de Hilbert (1925), provado por seu aluno Wilhelm Ackerman (1928) sendo que a prova foi publicada através do artigo On Hilbert s construction of the real numbers. 30

31 6 Complexidade de problemas 4642D Teoria da Computação Complexidade de problemas BIBLIOGRAFIA HOPCROFT, John E.; MOTWANI, Rajeev; ULLMAN, Jeffrey D. Introdução à teoria de autômatos, linguagens e computação. (bibliografia básica) LEWIS, Harry. R.; PAPADIMITRIOU, Christos. H. Elementos de Teoria da Computação. (bibliografia básica) GAREY, Michael R.; JOHNSON, David S. Computers and intractability: a guide to the theory of NP-completeness. New York: W. H. Freeman, (bibliografia complementar) Série histórica Cobham (1964)... sugeriu a seguinte definição para medida de complexidade:... algumas medidas relacionadas ao trabalho físico que possibilitam estabelecer métricas do que é satisfatório... Rabin... apresentou uma definição baseada em axiomas que medem o tempo de execução. Shannos... utilizou circuitos booleanos para expressar a medida de complexidade. Para isso, assumiu que a função f associa palavras de tamanho finito à palavras de tamanho finito e a complexidade C(n) é o menor circuito booleno que computa todas as entradas de tamanho n. Conceito O objetivo da Teoria da Complexidade (ou teoria da complexidade computacional) é identificar a dificuldade computacional de funções computáveis. Para isso é utilizada a medida de complexidade definida como tempo de computação. Medida de complexidade: Compreender o significado de uma medida de complexidade implica compreender o significado de passo de uma computação. Nesse sentido, Cobham especulou sobre possíveis respostas para a pergunta: O que é um passo de uma computação? Para responder a pergunta é preciso definir o formalismo de computador a ser utilizado. A escolha usual é MT multifita. Problema resolvível: Problema para o qual é provado [matematicamente] que existe solução, ou seja, a solução pode ser representada por uma MT. 31

32 Problema tratável: Problema resolvido em tempo polinomial. Problema intratável: Problema resolvido em tempo exponencial. 6.1 Classes de problemas Foco na tratabilidade segundo a abordagem de Cobham. Classes de problemas: P = {problemas resolvíveis em tempo polinomial} NP = {problemas resolvíveis em tempo polinomial usando algoritmos não-determinísticos} EXP = {problemas resolvíveis em tempo exponencial (ou seja, 2 nc onde c é constante)} R = {problemas resolvíveis em tempo finito} Comentários Comentário-1: Segundo a classificação, os problemas tratáveis estão em P e os intratáveis em R. Comentário-2: A maioria dos problemas de decisão interessantes estão em R. Comentário-3: Programas são strings de binários, ou seja, strings de números naturais ( N). Logo, o problema de decisão é uma função cuja entrada (binário, N) retorna como saída { sim, não } ({ 0,1 }). Comentário-4: Observando a representação do problema de decisão como um string binário constatamos o problema de decisão tem infinitos bits ( R) n... Como R N isto implique que quase todos os problemas não são resolvíveis por qualquer programa. 6.2 Classe P (polinomial, MT determinística) problema tratável Uma linguagem está em P se existe uma MT determinística M e um polinômio T(n) tal que L = L(M) a MT pára e tem complexidade de tempo T(n) = O(n k ), onde k é constante. Apresentação matemática: MT Um problema P corresponde a um problema que é resolvido e sua solução representada por uma MT reconhecedora de linguagem. Exemplos: ver tema de casa, enunciado de problemas P. 32

33 6.3 Classe NP (polinomial, MT não-determinística) problema intratável Uma linguagem está em NP se existem uma MT não-determinística M e um polinômio T(n) tal que L = L(M) a MT pára e tem complexidade de tempo T(n) = O(n c ) = 2 O(log(n)). Apresentação matemática: MT Um problema NP corresponde a um problema verificável em tempo polinomial, ou seja, existe uma MT reconhecedora de linguagem que verifica a solução do problema. Verificação da solução do problema Todos os problemas NP têm uma função determinística que recebe como entrada um valor e uma prova a ser testada. Devemos ser capazes de verificar se a prova é correta em tempo polinomial (MT que realiza função ou MT verificadora). Se temos uma MT não-determinística então é fácil testar um número para determinar sua composição. Ele pode ser repartido em n-caminhos diferentes em O(log(n)) passos; então, cada um destes passos pode chamar a função efatornãotrivial (n, d) para cada d. Se qualquer um for bem sucedido então o número é composto; caso contrário é primo. Logo, a transformação de problemas NP é eficiente para descobrir a resposta, tendose uma forma de realizar a verificação do problema em tempo polinomial, para cada entrada distinta. Qual a importância da classe NP? O fato de muitos problemas importantes estão na classe NP e, por isso, existe um esforço muito grande para encontrar algoritmos que resolvam problemas NP em tempo polinomial em relação ao tamanho da entrada. Entretanto, um grande número de problemas NP resiste a tais tentativas. Se estes problemas realmente não podem ser resolvidos em tempo polinomial é uma das grandes questões abertas na Ciência da Computação. Neste contexto, se destaca a importância do conjunto NP-completo, que é subconjunto de NP e pode ser informalmente descrito como o conjunto de problemas mais difíceis problemas em NP. Exemplo 1: Determinação se um número n é um número composto. Para grandes números, isto representa um programa muito difícil de resolver de forma eficiente. A abordagem mais simples requer tempo exponecial de log(n), onde n é o número de bits da entrada. Por outro lado, uma vez encontrada um candidato de n a função a seguir pode rapidamente dizer se ele é ou não realmente um fator: l o g i c o e F a t o r N ã o T r i v i a l ( n, d ) Se n é d i v i s i v e l por d e d <> 1 e d <> n 33

34 r e t o r n a ( verdadeiro ) Senão r e t o r n a ( f a l s o ) fim se fim Se n é composto, então a função irá retornar verdadeiro para alguma entrada d. Se n é primo então a função sempre retornará falso, qualquer que seja d. Outros exemplos: ver tema de casa, enunciado de problemas NP. 6.4 Classe entre P e NP Existe algoritmos que possuem complexidade de tempo entre polinomial e exponencial, ou seja, complexidade de tempo O(n log(2n) ), por exemplo. Este algoritmos estão entre as classes P e NP. 6.5 Classe NP-completo 11 [problema intratável] Classe NP-completo: Uma linguagem está na classe NP-completo se existem uma máquina de Turing não-determinística M tal que L = L(M), ou seja, a máquina de Turing pára em tempo não-polinomial mas este tempo pode ser reduzido para polinomial em instâncias menores do problema. Teorema de Cook [classe NP-completo]. Prova matemática: Uma vez conhecido um problema NP-completo, o conceito de redução polinomial pode ser usado para mostrar que outro problema é NP-completo: se Y é um problema NP-completo e Y não é mais difícil que um problema X então X também é NPcompleto. Fato importante: Se existe um algoritmo em tempo polinomial que resolve um problema que está em NP-completo então existe um algoritmo em tempo polinomial para todos os problemas em NP. Exemplos: ver tema de casa, enunciado de problemas NP-completo. 6.6 Classe NP-difícil [problema intratável] Classe NP-difícil: Uma linguagem está na classe NP-difícil se existem uma máquina de Turing não-determinística M tal que L = L(M), ou seja, a máquina de Turing pára em tempo não-polinomial e este tempo não pode ser reduzido para polinomial em instâncias menores do problema. 11 A existência de problemas NP-completos é um fato surpreendente e fundamental. O fato foi demonstrado, por volta de 1970, por Steven Cook e Leonid Levin (independentemente). 34

35 Exemplos: ver tema de casa, enunciado de problemas NP-difícil. Comentários Problema mais difícil do que qualquer problema NP. Aplicação do problema da coloração de grafo: Problemas de escalonamento - por exemplo o problema de determinação de horário dos exames de um conjunto de disciplinas (V) sujeito a incompatibilidades (pares de disciplinas cujos exames não podem acontecer em simultâneo (E)). Qual o número de slots de tempo necessários? 6.7 Problemas de otimização versus problemas de decisão A resolução de um problema de otimização consiste na seleção da melhor solução para outro problema. Para cada problema de otimização, usualmente, está associado um problema de decisão, ou seja, um problema cuja solução é uma resposta do tipo sim/não. Exemplo de problema da classe P: problema da árvore geradora mínima Problema de otimização: Escolher a melhor solução (ou seja, a de menor peso) para o problema de determinação de uma árvore geradora (qualquer). No exemplo em questão, o problema de decisão é: Dado um valor k, existe alguma árvore geradora G com peso k? Exemplo de problema da classe NP-difícil: problema da coloração de grafo G(V, E) é uma função C : V S, sendo S um conjunto finito de cores, verificando a restrição de que vértices adjacentes são coloridos com cores diferentes. Problema de otimização: Seja o grafo G = (V, E). Dado G, determinar a coloração C tal que C(V) (o número de cores usadas) é mínimo. Problema de decisão: Seja o grafo G = (V, E). Dado G e k intero, haverá alguma coloração de G usando no máximo k-cores? 6.8 Conjectura P = NP relação entre problemas tratáveis & intratáveis O maior problema da área de complexidade é obter uma resposta para a conjectura P = NP? Isto significa, em termos teóricos, perguntar se toda função computável utilizando uma MT não-determinística é computável via uma MT determinística, em um tempo polinomial. 35

36 6.9 Teoremas Teorema: P NP Demonstração: Qualquer algoritmo determinístico para um problema de decisão pode ser entendido como um caso particular de um algoritmo não-determinístico. Seja A um algoritmo determinístico para um certo problema p 0 P. Então, existe um algoritmo não-determinístico A a partir de A tal que: 1. a etapa não-determinística escreve s = em zero passos; 2. a etapa determinística é constituída por A (ignorando a palavra s escrita na etapa 1). Sendo assim, está provado que p 0 NP uma vez que: A fornece uma resposta sim/não; A executa em tempo polinomial, logo A também executa em tempo polinomial. Teorema: NP NP Demonstração: (em aberto) 6.10 Comentários Será que NP P, ou seja, P = NP? Será que o não-determinismo é mais poderoso do que o determinismo? Em outras palavras: Será que alguns problemas que não podem ser resolvidos em tempo polinomial, por um algoritmo qualquer, podem ser resolvidos em tempo polinomial por algoritmos contendo um gerador de palpites não-determinístico? Conjectura-se que NP seja muito maior do que P, ou seja, que NP contém muitos problemas que não estão em P. Entretanto, não existe nenhum problema p 0 NP para o qual tenha sido provado que p 0 / P! A questão P = NP? permanece aberta. 36

37 7 Complexidade de algoritmos 4642D Teoria da Computação Complexidade de algoritmos BIBLIOGRAFIA CORMEM, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L. Introduction to algorithms. Cambridge: The MIT Press, (bibliografia complementar) SEDGEWICK, R.; FLAJOLET, P. An introduction to the analysis of algorithms. Wesley, Addison- 7.1 Análise de eficiência & razão de crescimento de tempo A medida de complexidade do algoritmo informa sobre o tempo de computação e é referida na bibliografia pelo termo análise de eficiência. A análise de eficiência é razão do crescimento do tempo [ de execução ] T(n) em função do tamanho da entrada n. A análise de eficiência tem foco na razão do crescimento de tempo quando n, ou seja, a análise é realizada a partir do momento que o crescimento da função estabiliza. Por exemplo: Quando x f (x) = 2log(x) cresce mais lentamente do que f (x) = x2 8 que cresce mais lentamente do que f (x) = 3x + 2 que cresce mais lentamente do que f (x) = x + 10, ou seja, 2log(x) x2 8 3x 2 x + 10 Fatos como este são melhor visualisados por gráfico e tabelas. A razão de crescimento das funções possibilita perceber a velocidade de crescimento e a dominação de uma função sobre outra. A complexidade do algoritmo é resultado da análise de eficiência,ou seja, considera-se apenas da função que cresce mais rapidamente: razão de crescimento de tempo. 37

38 7.2 Notação assintótica aplicada à limites de tempo Analisar o algoritmo significa determinar seu tempo. Defina tempo? Se o significado de tempo é sinônimo de tempo de execução (tempo do relógio) então está associado a performace. O melhor algoritmo é o que executa no menor tempo. Esta não é uma boa medida da eficiência, pois um algoritmo não pode ser melhor apenas porque é executado em menos tempo em um computador e em mais tempo em outro. Se o tempo é associado ao número de operações realizadas para uma entrada de tamanho n então esta é uma boa medida da eficiência. Neste caso, tempo é sinônimo de complexidade do algoritmo. A complexidade do algoritmo informa a razão de crescimento da função, ou seja, a relação entre o tamanho da entrada n e o número de operações realizadas T(n). Se um problema pode ser expresso em função de n ( f (n)) então também pode ser expresso através de séries assintóticas de n e log(n). Séries assintóticas não são necessariamente convergentes, mas os termos iniciais fornecem uma boa estimativa para análise de algoritmos. A notação assintótica é utilizada para representar aproximações quando n. A notação assintótica considera apenas informações relevantes sobre a relação entre o tamanho da entrada (n) e o limite de tempo de execução T(n), ou seja, quando n. Utilizando notação assintótica as funções são comparadas a partir do momento que são monotonicamente crescentes, ou seja, n 0 tal que n 0 n m f (n) f (m). As funções são comparadas com relação à ordem de crescimento assintótico e segundo limites de tempo. Notação assintótica aplicada à limites de tempo A notação O ou o - Omicron é utilizada para expressar o limite de tempo superior. A notaçãoω ou ω - Omega é utilizada para expressar o limite de tempo inferior. A notação Θ ou θ - Theta é utilizada para expressar os limite de tempo superior e inferior. 38

39 7.3 Classes de algoritmos A definição da razão de crescimento de tempo, assim como colocada, foi proposta por Knuth em Classes de algoritmos são resultado da classificação segundo a razão de crescimento de tempo. Classes de algoritmos: Big-Omega (Ω( f )), Big-Ó (O( f )), Big-Téta (Θ( f )). Big-Omega Denotada por Ω( f ). Representa a classe de todas as funções que crescem com menor velocidade do que a função f. Ω( f ) pode ser entendida com o conjunto dos limites inferiores da função porque todas as funções da classe crescem menos rapidamente ou na mesma medida de f. Ou seja, [informalmente] para todo valor n maior do que n 0, todas as funções em Ω( f ) têm valores que são menores do que o maior valor de f. Ou seja, [formalmente], n n 0, c R + tal que g Ω( f ) g(n) c f (n). Big-Ó Denotada por O( f ). Representa a classe de todas as funções que crescem com maior velocidade do que a função f. O( f ) pode ser entendida com o conjunto dos limites superiores da função, porque todas as funções da classe crescem mais rapidamente ou na mesma medida de f. Ou seja, [informalmente] para todo valor n maior do que n 0, todas as funções em Ω( f ) têm valores que são maiores do que o maior valor de f. Ou seja, [formalmente], n n 0, c R + tal que g O( f ) g(n) c f (n). Como estamos interessados na eficiência então O( f ) é foco de interesse. Big-Téta Denotada por Θ( f ). Representa a classe das funções que crescem na mesma velocidade da função f. Θ( f ) pode ser entendida como o momento onde Big-Omega e Big-Ó se sobrepõem. 39

40 Ou seja, [informalmente] para todo valor n maior do que n 0, todas as funções em Θ( f ) têm o mesmo valor de f. Ou seja, [formalmente], n n 0, c R + tal que Θ( f ) = Ω( f ) O( f ). 7.4 Encontrando Big-Ó Existem duas formas de identificar se uma função está em O( f ): pela descrição formal; pela descrição alternativa que utiliza limites. Descrição formal: n n 0, c R + tal que g O( f ) g(n) c f (n). Descrição alternativa: (por limites) c R tal que g O( f ) lim n g(n) f (n) = c ou c R tal que g O( f ) lim g(n) = 0 n f (n) Ou seja, se o limite de g(n)/ f (n) é um número real menor do que então g está em O( f ). 7.5 Encontrando Big-Omega Descrição formal: n n 0, c R + tal que g Ω( f ) g(n) c f (n). Descrição alternativa: (por limites) c R tal que g ( f ) lim n g(n) f (n) = 0 ou c R tal que g ( f ) lim g(n) = n f (n) 7.6 Encontrando Big-Téta Descrição formal: n n 0, c R + tal que Θ( f ) = Ω( f ) O( f ). Descrição alternativa: (por limites) c R tal que g ( f ) lim n g(n) f (n) = 1. 40

I.2 Introdução a Teoria da Computação

I.2 Introdução a Teoria da Computação I.2 Introdução a Teoria da Computação O que é? Fundamento da Ciência da Computação Tratamento Matemático da Ciência da Computação Estudo Matemático da Transformação da Informação Qual sua importância?

Leia mais

Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade

Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade Cursos: Bacharelado em Ciência da Computação e Bacharelado em Sistemas de Informação Disciplinas: (1493A) Teoria da Computação e Linguagens Formais, (4623A) Teoria da Computação e Linguagens Formais e

Leia mais

Máquinas Universais. Máquina de Turing. Celso Olivete Júnior.

Máquinas Universais. Máquina de Turing. Celso Olivete Júnior. Máquinas Universais Máquina de Celso Olivete Júnior [email protected] http://www2.fct.unesp.br/docentes/dmec/olivete/ Roteiro Hipótese de Church - Máquinas Universais: Máquina de Máquina de : Noção

Leia mais

Teoria da Computação. Computabilidade e complexidade computacional

Teoria da Computação. Computabilidade e complexidade computacional Teoria da Computação Computabilidade e complexidade computacional 1 Computabilidade e Complexidade Computabilidade: verifica a existência de algoritmos que resolva uma classe de linguagens trata a possibilidade

Leia mais

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Marcos Castilho. DInf/UFPR. 16 de maio de 2019 16 de maio de 2019 Motivação Quais são os limites da computação? O que é um Problema de decisão? Um problema de decisão é um conjunto de perguntas, cada uma das quais tem um SIM ou um NÃO como resposta.

Leia mais

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação bas eado em material produzido pelo prof Olinto Jos é Varela Furtado Ricardo Azambuja Silveira INE-CTC-UFSC E-Mail: [email protected]

Leia mais

Teoremas de Incompletude de Gödel e os Fundamentos da Matemática

Teoremas de Incompletude de Gödel e os Fundamentos da Matemática Teoremas de Incompletude de Gödel e os Fundamentos da Matemática Rogério Augusto dos Santos Fajardo MAT554 - Panorama de Matemática 6 e 8 de agosto de 2018 Lógica e Teoria dos Conjuntos servem como: Lógica

Leia mais

COMPUTABILIDADE 3. Funções Parciais Recursivas

COMPUTABILIDADE 3. Funções Parciais Recursivas José Carlos Costa DMA-UMinho 2 de Dezembro de 2011 1/17 Licenciatura em Ciências da Computação COMPUTABILIDADE 3. Funções Parciais Recursivas José Carlos Costa Dep. Matemática e Aplicações Universidade

Leia mais

Linguagens recursivamente enumeráveis

Linguagens recursivamente enumeráveis Linguagens recursivamente enumeráveis Uma palavra x Σ é aceite por uma máquina de Turing M ( x L(M)) se M iniciando com a palavra x na fita e no estado inicial, pára num estado final. Caso contrário, M

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Linguagens Formais e Autômatos - P. Blauth Menezes 1 Linguagens

Leia mais

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar

Leia mais

1 INTRODUÇÃO E CONCEITOS BÁSICOS

1 INTRODUÇÃO E CONCEITOS BÁSICOS 1 INTRODUÇÃO E CONCEITOS BÁSICOS Inicia com uma breve história do surgimento e do desenvolvimento dos conceitos, resultados e formalismos nos quais a Teoria da Computação é baseada. Formalização dos conceitos

Leia mais

Matemática Discreta para Ciência da Computação

Matemática Discreta para Ciência da Computação Matemática Discreta para Ciência da Computação P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação

Leia mais

Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel Introdução.

Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel Introdução. Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel 8.1 - Introdução. Como observado no capítulo anterior, podemos substituir a definição informal de procedimento pela

Leia mais

Teoria da Computação

Teoria da Computação Ciência da Computação Teoria da Computação (ENG10395) Profa. Juliana Pinheiro Campos E-mail: [email protected] Máquinas Universais Máquinas Universais podem ser entendidas de duas formas: Se é capaz

Leia mais

Linguaguens recursivamente enumeráveis e recursivas

Linguaguens recursivamente enumeráveis e recursivas Linguaguens recursivamente enumeráveis e recursivas Uma linguagem diz-se recursivamente enumerável (r.e) ou semi-decidível se é aceite por uma máquina de Turing. SD: classe de linguagens recursivamente

Leia mais

Aula 10: Decidibilidade

Aula 10: Decidibilidade Teoria da Computação Aula 10: Decidibilidade DAINF-UTFPR Prof. Ricardo Dutra da Silva Definição 10.1. Um problema de decisão P é um conjunto de questões para as quais as respostas são sim ou não. Exemplo

Leia mais

O que é a Teoria em Ciência da Computação. Introdução à Ciência da Computação Mário S. Alvim

O que é a Teoria em Ciência da Computação. Introdução à Ciência da Computação Mário S. Alvim O que é a Teoria em Ciência da Computação Introdução à Ciência da Computação Mário S. Alvim 2018-10-05 1 O que é computação? Algumas tentativas de definir o que é computação : É o ato de raciocinar seguindo

Leia mais

ECO026 TEORIA DA COMPUTAÇÃO. Prof: Rafael Santos Site:

ECO026 TEORIA DA COMPUTAÇÃO. Prof: Rafael Santos   Site: ECO026 TEORIA DA COMPUTAÇÃO Prof: Rafael Santos Email: [email protected] Site: http://sites.google.com/site/rafafic Máquinas de Turing Uma linguagem Turing-reconhecível (Linguagem recursivamente enumeravel),

Leia mais

Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente

Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente ESIN/UCPel 058814 Linguagens Formais e Autômatos TEXTO 5 Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente Prof. Luiz A M Palazzo Maio de 2007 0. Introdução A Ciência da Computação

Leia mais

Aula 10: Decidibilidade

Aula 10: Decidibilidade Teoria da Computação Segundo Semestre, 2014 Aula 10: Decidibilidade DAINF-UTFPR Prof. Ricardo Dutra da Silva Definição 10.1. Um problema de decisão P é um conjunto de questões para as quais as respostas

Leia mais

Resolução Exe 2.12 Monolítico Recursivo

Resolução Exe 2.12 Monolítico Recursivo Resolução Exe 2.12 Monolítico Recursivo Recursivo P R é R 1 onde R 1 def (se T1 então R 2 senão R 3 ) R 2 def F; R 3 R 3 def (se T2 então R 4 senão R 7 ) R 4 def G; R 5 R 5 def (se T1 então R 7 senão R

Leia mais

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000)

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000) Teoria da Computação Referência Teoria da Computação (Divério, 2000) 1 L={(0,1)*00} de forma que você pode usar uma Máquina de Turing que não altera os símbolos da fita e sempre move a direita. MT_(0,1)*00=({0,1},{q

Leia mais

Computabilidade e Complexidade (ENG10014)

Computabilidade e Complexidade (ENG10014) Sistemas de Informação Computabilidade e Complexidade (ENG10014) Profa. Juliana Pinheiro Campos E-mail: [email protected] Decidibilidade O estudo da decidibilidade objetiva determinar a solucionabilidade

Leia mais

SCC-5832 Teoria da Computação

SCC-5832 Teoria da Computação Teoria da Computação SCC-5832 Teoria da Computação João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos

Leia mais

Máquinas de Turing - Computabilidade

Máquinas de Turing - Computabilidade BCC244-Teoria da Computação Prof. Lucília Figueiredo Lista de Exercícios 03 DECOM ICEB - UFOP Máquinas de Turing - Computabilidade 1. Seja L uma linguagem não livre de contexto. Mostre que: (a) Se X uma

Leia mais

PCC104 - Projeto e Análise de Algoritmos

PCC104 - Projeto e Análise de Algoritmos PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 5 de dezembro de 2017 Marco Antonio

Leia mais

A Teoria Matemática que serviu como Base para Turing.

A Teoria Matemática que serviu como Base para Turing. A Teoria Matemática que serviu como Base para Turing. Os Teoremas de Incompletude de Godel, de 1931, representam o fim da idade romântica da Matemática. Antes de Godel, fazia parte de um amplo projeto

Leia mais

sumário 1 introdução e conceitos básicos 1 2 noções de lógica e técnicas de demonstração introdução à matemática discreta...

sumário 1 introdução e conceitos básicos 1 2 noções de lógica e técnicas de demonstração introdução à matemática discreta... sumário 1 introdução e conceitos básicos 1 1.1 introdução à matemática discreta... 2 1.2 conceitos básicos de teoria dos conjuntos... 3 1.2.1 conjuntos...3 1.2.2 pertinência...5 1.2.3 alguns conjuntos

Leia mais

Decidibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

Decidibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Decidibilidade Mário S Alvim (msalvim@dccufmgbr) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S Alvim (msalvim@dccufmgbr) Decidibilidade DCC-UFMG (2018/02) 1 / 45 Decidibilidade:

Leia mais

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior. LFA Aula 02 Linguagens regulares - introdução 28/09/2015 Celso Olivete Júnior [email protected] 1 Na aula passada... Visão geral Linguagens regulares expressões regulares autômatos finitos gramáticas

Leia mais

SCC Teoria da Computação e Linguagens Formais

SCC Teoria da Computação e Linguagens Formais SCC-0205 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis/ [email protected]

Leia mais

Computabilidade e Complexidade (ENG10014)

Computabilidade e Complexidade (ENG10014) Sistemas de Informação Computabilidade e Complexidade (ENG10014) Profa. Juliana Pinheiro Campos E-mail: [email protected] Modelo de computação poderoso concebido pelo matemático britânico Alan Turing

Leia mais

Linguagens Formais e Autômatos Decidibilidade

Linguagens Formais e Autômatos Decidibilidade Linguagens Formais e Autômatos Decidibilidade Andrei Rimsa Álvares Sumário Introdução A tese de Church-Turing Máquinas de Turing e problemas de decisão Máquina de Turing Universal O problema da parada

Leia mais

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE. DEINFO - UFRPE Julho, 2014 Motivação Introdução O que pode ser computado? E mais intrigantemente, o que não pode ser computado? Motivação Introdução O que pode ser computado? E mais intrigantemente, o

Leia mais

Modelos de Computação Folha de trabalho n. 10

Modelos de Computação Folha de trabalho n. 10 Modelos de Computação Folha de trabalho n. 10 Nota: Os exercícios obrigatórios marcados de A a D constituem os problemas que devem ser resolvidos individualmente. A resolução em papel deverá ser depositada

Leia mais

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Máquina de Turing Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa [email protected] Teoria da Computação Ciência da Computação

Leia mais

Lógica e Computação. Uma Perspectiva Histórica

Lógica e Computação. Uma Perspectiva Histórica Lógica e Computação Uma Perspectiva Histórica Alfio Martini Facin - PUCRS A Lógica na Cultura Helênica A Lógica foi considerada na cultura clássica e medieval como um instrumento indispensável ao pensamento

Leia mais

Teoria da Computação Aula 02 Introdução

Teoria da Computação Aula 02 Introdução Teoria da Computação Aula 02 Introdução Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Alfabeto Um alfabeto é um conjunto finito de símbolos ou caracteres, representado pela letra sigma ( ). Portanto:

Leia mais

Teoria da Computação. Computabilidade

Teoria da Computação. Computabilidade Cristiano Lehrer Introdução O objetivo do estudo da solucionabilidade de problemas é investigar a existência ou não de algoritmos que solucionem determinada classe de problemas. Ou seja, investigar os

Leia mais

CT-200 Fundamentos de Linguagens Formais e Automata - Aula 01 - In...

CT-200 Fundamentos de Linguagens Formais e Automata - Aula 01 - In... 1 de 14 14/3/2010 09:28 CT-200 Fundamentos de Linguagens Formais e Automata Aula 01 - Introdução Primeira aula (updated just now by YourName) Orientações Gerais: Horários e Avaliação Horários: 3 tempos

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Linguagens Formais e Autômatos - P. Blauth Menezes 1 Linguagens

Leia mais

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018 22 de Fevereiro de 2018 Motivação O que é um computador? O que é um algoritmo? Para que serve um algoritmo? Quando um algoritmo é bom? A análise de um algoritmo depende do computador? Motivação Em teoria

Leia mais

SCC Introdução à Teoria da Computação

SCC Introdução à Teoria da Computação SCC-0505 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis/ [email protected]

Leia mais

Capítulo 2: Procedimentos e algoritmos

Capítulo 2: Procedimentos e algoritmos Capítulo 2: Procedimentos e algoritmos Para estudar o processo de computação de um ponto de vista teórico, com a finalidade de caracterizar o que é ou não é computável, é necessário introduzir um modelo

Leia mais

Draft-v0.1. Máquinas de Turing Máquinas de Turing

Draft-v0.1. Máquinas de Turing Máquinas de Turing 13 Máquinas de Turing A necessidade de formalizar os processos algorítmicos levou, nas décadas 20 e 30 do século XX, a diversos estudos, entre os quais os de Post, Church e Turing, com vista a estudo formal

Leia mais

SCC Capítulo 4 Máquinas de Turing e a Teoria da Computabilidade

SCC Capítulo 4 Máquinas de Turing e a Teoria da Computabilidade SCC-505 - Capítulo 4 Máquinas de Turing e a Teoria da Computabilidade João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação - Universidade de

Leia mais

Redutibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

Redutibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Redutibilidade Mário S. Alvim ([email protected]) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S. Alvim ([email protected]) Redutibilidade DCC-UFMG (2018/02) 1 / 46 Redutibilidade:

Leia mais

1 introdução. capítulo. O que é uma solução computável? Quais são os limites do que pode ser computado? Existem problemas sem solução computacional?

1 introdução. capítulo. O que é uma solução computável? Quais são os limites do que pode ser computado? Existem problemas sem solução computacional? capítulo 1 introdução A ciência da computação é o conhecimento sistematizado da computação. Sua origem é milenar, tendo se desenvolvido em diferentes regiões e épocas. A teoria da computação é a base fundamental

Leia mais

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados. Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados. José Lucas Rangel 9.1 - Introdução. Como já vimos anteriormente, a classe das linguagens sensíveis ao contexto (lsc) é uma

Leia mais

2. DISCIPLINA REQUISITO (RECOMENDAÇÃO) 3. INDICAÇÃO DE CONJUNTO (BCC) Obrigatória TEORIA: 60 LABORATÓRIO: 30

2. DISCIPLINA REQUISITO (RECOMENDAÇÃO) 3. INDICAÇÃO DE CONJUNTO (BCC) Obrigatória TEORIA: 60 LABORATÓRIO: 30 Universidade Federal do ABC Rua Santa Adélia, 166 - Bairro Bangu - Santo André - SP - Brasil CEP 09.210-170 - Telefone/Fax: +55 11 4996-3166 1. CÓDIGO E NOME DA DISCIPLINA MC3106 - LINGUAGENS FORMAIS E

Leia mais

Teoria da Computação

Teoria da Computação Ciência da Computação Teoria da Computação (ENG10395) Profa. Juliana Pinheiro Campos E-mail: [email protected] Funções recursivas Os formalismos usados para especificar algoritmos podem ser classificados

Leia mais

Teoria da Computação. Computabilidade e complexidade computacional

Teoria da Computação. Computabilidade e complexidade computacional Teoria da Computação Computabilidade e complexidade computacional 1 Computabilidade e Complexidade Computabilidade: verifica a existência de algoritmos que resolva uma classe de linguagens trata a possibilidade

Leia mais

Teoria da Computação. Capítulo 1. Máquina de Turing. Prof. Wanderley de Souza Alencar, MSc.

Teoria da Computação. Capítulo 1. Máquina de Turing. Prof. Wanderley de Souza Alencar, MSc. Teoria da Computação Capítulo 1 Máquina de Turing Prof. Wanderley de Souza Alencar, MSc. Pauta 1. Introdução 2. Definição de Máquina de Turing 3. Variações de Máquina de Turing 4. A Tese de Church-Turing

Leia mais

Turma A - Segundas e Quartas das 8h30min - 10h10min Turma B - Segundas e Quartas das 10h30min - 12h10min

Turma A - Segundas e Quartas das 8h30min - 10h10min Turma B - Segundas e Quartas das 10h30min - 12h10min UNIVERSIDADE DEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA TEÓRICA 2 Semestre 2008 04/08/2008 a 12/12/2008 DISCIPLINA: TEORIA DA COMPUTAÇÃO N CÓDIGO: INF05501. Horário:

Leia mais

Linguagens Formais e Problemas de Decisão

Linguagens Formais e Problemas de Decisão Linguagens Formais e Problemas de Decisão Mário S. Alvim ([email protected]) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S. Alvim ([email protected]) Linguagens Formais e Problemas

Leia mais

Modelos de Computação

Modelos de Computação Modelos de Computação 2.ano LCC e LERSI URL: http://www.ncc.up.pt/~nam/aulas/0405/mc Escolaridade: 3.5T e 1P Frequência:Semanalmente serão propostos trabalhos aos alunos, que serão entregues nas caixas

Leia mais

Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação

Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação Universidade Federal de Santa Maria Disciplina de Teoria da Computação Quais são as capacidades e limitações fundamentais dos computadores? Funções Computáveis Algoritmo: descrição finitade uma computação

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo Proposta por Alan Turing em 1936; É universalmente conhecida e aceita como formalização de algoritmo; Teoria

Leia mais

Capítulo A máquina de Turing (TM) padrão Combinações de máquinas de Turing A Tese de Turing. ADC/TC/Cap.9/ /LEI/DEIFCTUC 375

Capítulo A máquina de Turing (TM) padrão Combinações de máquinas de Turing A Tese de Turing. ADC/TC/Cap.9/ /LEI/DEIFCTUC 375 Capítulo 9 Máquinas de Turing 9.1. A máquina de Turing (TM) padrão 9.2. Combinações de máquinas de Turing 9.3. A Tese de Turing ADC/TC/Cap.9/2009-10/LEI/DEIFCTUC 375 Linguagens regulares Autómatos finitos

Leia mais

formais e autómatos Linguagens g recursivas e recursivamente enumeráveis Gramáticas não-restringidas

formais e autómatos Linguagens g recursivas e recursivamente enumeráveis Gramáticas não-restringidas Capítulo 11 Uma hierarquia de linguagens formais e autómatos 11.1. Linguagens g recursivas e recursivamente enumeráveis. 11.2. Gramáticas não-restringidas 11.3. Gramáticas e linguagens dependentes do contexto

Leia mais

Teoria da Computação. Aula 01

Teoria da Computação. Aula 01 Teoria da Computação Aula 01 Celso Olivete Júnior [email protected] www.fct.unesp.br/docentes/dmec/olivete/tc 1 Professor Celso Olivete Júnior Bacharelado em Ciência da Computação (Unoeste-2002) Mestrado

Leia mais

Linguagens Formais e Autômatos Apresentação da Disciplina

Linguagens Formais e Autômatos Apresentação da Disciplina Linguagens Formais e Autômatos Apresentação da Disciplina Andrei Rimsa Álvares Computação Histórico da Computação O que pode ser computado? Ábaco China Aprox. 3500 a.c. Máquina de Babbage Inglaterra 1823

Leia mais

Máquinas de Turing para construção: Foram encontrados dois modelos que se destacaram em nossas pesquisas.

Máquinas de Turing para construção: Foram encontrados dois modelos que se destacaram em nossas pesquisas. Máquina de Turing É um dispositivo imaginário que formou a estrutura para fundamentar a ciência da computação moderna. Seu inventor, o matemático Alan Mathison Turing, mostrou que a computação das operações

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Linguagens Formais e Autômatos - P. Blauth Menezes 1 Linguagens

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 01 Apresentação da Disciplina Prof.ª Danielle Casillo PLANO DE ENSINO Nome: Teoria da Computação Créditos:

Leia mais

Matemática Discreta para Ciência da Computação

Matemática Discreta para Ciência da Computação Matemática Discreta para Ciência da Computação P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação

Leia mais

Teoria da Computação. Máquinas Universais Máquina com Pilhas

Teoria da Computação. Máquinas Universais Máquina com Pilhas Máquinas Universais Máquina com Pilhas Cristiano Lehrer Introdução A Máquina com Pilhas diferencia-se das Máquinas de Turing e de Post principalmente pelo fato de possuir uma memória de entrada separada

Leia mais

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO Aula 18 Cap 4.2 - O Problema da Parada Profa. Ariane Machado Lima [email protected] 1 Nas últimas aulas Tese de Church-Turing Problemas computacionais descritos

Leia mais

LINGUAGENS FORMAIS E AUTÔMATOS

LINGUAGENS FORMAIS E AUTÔMATOS LINGUGENS FORMIS E UTÔMTOS Introdução reve Histórico Em 1936, lan Turing (matemático) propôs a possibilidade de se construir um computador digital através da formalização de um procedimento em tempo finito.

Leia mais

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ. Linguagens O conceito de linguagem engloba uma variedade de categorias distintas de linguagens: linguagens naturais, linguagens de programação, linguagens matemáticas, etc. Uma definição geral de linguagem

Leia mais

Funções Recursivas. Prof.: Edson Holanda Teoria da computação - Diverio e Menezes

Funções Recursivas. Prof.: Edson Holanda Teoria da computação - Diverio e Menezes Funções Recursivas Prof.: Edson Holanda [email protected] Teoria da computação - Diverio e Menezes Tipos de Formalismos Operacional Define-se uma máquina abstrata, baseada em estados, em instruções

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo Diferencia-se das máquinas de Turing e Post principalmente pelo fato de possuir a memória de entrada separada

Leia mais

Teoria da Computação Aula 01 Revisão de Conjuntos

Teoria da Computação Aula 01 Revisão de Conjuntos Teoria da Computação Aula 01 Revisão de Conjuntos Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Conjuntos Conjunto e uma estrutura que agrupa objetos e constitui uma base para construir estruturas

Leia mais

Melhores momentos AULA PASSADA. Complexidade Computacional p. 136

Melhores momentos AULA PASSADA. Complexidade Computacional p. 136 Melhores momentos AULA PASSADA Complexidade Computacional p. 136 Configurações controle q 7 cabeça 1 0 1 1 0 1 1 1 fita de leitura e escrita Configuração 1 0 1q 7 1 0 1 1 1 Complexidade Computacional p.

Leia mais

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Máquina de Turing Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa [email protected] Teoria da Computação Ciência da Computação

Leia mais

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino Linguagens Formais e Autômatos Apresentação do Plano de Ensino Linguagens Formais e Autômatos LFA Código - CMP4145 Turma A01 Engenharia da Computação e Ciência da Computação Horário: Segunda, Terça e Quinta.

Leia mais

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Máquina de Turing Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa [email protected] Teoria da Computação Ciência da Computação

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Contextualização Prof.ª Aracele Garcia de Oliveira Fassbinder IFSULDEMINAS Campus Muzambinho Muzambinho, Fevereiro de 2012 Sobre esta disciplina O que é uma linguagem formal?

Leia mais

Máquinas de Turing: uma introdução

Máquinas de Turing: uma introdução Máquinas de Turing: uma introdução Nelma Moreira Armando Matos Departamento de Ciência de Computadores Faculdade de Ciências, Universidade do Porto email: {nam,acm}@ncc.up.pt 1996 Revisão: Maio 2001 1

Leia mais

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais Cursos: Bacharelado em Ciência da Computação e Bacharelado em Sistemas de Informação Disciplinas: (1493A) Teoria da Computação e Linguagens Formais, (4623A) Teoria da Computação e Linguagens Formais e

Leia mais