lógica computacional.pdf
TRANSCRIPT
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 1 de 2
Lógica Computacional – Aula 01
1. Interruptores
Definição: Um interruptor é um dispositivo ligado a um circuito elétrico que pode assumir dois estados: aberto ou
fechado. Quando aberto não permite a passagem de corrente elétrica, enquanto fechado a corrente passa livremente
pelo ponto.
a
a
aberto fechado
Para simplificar denotaremos um interruptor por uma letra minúscula do nosso alfabeto. Quando o interruptor estiver
aberto, diremos que a = 0, enquanto fechado, diremos que a = 1.
Dois interruptores a e b podem estar conectados através de dois tipos de ligações: paralela ou serial.
Denotaremos a ligação de dois interruptores a e b em paralelo por a + b. Já a ligação em serial será denotada por
a • b.
a
a
b
b
ligação paralela (a + b) ligação serial (a • b)
Observe que em uma ligação paralela somente haverá passagem de corrente elétrica se pelo menos um dos
interruptores estiver fechado (1). Por outro lado, na ligação serial é necessário que ambos os interruptores estejam
fechados para que a corrente possa passar.
Exemplos:
1) Determinar a expressão algébrica correspondente aos circuitos desenhados:
a)
a c)
a
b
b
c
c
d
Solução: a + b • c Solução: a • b + c • d b)
b d)
a
c
a
c
b
d
Solução: a • (b + c) Solução: (a + b) • (c + d)
2) Desenhar os circuitos cujas ligações são dadas pelas expressões abaixo:
a) a · (b + c) · d
c) a • (b + c • d)
Solução:
b
Solução:
b
a
d
a
c
c
d
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 2 de 2
b) (a • b + c • d) + p • q
d) a + b • c • d
Solução:
a
b
Solução:
a
c
d
b
c
d
p
q
Exercícios:
1) Dar as expressões algébricas dos circuitos desenhados:
z
a
b
e
a)
x
y
t
w
c
d
f
h)
y
x
z
r
b)
x
t
z
y
s
t
y
p
r
c)
x
i)
z
w
q
s
t
x
y
a
b
c
d)
t
w
x
y
z
j)
z
p
q
r
e)
x
y
w
t
u
v
w
a
a
b
c
d
f)
b
c
d
e
f
p
q
r
x
y
z
k)
s
t
u
x
y
h
i
j
g)
t
w
k
l
m
a
b
2) Desenhar os circuitos cujas ligações são dadas pelas expressões:
a) p • (q +r)
b) m + (p • q • r)
c) m + n + p + q
d) (x • y) + (u • v)
e) (p + q) • (r + s)
f) (p + q) • (r + s + t)
g) (a + b • c) • (d • e + f) + g • h • i
h) p • (q • (s + r) + t • u) + (a + b) • (c • d + e)
i) a • (p • (q + r • s) + (t + u) • (v + w • x))
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 1 de 6
Lógica Computacional – Aula 02
2. Proposições
Definição: Uma proposição é uma sentença declarativa, afirmativa que exprime um pensamento de sentido completo.
Toda proposição pode ser escrita na forma simbólica ou na linguagem usual.
Exemplos:
1) O Brasil fica na América do Sul.
2) 2 + 3 = 5.
3) 5 < 2.
4) A Alemanha fica na Ásia.
Observe que nos exemplos acima as proposições 2) e 3) estão escrita na forma simbólica, e as proposições 1) e 4) na
linguagem usual.
2.1. Valor lógico de uma proposição
Dizemos que o valor lógico de uma proposição é a verdade (1) se a proposição for verdadeira e é a falsidade (0) se a
proposição for falsa.
Ainda utilizando os exemplos acima, temos que o valor lógico das proposições 1) e 2) é a verdade (1), pois ambas as
proposições são verdadeiras. Já o valor lógico das proposições 3) e 4) é a falsidade (0), uma vez que tais proposições
são falsas.
2.2. Proposições simples e compostas
Definição: Uma proposição é dita simples quando não contém nenhuma outra proposição como parte integrante de si
mesma. Representaremos estas proposições pelas letras minúsculas do nosso alfabeto (p, q, r, s etc).
Exemplos:
1) p: Carlos é paulista.
2) q: Está chovendo.
3) r: Hoje é domingo.
Definição: Uma proposição é dita composta quando é formada por duas ou mais proposições relacionadas pelos
conectivos adequados (e, ou, se...então, se e somente se). Indicaremos as proposições compostas pelas letras
maiúsculas do nosso alfabeto (P, Q, R, S etc).
Exemplos:
1) Hoje é domingo e está chovendo.
2) Carlos é paulista ou João é carioca.
3) Se Carlos é paulista então Maria é gaúcha.
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 2 de 6
2.3. Tabela-verdade
Utilizaremos a tabela-verdade para determinar o valor lógico das proposições compostas, lembrando sempre que toda
proposição pode assumir somente um dos dois valores lógicos possíveis (verdadeiro, falso), não existindo nenhuma
outra possibilidade.
O número de linha da tabela-verdade é determinado pela fórmula: 2n, onde n é o número de proposições.
Exemplos:
1) Apenas uma proposição p:
21 = 2 linhas
p
0 1 0
p
2 1 1
2) Duas proposições p e q:
22 = 4 linhas
0
p q q
1 0 0 0 1
2 0 1 p
3 1 0
1
0
4 1 1 q
1
3) Três proposições p, q e r:
23 = 8 linhas
0
r
p q r 0 1
1 0 0 0 q
2 0 0 1
0 1
0
3 0 1 0 r
4 0 1 1 1
5 1 0 0 p
6 1 0 1
1
0
7 1 1 0 r
8 1 1 1 0 1
q
1
0
r
1
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 3 de 6
3. Operações Lógicas sobre Proposições
3.1. Negação ( ‘ ) = “não”
Exemplos:
1) p: Está chovendo.
p’: Não está chovendo.
2) q: Hoje é domingo.
q’: Hoje não é domingo.
Quando uma proposição p é acrescida do operador lógico da negação - ( ‘ ) = “não” - a proposição resultante, ou
seja, p’, será verdadeira se p for falsa; será falsa se p for verdadeira.
Na tabela-verdade temos:
p p'
0 1
1 0
3.2. Conjunção ( •••• ) = “e”
Exemplo:
p: Maria é estudante.
q: João é mecânico
p • q: Maria é estudante e João é mecânico.
Quando duas proposições p e q são relacionadas pelo operador lógico da conjunção - ( • ) = “e” - a proposição
resultante, ou seja, p • q, será verdadeira somente se ambas as proposições forem verdadeiras. Será falsa nos
demais casos.
Na tabela-verdade temos:
p q p • q
0 0 0
0 1 0
1 0 0
1 1 1
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 4 de 6
3.3. Disjunção ( + ) = “ou”
Exemplo:
p: Daniela é carioca.
q: Mário é paulista.
p + q: Daniela é carioca ou Mário é paulista.
Quando duas proposições p e q são relacionadas pelo operador lógico da disjunção - ( + ) = “ou” - a proposição
resultante, ou seja, p + q, será falsa somente se ambas as proposições forem falsas. Será verdadeira nos demais
casos.
Na tabela-verdade temos:
p q p + q
0 0 0
0 1 1
1 0 1
1 1 1
3.4. Condicional ( →→→→ ) = “se...então”
Exemplo:
p: Paulo é marceneiro.
q: Danilo é estudante.
p → q: Se Paulo é marceneiro então Danilo é estudante.
Quando duas proposições p e q são relacionadas pelo operador lógico do condicional - ( → ) = “se...então” - a
proposição resultante, ou seja, p → q, será falsa somente se a primeira proposição for verdadeira e a segunda for
falsa. Será verdadeira nos demais casos.
Na tabela-verdade temos:
p q p → q
0 0 1
0 1 1
1 0 0
1 1 1
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 5 de 6
3.5. Bicondicional ( ↔↔↔↔ ) = “se e somente se”
Exemplo:
p: Renato mora em São Paulo.
q: Mariana mora em Campinas.
p ↔ q: Renato mora em São Paulo se e somente se Mariana mora em Campinas.
Quando duas proposições p e q são relacionadas pelo operador lógico do bicondicional - (↔ ) = “se e somente se” -
a proposição resultante, ou seja, p ↔ q, será verdadeira somente se o valor lógico de ambas as proposições forem
iguais. Será falsa nos demais casos.
Na tabela-verdade temos:
p q p ↔ q
0 0 1
0 1 0
1 0 0
1 1 1
Ordem dos operadores:
1) Negação ( ‘ )
2) Conjunção ( •••• ) e disjunção ( + )
3) Condicional ( → )
4) Bicondicional ( ↔ )
Exercícios:
1) Sejam as proposições p: João joga basquete e q: Mário joga vôlei. Escreva na linguagem usual as seguintes
proposições:
a) p • q
b) p’ + q
c) p’ • q’
d) p → q’
e) q ↔ p’
f) q → p
2) Dadas as proposições p: Faz calor e q: Está chovendo. Escreva na linguagem simbólica as seguintes proposições:
a) Faz calor e não está chovendo.
b) Se faz calor então está chovendo.
c) Está chovendo se e somente se não faz calor.
d) Se não está chovendo então faz calor.
e) Não faz calor ou não está chovendo.
f) Não está chovendo nem faz calor.
g) Está chovendo, mas faz calor.
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 6 de 6
3) Sabendo que V(p) = 0 e V(q) = 1, determine o valor lógico de cada uma das proposições abaixo:
a) p’ • q
b) p’ + q
c) (p + q)’
d) p’ • q’ → p
e) p → q • p’
f) p + q → q’ • p’ ↔ p
g) p • (q’ → p) → p + q • (p’ ↔ q)
4) Se V(p) = V(q) = 1 e V(r) = V(s) = 0, determine o valor lógico de cada uma das proposições abaixo:
a) p’ + r
b) r + (p → s)
c) p’ + (r • s)’
d) q ↔ p’ • s
e) (p ↔ q) + (q → p’)
f) (p ↔ q) • (r’ → s)
g) p’ + (q • r → s’)
h) (p’ + r) → (q → s)
i) p’ + (q • s)’ → r ↔ s’
j) (q’ • (r’ + s)’ ↔ p) → r
5) Classifique as proposições compostas abaixo, como conjunção, disjunção, condicional, bicondicional ou negação:
a) p + q → r
b) p + (q • r’)
c) p • q → r’
d) p + (q • r) ↔ p’
e) (p + q)’
f) (p → q’) • r
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 1 de 5
Lógica Computacional – Aula 03
4. Construção da Tabela-verdade
Para se construir a tabela-verdade de uma proposição composta dada, procede-se da seguinte maneira:
a) Determina-se o número de linhas da tabela-verdade que se quer construir;
b) Observa-se a precedência entre os conectivos, isto é, determina-se a forma das proposições que ocorrem no
problema;
c) Aplicam-se as definições das operações lógicas que o problema exigir.
Exemplos: Construir a tabela-verdade das proposições abaixo:
1) p • q’ + p’
p q p' q' p • q’ p • q’ + p’
0 0 1 1 0 1
0 1 1 0 0 1
1 0 0 1 1 1
1 1 0 0 0 0
P(00, 01, 10, 11) = 1110
2) p → q + p’
p q p' q + p’ p → q + p’
0 0 1 1 1
0 1 1 1 1
1 0 0 0 0
1 1 0 1 1
P(00, 01, 10, 11) = 1101
3) (p • q)’ + (q ↔ p)’
p q p • q (p • q)’ q ↔ p (q ↔ p)’ (p • q)’ + (q ↔ p)’
0 0 0 1 1 0 1
0 1 0 1 0 1 1
1 0 0 1 0 1 1
1 1 1 0 1 0 0
P(00, 01, 10, 11) = 1110
4) p + r’ → q’ • r
p q r q' r' q’ • r p + r’ p + r’ → q’ • r
0 0 0 1 1 0 1 0
0 0 1 1 0 1 0 1
0 1 0 0 1 0 1 0
0 1 1 0 0 0 0 1
1 0 0 1 1 0 1 0
1 0 1 1 0 1 1 1
1 1 0 0 1 0 1 0
1 1 1 0 0 0 1 0
P(000, 001, 010, 011, 100, 101, 110, 111) = 01010100
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 2 de 5
5) (q → p) • r’ ↔ (p + q)’
p q r r' q → p p + q (p + q)’ (q → p) • r’ (q → p) • r’ ↔ (p + q)’
0 0 0 1 1 0 1 1 1
0 0 1 0 1 0 1 0 0
0 1 0 1 0 1 0 0 1
0 1 1 0 0 1 0 0 1
1 0 0 1 1 1 0 1 0
1 0 1 0 1 1 0 0 1
1 1 0 1 1 1 0 1 0
1 1 1 0 1 1 0 0 1
P(000, 001, 010, 011, 100, 101, 110, 111) = 10110101
6) (p + q’)’ • (r ↔ p → q)
p q r q' p + q’ (p + q’)’ p → q r ↔ p → q (p + q’)’ • (r ↔ p → q)
0 0 0 1 1 0 1 0 0
0 0 1 1 1 0 1 1 0
0 1 0 0 0 1 1 0 0
0 1 1 0 0 1 1 1 1
1 0 0 1 1 0 0 1 0
1 0 1 1 1 0 0 0 0
1 1 0 0 1 0 1 0 0
1 1 1 0 1 0 1 1 0
P(000, 001, 010, 011, 100, 101, 110, 111) = 00010000
5. Tautologia, Contradição e Contingência
Definição: De acordo com a última coluna da tabela-verdade de uma proposição composta, podemos classificá-la em:
� Tautologia – quando o valor lógico da proposição for sempre a verdade (1), quaisquer que sejam os valores
lógicos das proposições componentes;
� Contradição - quando o valor lógico da proposição for sempre a falsidade (0), quaisquer que sejam os
valores lógicos das proposições componentes;
� Contingência – quando ocorrem os dois valores lógicos 0 e 1 na tabela-verdade.
Exemplos:
1) p • q’ → p’
p q p' q' p • q’ p • q’ → p’
0 0 1 1 0 1
0 1 1 0 0 1
1 0 0 1 1 0
1 1 0 0 0 1
P(00, 01, 10, 11) = 1101
Logo, é uma contingência.
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 3 de 5
2) (p • q)’ ↔ p’ + q’
p q p' q' p • q (p • q)’ p’ + q’ (p • q)’ ↔ p’ + q
0 0 1 1 0 1 1 1
0 1 1 0 0 1 1 1
1 0 0 1 0 1 1 1
1 1 0 0 1 0 0 1
P(00, 01, 10, 11) = 1111
Logo, é uma tautologia.
3) p + q’ ↔ p’ • q
p q p' q' p' • q p + q’ p + q’ ↔ p’ • q
0 0 1 1 0 1 0
0 1 1 0 1 0 0
1 0 0 1 0 1 0
1 1 0 0 0 1 0
P(00, 01, 10, 11) = 0000
Logo, é uma contradição.
6. Relações de Implicação e Equivalência
Definição: Dizemos que uma proposição p implica uma proposição q se toda vez que p for verdadeira, q também o
for. Em outras palavras, em suas tabelas-verdade, não ocorre 10 (nessa ordem!).
Notação: p ⇒ q (p implica q)
p ⇒ q (p não implica q)
Definição: Dizemos que uma proposição p é equivalente a uma proposição q se os seus valores lógicos forem sempre
iguais. Em outras palavras, suas tabelas-verdade são iguais.
Notação: p ⇔ q (p é equivalente a q)
p ⇔ q (p não é equivalente a q)
Observação: não confundir os símbolos → e ⇒, pois, enquanto → representa uma operação lógica entre proposições,
dando origem a uma nova proposição, ⇒ indica apenas uma relação entre duas proposições.
O mesmo vale para os símbolos ↔ e ⇔.
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 4 de 5
Exemplos:
1) P: p ↔ q
Q: (p • q’)’
P Q
p q p ↔ q q' p • q’ (p • q’)’
0 0 1 1 0 1
0 1 0 0 0 1
1 0 0 1 1 0
1 1 1 0 0 1
P ⇒ Q (P implica Q)
Q ⇒ P (Q não implica P)
P ⇔ Q (P não é equivalente a Q)
2) P: q
Q: (p • q)’
P Q
p q p • q (p • q)’
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0
P ⇒ Q (P não implica Q)
Q ⇒ P (Q não implica P)
P ⇔ Q (P não é equivalente a Q)
3) P: p ↔ q
Q: (p → q) • (q → p)
P Q
p q p ↔ q p → q q → p (p → q) • (q → p)
0 0 1 1 1 1
0 1 0 1 0 0
1 0 0 0 1 0
1 1 1 1 1 1
P ⇒ Q (P implica Q)
Q ⇒ P (Q implica P)
P ⇔ Q (P é equivalente a Q)
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 5 de 5
Exercícios:
1) Construa a tabela-verdade das seguintes proposições:
a) p • q → p + q
b) p’ → (q → p)
c) q ↔ q’ • p
d) (p ↔ q’) → p’ • q
e) p’ • r → q + r
f) p → r ↔ q + r’
g) p → (p → r’) ↔ q + r
h) (p ↔ q → r + q’) + (p’ ↔ q • r’ → p)
2) Determine quais das seguintes proposições são tautologias, contradições ou contingências:
a) p → (p’ → q)
b) p’ + q → (p → q)
c) p → (q → (q → p))
d) ((p → q) ↔ q) → p
e) p + q’ → (p → q’)
f) p’ + q’ → (p → q)
g) p → (p + q) +r
h) p • q → (p ↔ q + r)
i) (q → p) → (p → q)
3) Dadas as proposições P e Q abaixo, verifique se P ⇒ Q (P implica Q), Q ⇒ P (Q implica P) e P ⇔ Q
(P equivalente a Q):
a) P: q → p’ Q: q’ + p
b) P: p’ Q: p • q
c) P: p ↔ q → q’ Q: p’ → q’ • p ↔ q + p
d) P: q Q: p ↔ q’ → p’ • (q + p)
e) P: p’ • r → q + r’ Q: p → r ↔ q + r’
f) P: p → q • r Q: (p → q) • (p → r)
g) P: p + r ↔ r • p’ → r’ Q: (p ↔ q + r) • q’ → r
h) P: (p → q) + (p → r) Q: p → q + r
i) P: q’ ↔ r • p → r’ Q: (p + r’)’ → (p + (q’ ↔ r))
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 1 de 4
Lógica Computacional – Aula 04
7. Argumento Válido
Definição: Dizemos que um argumento, composto pela seqüência de proposições p1, p2, p3,..., pn, pn+1, é válido se
sempre que as premissas p1, p2, p3,..., pn forem verdadeiras a conclusão pn+1 também é verdadeira e tal que a
conjunção das n primeiras implica a última, ou seja, p1 • p2 • p3 • ... • pn ⇒ pn+1.
Sendo assim, para testar a validade de um argumento procede-se da seguinte maneira:
a) Constrói-se a tabela-verdade de p1 • p2 • p3 • ... • pn;
b) Constrói-se a tabela-verdade de pn+1;
c) Comparam-se as colunas ‘p1 • p2 • p3 • ... • pn’ e ‘pn+1’ para verificar se p1 • p2 • p3 • ... • pn ⇒ pn+1, ou seja,
se p1 • p2 • p3 • ... • pn implica pn+1.
Se valer a implicação, então o argumento é válido. Caso contrário, o argumento é falho.
Exemplos: Testar a validade dos argumentos abaixo:
1) p → q, q, p
De acordo com a definição, devemos verificar se: (p → q) • q ⇒ p.
p q p → q (p → q) • q
0 0 1 0
0 1 1 1
1 0 0 0
1 1 1 1
Como (p → q) • q ⇒ p, então o argumento é falho.
2) p + q, p’, q
De acordo com a definição, devemos verificar se: (p + q) • p’ ⇒ q.
p q p’ p + q (p + q) • p’
0 0 1 0 0
0 1 1 1 1
1 0 0 1 0
1 1 0 1 0
Como (p + q) • p’ ⇒ q, então o argumento é válido.
3) p + q • r, p → q, q’ + p
De acordo com a definição, devemos verificar se: (p + q • r) • (p → q) ⇒ q’ + p. p q r q’ q • r p + q • r p → q (p + q • r) • (p → q) q’ + p
0 0 0 1 0 0 1 0 1
0 0 1 1 0 0 1 0 1
0 1 0 0 0 0 1 0 0
0 1 1 0 1 1 1 1 0
1 0 0 1 0 1 0 0 1
1 0 1 1 0 1 0 0 1
1 1 0 0 0 1 1 1 1
1 1 1 0 1 1 1 1 1
Como (p + q • r) • (p → q) ⇒ q’ + p, então o argumento é falho.
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 2 de 4
4) p ↔ q, p’, q’ • r + p, q + r
De acordo com a definição, devemos verificar se: (p ↔ q) • p’ • (q’ • r + p’) ⇒ q + r. p q r p' q' p ↔ q q’ • r q’ • r + p (p ↔ q) • p’ (p ↔ q) • p’ • (q’ • r + p’) q + r
0 0 0 1 1 1 0 0 1 0 0
0 0 1 1 1 1 1 1 1 1 1
0 1 0 1 0 0 0 0 0 0 1
0 1 1 1 0 0 0 0 0 0 1
1 0 0 0 1 0 0 1 0 0 0
1 0 1 0 1 0 1 1 0 0 1
1 1 0 0 0 1 0 1 0 0 1
1 1 1 0 0 1 0 1 0 0 1
Como (p ↔ q) • p’ • (q’ • r + p’) ⇒ q + r, então o argumento é válido.
8. Portas Lógicas
Definição: São as bases dos circuitos lógicos e têm por finalidade realizar determinada função. Cada porta pode ter
várias linhas de entrada, mas somente uma linha de saída.
Porta lógica E ( • ): Porta lógica OU ( + ): Porta lógica NÃO ( ' )
x = a • b x = a + b x = a' + b'
Exemplos:
1) Dar as funções correspondentes aos circuitos lógicos abaixo:
a)
x = (a' + b) • (a + c)
b)
y = a • b' • c
c)
z = (a • b') + (a' • c)
a
b x x
a
b
a
b
a
c
x
a
b
c y
a
b
a
c
z
x a
b
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 3 de 4
d)
w = (a + b) • (b • c • d')
e)
s = (a' + (b • c))' • ((a • b') + (b • c)' + (a • c))
2) Dar os circuitos lógicos correspondentes às funções abaixo:
a) x = a + b' + c
b) y = (a • b) + c'
c) z = (a + b) • (b + c)
a
b
w b
c
d
a
b
b
c
a
c
s
b
c
a
a
b
c x
a
b c
y
a
b
b
c
x
Uninove - Lógica Computacional – Prof.(a) Érika Andersen 4 de 4
d) v = (a + b' + c' + d) • c' • (e + f)
e) u = ((a + b) • c) + ((a • b) + (a • c)) + (a • (b + d))
Exercícios:
1) Teste a validade dos argumentos abaixo:
a) p → q, q → p, p ↔ q
b) p → q’, p + q’, q, p’
c) p → q’, p + q, p ↔ q’
d) r’ → p’, (p’ + q)’, q’
e) q’ • p’, (p’ → q)’, q’ ↔ q’ • p’, p + q
f) (p • q’) + (q • r’), (p • q)’, q • r’
g) r + t, s’ • t’, t → r, t ↔ s
h) q • p’, p + r, p → q • r’, r ↔ q → p’
2) Dar os circuitos lógicos correspondentes às funções abaixo:
a) x = (a • b) + (b' + (c • d))
b) y = ((a + b') • (c + d) • b) + (a + b + c)' + ((a' • b) + (b • c))
c) z = ab + ac + bc
d) x = abc + (ac + bd)' + ac'd
e) y = (((a + b') • c) + (d • e))' • (a' + (b • c) + d' + (a • b • c))
v c
a
b
c
d
e
f
u
a
b
a
c
a
b c
b
d
a