Prova 1 de INF1626 Linguagens Formais e Autômatos

Documentos relacionados
INF1626 Linguagens Formais e Autômatos em

Prova 2 de INF1626 Linguagens Formais e Autômatos

Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes

Lema do Bombeamento Operações Fechadas sobre LR s Aplicações

Linguagens Livres de Contexto

Segunda Lista de Exercícios 2004/2...

Prova 1 de INF1626 Linguagens Formais e Autômatos

Lema do Bombeamento Operações Fechadas sobre LR s Aplicações

Linguagens Não-Regulares

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo

SCC-ICMC-USP. Trabalho em Grupo 1 SCC-0205

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

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

Expressões regulares

LINGUAGENS FORMAIS E AUTÔMATOS. Prova 2-10/06/ Prof. Marcus Ramos

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos

Modelos de Computação

Linguagens Formais e Autômatos P. Blauth Menezes

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

Folha 3 - Análise léxica

Gramáticas e Linguagens Independentes de Contexto

Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Curso de Ciências de Computação

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

IBM1088 Linguagens Formais e Teoria da

Expressões e Gramáticas Regulares e Autómatos Finitos

Lema do Bombeamento Linguagens Livres de Contexto

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

Linguagens Formais - Preliminares

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

a * Lema do Bombeamento Linguagens regulares e não-regulares

Gramática. Gramática. Gramática

O que é Linguagem Regular. Um teorema sobre linguagens regulares. Uma aplicação do Lema do Bombeamento. Exemplo de uso do lema do bombeamento

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Como construir um compilador utilizando ferramentas Java

Lema do Bombeamento para Linguagens Livres do Contexto

Autómatos de Pilha e Linguagens Livres de Contexto

Faculdade de Computação

Linguagens Formais e Problemas de Decisão

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

Conceitos Básicos. Vocabulário Cadeias Linguagens Problema

Linguagens Regulares. Prof. Daniel Oliveira

1 Expressões Regulares e Linguagens

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

AF Não-determinísticos Equivalência entre AFDN e AFD Equivalência entre AF e GR (H&U, 1969 e 1979), (H;M;U, 2001) e (Menezes, 2002) 1

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Linguagens Formais e Autômatos (LFA)

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

AF Não-determinísticos Equivalência entre AFDN e AFD Equivalência entre AF e GR (H&U, 1969 e 1979), (H;M;U, 2001) e (Menezes, 2002) 1

Linguagens Formais e Autômatos P. Blauth Menezes

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

Universidade Federal do Rio de Janeiro Departamento de Ciência da Computação

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Definições Hierarquia de Chomsky Exemplos de gramáticas. Gramáticas. Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas

SCC Capítulo 2 Linguagens Livres de Contexto e Autômatos de Pilha (versão 2)

Histórico e motivação

LINGUAGENS FORMAIS E AUTÔMATOS

a n Sistemas de Estados Finitos AF Determinísticos

LFA Aula 05. AFND: com e sem movimentos 05/12/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Autómatos Finitos Determinísticos (AFD)

Apêndice A. Pseudo-Linguagem

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos

Folha 4.2 Análise sintática ascendente

Linguagens Formais e Autômatos (LFA)

Alfabeto, Cadeias, Operações e Linguagens

COMPILADORES. Revisão Linguagens formais Parte 01. Geovane Griesang

Fundamentos da Teoria da Computação

Folha 2 Autómatos e respectivas linguagens

Aula de 28/10/2013. sticas; Implementação. em Ruby

Linguagens Formais e Autômatos

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

LR's: Lema do Bombeamento e Propriedades de Fechamento

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Expressões Regulares e Gramáticas Regulares

1 INTRODUÇÃO E CONCEITOS BÁSICOS

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Introdução Definição Conceitos Básicos de Linguagem

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

Programação de Computadores

Propriedades das Linguagens Livres do Contexto

Gramáticas ( [HMU00], Cap. 5.1)

Análise Sintática II: Analisadores Descendentes Preditivos

Linguagens Formais e Autômatos P. Blauth Menezes

LINGUAGENS FORMAIS Modelos Determinísticos e Não Determinísticos. Usam-se modelos matemáticos para representar eventos (fenômenos) do mundo real.

Compiladores Aula 4. Celso Olivete Júnior.

a * Expressões Regulares (ER) Conversão de AF para ER no JFLAP Equivalências entre AFD, AFND, AF-, ER, GR

Estruturas de Dados em Python

MAC-4722 Linguagens, Autômatos e Computabilidade Lista L3

Problema A Codificação Símbolos Dado um inteiro n, n é N representação de inteiros 0,1,...,b - 1 numa base b Dado um grafo G, G é conexo?

Definições Exemplos de gramáticas

Apostila 02. Objetivos: Estudar os autômatos finitos Estudar as expressões regulares Estudar as gramáticas regulares Estudar as linguagens regulares

Algoritmos. Conceitos e Comandos

Expressões Regulares. Tiago Alves de Oliveira

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

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Exercicios. 7.2 Quais das seguintes afirmações são verdadeiras? Justifica. (d) abcd L((a(cd) b) )

Transcrição:

Prova 1 de INF1626 Linguagens Formais e Autômatos Guia de correção proposto pelos professores (Clarisse e Bruno) Algumas das questões a seguir admitem várias respostas corretas. Este documento apenas dá exemplos de respostas consideradas corretas. Caso você tenha dado uma resposta diferente da apresentada aqui para uma questão qualquer e não tenha obtido o total de pontos da questão, compare as soluções e procure na diferença o motivo da perda de pontos. A pontuação das questões e critério de correção adotado estão no final. Questão 1 Seja a EBNF abaixo, descrevendo parte das regras sintáticas para expressar a definição de funções ('functions') na linguagem de programação C. Para facilitar o seu entendimento, quaisquer símbolos precedidos por '\' identificam um caso de símbolo reservado da própria EBNF (por exemplo '>', '<','[',']', etc.) que também faz parte das expressões válidas para a definição de funções em C (por exemplo \< ::= <, \{ ::= {, e assim por diante). <function> ::= <type> <literal> ([<params>]) \{ {<declarations>} \} <params> ::= <type> <literal> <type> <literal>; <params> <declarations> ::= <type> <literal>; <literal> = <value>; <literal>; <value> ::= TRUE FALSE <literal> {<number>} <type> ::= bool int <literal> ::= {<letter>} <letter>{<number>}[<literal>] <number> ::= 0 1 2 3 4 5 6 7 8 9 <letter> ::= a b c d e f g h i j k l m n o p q r s t u v w x y z ** Lembrete: Na notação acima, '[ ]' é o indicador de opcionalidade; '{ }' é o indicador de repetição de 1 a n vezes; '< >' é o indicador de símbolo não-terminal; '::=' é o indicador de produção; ' ' é o indicador de alternativas de produção para um mesmo não-terminal. (a) Utilizando a notação α β onde: α é um símbolo não-terminal é o indicador de produção (ou reescrita) do símbolo não-terminal à sua esquerda e β é uma cadeia de símbolos terminais ou não-terminais separados por um espaço em branco (por exemplo 'a B', ou 'a b A', ou 'a B A', etc.) escreva as regras de produção de uma gramática que define exatamente a mesma linguagem que a EBNF acima (ou seja, que define quais são as sentenças sintaticamente corretas que podem ser usadas para expressar 'function' em C). Para simplificar, vamos admitir as seguintes duas regras correspondentes às definições de <number> e <letter>, respectivamente: Number -> 0..9 Letter -> a..z 1. Letter a..z 2. Number 0..9 3. Letters Letter Letter Letters 4. Numbers Number Number Numbers 5. Literal Letters Letter Numbers Letter Numbers Literal 6. Type bool int 7. Value true false Literal Numbers 8. Declaration Type Literal ; Literal = Value ; Literal ; 9. Declarations Declaration Declaration Declarations

10. Params Type Literal Type Literal ; Params 11. Function Type Literal ( ) { Declarations } Type Literal ( Params ) { Declarations } A mesma gramática acima pode ser escrita assim: 1. A a..z 2. B 0..9 3. Z A A Z 4. Y B B Y 5. L Z A Y A Y L 6. T bool int 7. V true false L Y 8. X T L ; L = V ; L ; 9. D X X D 10. P T L T L ; P 11. S T L ( ) { D } T L ( P ) { D } Estão também implicitamente definidos nas duas gramáticas: O vocabulário da linguagem: a..z, 0..9, bool, int, true, false, (, {, }, ), =, ; O símbolo inicial: Function (ou S) Os símbolos não-terminais: Letter (ou A), Number (ou B), Letters (ou Z), Numbers (ou Y), Literal (ou L), Type (ou T), Value (ou V), Declaration (ou X), Declarations (ou D), Params (ou P) Uma versão regular para a gramática seria: Literal a..z a..z Literal' Literal' a..z Literal' 0..9 Literal' a..z 0..9 Type bool int Value true false a..z a..z Literal' 0..9 0..9 Literal' Declarations bool Declarations' int Declarations' a..z Literal'' a..z Literal''' Declarations' a..z Literal'' 0..9 Literal'' a..z D 0..9 D Literal'' a..z Literal'' 0..9 Literal'' a..z D 0..9 D D D ; } ; Declarations Literal''' a..z Literal''' 0..9 Literal''' a..z V 0..9 V V = V' V' true D false D a..z D a..z Literal'' 0..9 D 0..9 Literal'' Params bool Literal int Literal bool Literal'''' int Literal'''' Literal'''' a..z Literal'''' 0..9 Literal'''' a..z P 0..9 P P P ; Params ; R Function bool F int F F a..z F 0..9 F a..z Q 0..9 Q Q ( Params R ) G G { Declarations (b) A gramática que você propôs em (a) é regular? Por quê?

A primeira gramática ilustrada (em suas duas versões) não é regular porque as reescritas definidas pelas regras (cadeias do lado direito) violam uma ou mais das restrições que caracterizam as regras α β das linguagens regulares: 1. α = 1 2. β tem no máximo 1 símbolo não terminal 3. o padrão das cadeias à direita da regra é t T (ou alternativamente T t) ou t, para t=símbolo terminal e T=símbolo não-terminal Obs: Alguns autores não aceitam a alternativa apontada para (3), acima. A segunda gramática ilustrada é regular porque atende às restrições 1, 2 e 3. (c) No autômato mostrado da Figura 1, abaixo, o arco declarations é uma abreviação de todas as e somente as concatenações de símbolos autorizadas pela regra de expansão de declarations (<declarations> ::= <type> <literal>; <literal> = <value>; <literal>;) na EBNF acima. Portanto, o que está omitido por este arco é perfeitamente equivalente ao que está explícito na EBNF. A abreviação está sendo feita para simplificar a questão. Figura 1: Autômato de referência para as perguntas c1,c2,c3 e c4 c1: Este autômato é um autômato finito? A resposta para alunos que apresentaram gramáticas não regulares e corretas em 1a é que, se houver uma gramática regular que descreva todas as e somente as concatenações de símbolos autorizadas pela regra de expansão de declarations (<declarations> ::= <type> <literal>; <literal> = <value>; <literal>;) na EBNF acima, então pode-se dizer que o autômato completo da Figura 1 é finito. Caso contrário, não é. Para alunos que apresentaram gramáticas regulares corretas em 1a a resposta é que o autômato é finito porque, como demonstrado em 1a, a expansão de declarations é uma linguagem regular. c2: É determinístico? Por quê? A resposta para alunos que apresentaram gramáticas não regulares e corretas em 1a é que, tal como apresentado na Figura 1 (i. e. sem considerar os estados e transições correspondentes a declarations ), o autômato é determinístico porque não existe, entre os seus 8 estados explícitos, nenhum para o qual haja duas transições definidas para o mesmo símbolo terminal e também não há arcos λ (lambda), correspondendo a transições com cadeias vazias. Sobre a parte abstraída como declarations, o sub-autômato que processa as cadeias de símbolos corretas será

determinístico se não houver, para seus n estados definidos, nem arcos λ, nem duas transições determinadas por um mesmo símbolo (terminal, se a gramática for regular, ou não-terminal, se a gramática não for regular). Alunos que apresentaram gramáticas regulares em 1a, resta saber se a gramática é determinística ou não. c3: Pode ser minimizado? Como? (Se sua resposta for positiva, desenhe o autômato mínimo.) A parte inicial do autômato, que garantidamente corresponde a um sub-autômato finito e determinístico, pode ser minimizada como mostrado na Figura 1A. O autômato foi desenhado no JFLAP e a legenda é: b=bool; i=int; l=letter; n=number. Os rótulos do autômato da Figura 1a correspondem aos estados da Figura 1 (0 =Q0, 1=Q1, etc.). Figura 1A: Autômato minimizado para a parte inicial do autômato da Figura 1 c4: O autômato da Figura 1 reconhece a mesma linguagem que a especificada pela EBNF acima? Se não reconhece, que modificações são necessárias para que passe a reconhecer? Considerando que declarations gera todas as cadeias corretas conforme especificado na EBNF da questão, resta saber se os estados que precedem q6 e sucedem q7 geram os símbolos especificados pela regra 11 da gramática apresentada na questão 1a: 11. Function Type Literal ( ) { Declarations } Type Literal ( Params ) { Declarations } O autômato da Figura 1 não gera expansões corretas para a parte em negrito da regra 11, acima. Note que, por exemplo, ele aceita uma sentença como int ab1 ( ) { } que não é aceita pela EBNF apresentada. Outro problema é a colocação correta do ;, que só deveria aparecer caso houvesse uma lista de mais de um parâmetro para a função. Com um único parâmetro, depois do literal deveria seguir um ). Uma forma de corrigr o autômato da Figura 1 seria o que aparece na Figura 1B:

Figura 1B: Autômato corrigido para processar listas de parâmetros corretamente (d) A sentença "int f (bool b) {a=1; b=a; return}" é sintaticamente correta pela EBNF apresentada acima? Se não for, você conseguiria adicionar ou retirar um único símbolo na sentença em questão fazendo então com que ela se torne sintaticamente correta? Mostre como. A sentença em questão não é correta. Para corrigi-la bastaria acrescentar um ; antes de fechar a chave: "int f (bool b) {a=1; b=a; return; }". (e) A expressão regular (letter* + number*)* = true + false + number* denota corretamente um tipo (não necessariamente todos os tipos) de declaração ('declarations') sintaticamente correta da linguagem C pela EBNF acima? Se não denota, por que não denota? Há como corrigi-la para que denote? Como? O tipo de declarations em questão é <literal> = <value>. A ausência de ; no final não é o principal da questão. Para este tipo de declarations, a expressão acima tem dois problemas. Primeiro, ela a expansão da cadeia equivalente a literal permite vários problemas: literais iniciados por uma cadeia de letras, seguida de números, ou iniciados por números, ou até mesmo literais vazios (que é o que o operador de Kleene denota). Uma denotação correta para esta parte seria: letter letter* + letter number (number + letter number)* letter*. O segundo problema é que o lado direito da equação (o que vem depois de = ) admite como alternativa uma iteração de zero números (ou seja, uma cadeia vazia). Isto tampouco funciona. A correção desta parte seria: = true + false + number number*. A notação adotada na expressão regular desta questão é: a + b para denotar a OU b a * para denotar a repetição de 0..N instâncias de a (a + b)* para denotar a repetição de 0..N instâncias de a ou b Para simplificar, estamos também adotando as seguintes definições: letter* denota 0..N letras (a..z) concatenados number* denota 0..N algarismos (0..9) concatenados

Questão 2 Seja L uma linguagem que denota expressões aritméticas binárias com operadores infixos para a soma, subtração, multiplicação e divisão de operandos inteiros, e que admite o uso de parênteses balanceados para priorizar o cálculo de parcelas da expressão. São exemplos de expressões sintaticamente corretas em L as listadas a seguir: 1. (100 + 82) / 7 2. 100 + 82 / 7 ou então (100 + 82 / 7) 3. 250 - ((100 - (45 / 2)) * (67 / (23 + 8))) São exemplos de expressões sintaticamente incorretas em L as listadas a seguir: 4. 3 + (7-2 / ) 4 ou então 3 + (7-2 ) / 4) 5. 526 + ( -7) 6. * (30 + (15 3)) Apresente uma gramática de tipo 2 que gere essa linguagem. Uma possibilidade é a gramática a seguir. Mas há outras, claro. 1. S N O N S O S S O N N O S (S) 2. N 0..9 0..9 N 3. O + - / * Questão 3 O Lema do Bombeamento diz que, para toda linguagem regular LR à qual pertençam infinitas sentenças, existe uma constante p tal que, sendo w uma sentença qualquer de LR, existe uma partição w xyz desta sentença tal que: y 1 xy p qualquer w xy*z também pertence a LR (a) A afirmação a seguir é consistente com o Lema do Bombeamento? SIM, é consistente. Nesta interpretação, não há qualquer garantia de que p seja o comprimento mínimo para o bombeamento. Porém, o lema não depende deste comprimento mínimo. Para qualquer linguagem LR reconhecida por um autômato finito determinístico AFD tal como o apresentado na Figura 2: p é o número de estados do AFD; y é a menor cadeia não nula aceita pelo sub-autômato que tem qn como estado inicial e final (veja retângulo pontilhado na Figura 2); x é a cadeia de símbolos derivada pelas transições previstas entre q0 e qn; e z é a cadeia de símbolos derivada pelas transições previstas entre qn e qm. Figura 2: AFD de referência para a questão 3.

(b) Utilize o Lema do Bombeamento para mostrar que uma das duas linguagens a seguir não é regular: L = a n! para n > 0 L = a n + b m para n, m > 0 e n m Seja P a assertiva para uma sentença w qualquer de L verifica-se o Lema do Bombeamento e Q a assertiva L é uma linguagem regular. A tabela de verificação para P Q é: P Q P Q V V V F V F F F V V F V P é condição necessária mas não suficiente para L ser regular Assim, se existir uma sentença w de L para a qual o Lema do Bombeamento não se verifique, L não é regular. Se existir, L pode ser regular ou não. No caso de L=a n!, para uma cadeia w qualquer de L, se w=xyz então xz tem de pertencer também a L (caso de zero iterações da cadeia y) e portanto xz = n!. Seja n=2 (cadeia aaaa) o xyz = 2! o xz = n! e n<2 (já que retiramos a cadeia y) Se n=1 então xz = 1! (cadeia a ) => y =2!-1!=1 Ora, iterando y duas vezes teríamos: 1!+2*1=m!=3 Se n=0 então xz = 0! (cadeia vazia) => y =0!-1!=0 Ora, esta condição viola a restrição de que y >0 Como chegamos a uma inverdade nas duas hipóteses acima, concluímos que existe pelo menos uma sentença w de L para a qual o Lema do Bombeamento não se aplica. Ou seja, L não é uma linguagem regular. Esta mesma situação ocorre com outras cadeias de L, como se vê a seguir: Seja n=3 (cadeia aaaaaaaaa) o xyz = 3! o xz = n! e n<3 (já que retiramos a cadeia y) Se n=2 então xz = 2! (aaaa) => y =3!-2!=5 Ora, iterando y duas vezes teríamos: 2!+2*5=m!=14 Se n=1 então xz = 1! (a) => y =3!-1!=8 Ora, iterando y duas vezes teríamos: 1!+2*8=m!=17 No caso de L, há duas respostas possíveis: a) apontar que o uso de + (ou) na definição da linguagem torna a ocorrência de cadeias alternativa e independente, anulando a possibilidade de haver a e b nas cadeias bem formadas. Logo a linguagem seria cabalmente regular, pois uma das alternativas sempre teria zero ocorrência daqueles símbolos. Havia um erro de impressão nesta questão que foi corrigido em sala de prova pelos professores.

b) apontar que se o + for interpretado como concatenação entre cadeias de a e b, o que daria sentido não trivial à restrição, as sentenças válidas têm cadeias de a n b m para n,m > 0 e n m. Há duas situações a examinar: ou n>m ou n<m. Se w=a n b m e n>m (i.e. há mais a do que b em w) então poderíamos: a) bombear qualquer y para w=xyz se y=aa* contanto que: o A extração de aa* (zero iterações de y) não gerasse uma cadeia que não pertence a L. Porém, isto não é possível porque: Se y=a, o lema não se aplica para a cadeia w=a n b n-1 Exemplo: w=aab ou w=aaabb ou w=aaaabbb e assim por diante Se y=aaa* e y =k, o lema não se aplica para a cadeia w=a k+n b n Exemplo: seja k=2 w=aaab ou w=aaaabb ou w=aaaaabbb e assim por diante b) bombear qualquer y para w=xyz se y=ab contanto que: o A extração de ab (zero iterações de y) não gerasse uma cadeia que não pertence a L. Porém, isto não é possível porque: Se y=ab, o lema não se aplica se m=1, pois a extração do único b da cadeia w levaria a cadeias de a, somente, que não atendem às restrições de L. c) bombear qualquer y para w=xyz se y=bb* contanto que: o A extração de bb* (zero iterações de y) não gerasse uma cadeia que não pertence a L. Porém, isto não é possível porque: Se y=b a extração de y não funcionaria para cadeias a n b m se m=1 Se y=bbb* se y =k, o lema não se aplica para cadeias do tipo w=a k+n b k Exemplo: k=1: a n>1 b; k=2: a n>2 bb; e assim por diante. Como chegamos a impossibilidades nas três hipóteses acima, concluímos que existem sentenças w de L para a qual o Lema do Bombeamento não se aplica. Ou seja, L não é uma linguagem regular. OBS: A mesma conclusão pode ser atingida explorando-se a opção de n<m, examinando-se as mesmas hipóteses.

As provas estão sendo corrigidas pelos professores e deverão ser entregues ou no dia 13 ou no dia 15 de setembro, próximos. Alunos que desejem revisão de correção devem solicitá-la por escrito, em folha contendo, para cada questão cuja correção está sendo posta em dúvida: o motivo do questionamento (i.e. uma justificativa para que seja dada à questão uma pontuação diferente da que foi dada pelos professores) anexo com a prova (tanto as folhas de enunciado, quanto as de resposta) o email institucional do aluno (i.e. no domínio puc-rio.br ; os professores não se responsabilizam pela entrega de mensagens fora deste domínio). A resposta ao pedido de revisão será encaminhada por email ao aluno. Atenção: o pedido de revisão obviamente não pode ser encaminhado por email (pois as folhas de prova têm de estar anexas).