Linguagens Formais e Autómatos Semana #1 September, 12 2011, 19:51 Slides : LFA-PL/intro11.pdf Apresentação da disciplina : • Objectivos e motivação • Conteudo • Organização das aulas • Bibliografia • Avaliação Nesta aula : • Notações matemáticas e definições : Cadeias e Linguagens. • Prova por construção • Prova por contradição • Prova por indução 1. Prova por construção As provas por construção são uteis para demostrar que algum objecto (matemático) existe. Para realizar a prova mostra-se uma maneira de contruir o objecto. Por exemplo o teorema seguinte pode ser provado por construção. Definição: Um grafo é dito k-regular se todos os nós são de grau k. Teorema: Para todos os valores pares n > 2 existe um grafo 3-regular com n nós. Prova: Um grafo G = (V, F) pode ser construído a do conjunto de nós V = {0, 1, ..., n − 1} e o conjunto de ligações : E = {{i, i + 1} | 0 ≤ i ≤ n − 2} ∪ {n − 1, 0} ∪ {{i, i + n/2} | 0 ≤ i ≤ n/2 − 1} (1) O grafo resultante é 3-regular. 2. Prova por contradição A prova por contradição consiste a mostrar que se se assumir √ que o teorema é falso, chega-se a uma situação obviamente absurda. Por exemplo para provar que 2 é um irracional, vamos mostrar que se não for√o caso chegamos a uma situação impossível. Se 2 for um racional, existe dois números inteiros n e m tais que √ 2= n m (2) onde n/m é uma fracção reduzida (logo n e m não podem ser ambos pares). Podemos elevar ao quadrado e multiplicar por m2 ambos os lados da equação : 2m2 = n2 (3) Podemos concluir logo que n2 é par e que n é também par. Se n for par, podemos o subtituir por 2k : 2m2 = 4k2 ⇔ m2 = 2k2 o que implica que m2 e m são pares. Isto é contraditório com as nossas hipoteses inicias. 1 (4) 3. Prova por indução A prova por indução é usada para mostrar que uma propriedade P applica-se a um conjunto infinito de elementos ordenados. Primeiro mostra-se que a propriedade é verificada para o primeiro elemento do conjunto (é o caso básico) : Provar que P(1) é verdadeiro. A seguir mostra-se que assumindo que a proriedade é verdadeira para P(k) então é também verdadeira para P(k + 1). A prova por indução é muitas vezes usada para provar que um programa (função) produz efectivamente o resultado esperado. Por exemplo, para cacular as mensalidades de um emprestimo. Seja D o valor da dívida, e T a taxa anual do emprestimo e m o valor da mensalidade. Para simplificar usamos a variável k que corresponde ao factor multiplicativo mensal (k = T/12 + 1). Seja Dt o valor da dívida no mês t. Em cada mês, o valor da dívida varia : • Dt aumenta devido aos juros • Dt diminua devido as mensalidades pagas. O valor de Dt é dado por : D0 = D, D1 = kD0 − m, D2 = kD1 − m etc ... De modo geral temos : Dt = Dkt − m kt − 1 k−1 (5) Para provar que esta formula é correcta vamos numa primeira fase verificar que é correcta para t = 0 : D0 = Dk0 − m k0 − 1 =D k−1 (6) que é correcto. Este é o primeiro passo da prova, o caso básico. Temos que mostrar agora o passo de indução. Assumindo que a formula é correcta para t = z, é correcta para t = z + 1. Sabemos que Dt+1 = Dt k − m (7) logo : Dz+1 = Dkz − m kz − 1 k−1 k − m = Dkz+1 − m kz+1 − k k−1 kz+1 − 1 −m = Dkz+1 − m k−1 k−1 k−1 (8) o passo de indução fica provado, a formula é portanto correcta. 4. Exercícios 4.1. Comprimento de cadeias O comprimento de uma palavra x é |x|, definido recursivamente da seguinte forma : • Para x = λ temos |x| = 0 • Para x = au|u ∈ Σ∗ e a ∈ Σ temos |x| = 1 + |u|. Mostre que ∀x, y ∈ Σ∗ |xy| = |x| + |y|. 4.2. Cadeia e prefixo Escrevemos p(x, y) se x é prefixo de y isto é se ∃z ∈ Σ∗ tal que y = xz. Mostre que para quaisquer x, y, z ∈ Σ, se tem : 1. p(x, y) ⇒ |x| ≤ |y|. 2. p(x, x) 3. p(x, y) ∧ p(y, z) ⇒ p(x, z) 4. p(x, y) ∧ p(y, x) ⇒ x = y. 2 4.3. Palavra inversa A inversa de uma palavra x é uma palavra i(x) definida recursivamente da seguinte forma : • x = λ ⇒ i(λ) = λ. • x = au | u ∈ Σ∗ , a ∈ Σ ⇒ i(au) = i(u)a. Mostre que para quaisquer x, w ∈ Σ∗ , se tem : 1. i(wx) = i(x)i(w), 2. i(i(w)) = w, w ∈ Σ∗ 3. i(wn ) = (i(w))n 4. 3