ADT: WARM UP

RAUL H.C.LOPES

1. Introdução

Esta lista contém exercícios de construção e correção de algoritmos recursivos e propriedades de seqüências e árvores. Uma prova só será considerada válida se cada um de seus passos (repito, cada um de seus passos) for claramente justificado por:

• um axioma ou regra de inferência da lógica;

• um teorema ou lema previamente provado e apresentado nesta

prova. Cada passo de uma prova deve ser devidamente anotado com o axi-

oma, regra de inferência ou teorema que o justifica.

Todas as suas definições e provas serão, em princípio, apresentadas em lógica de primeira ordem, usando equational reasoning, como feito em sala de aula. Você é livre para usar outra lógica e/ou formalismo de prova desde que devidamente justificado: ou seja, anuncie claramente o formalismo que usará e identifique explicitamente cada regra de inferência usada nas provas. Por exemplo, definições em Haskell, deverão ser acompanhadas por axiomas definindo a semântica dos operadores da linguagem usados, o que provavelmente você não conhece.

A notação de pontos de Curry, apresentada em sala e notas de aula e na página 34 de [1], é utilizada para reduzir o uso de parênteses.

2. Quantificadores

Quantificadores representam papel importante em propriedade e provas sobre algoritmos e estruras de dados. Estas notas introduzem axiomas fundamentais para trabalhar com quantificadores, mas não substituem fontes clássicas como [3] e [2].

Nesta seção, assuma que:

• R.x, Q.X, P.x são funções booleanas de x (onde x ocorre livre);

• f.x é uma função aritmética de x.

• S.x, T.x são uma funções quaisquer de x. Os quantificadores são apresentados neste curso com a seguinte notação:

Notação 1. (⋆x : R.x : P.x)

onde:

• x é o parâmetro sobre o qual a sentença é quantificada ( bound variable);

• R.x é o universo da quantificação;

• P.x é o corpo da quantificação.

Alguns exemplos de quantificadores comumente usados e sua notação usual em textos de matemática:

(∧x : R.x : P.x) = (∀x : R.x : P.x)
(∨x : R.x : P.x) = (∃x : R.x : P.x)
(+x : R.x : f.x) = (∑x : R.x : f.x) = ∑_{R.x} f.x
(.x : R.x : f.x) = (∏x : R.x : f.x) = ∏_{R.x} f.x

Os seguintes operadores definem máximo e mínimo de inteiros.

a ≤ b ⇒. a ↓ b = a (1) a ≥ b ⇒. a ↓ b = b (2) a ≤ b ⇒. a ↑ b = b (3) a ≥ b ⇒. a ↑ b = a (4)

Suas respectivas identidades são:

a ↓ +∞ = a = +∞ ↓ a (5) a ↓ −∞ = a = −∞ ↓ a (6)

Eles também podem ser usados como quantificadores. Por exemplo em:

(↓i ∈ ℕ : 10 ≤ i < 100 : f.i)

significando o mínimo dos f.i com i inteiro maior ou igual que 10 e menor do que 100.

Assumindo que ⋆ seja um operador binário com as seguintes propriedade:

Simetria: b ⋆ c = c ⋆ b
Associatividade: a ⋆ (b ⋆ c) = (a ⋆ b) ⋆ c
Identidade u_{⋆}: u_{⋆} ⋆ b = b = b ⋆ u_{⋆}

Uma variável x tem ocorrência livre em uma expressão P se tem uma ocorrência que não é parâmetro de (amarrada por) nenhum quantificador. A notação P [x := E] será usada para indicar o resultado de substituir todas as ocorrências livres de x (em P) por E.

ADT: WARM UP 3

Os seguintes axiomas permitem trabalhar com quantificadores: (⋆x : false : T.x) = u_{⋆} (7) (⋆x : x = E : T.x) = T [x := E] (8) (⋆x : R.x : S.x) ⋆ (⋆x : R.x : T.x) = (⋆x : R.x : S.x ⋆ T.x) (9) (⋆x : P.x ∨ R.x : T.x) ⋆ (⋆x : P.x ∧ R.x : T.x) = (10)

(⋆x : P.x : T.x) ⋆ (⋆x : R.x : T.x)

(⋆x : P.x ∨ R.x : T.x) = (⋆x : P.x : T.x) ⋆ (⋆x : R.x : T.x) (11) Exercício 1. Prove:

(1) (⋆i ∈ ℕ : 0 ≤ i < n + 1 : T.i) = (⋆i ∈ ℕ : 0 ≤ i < n : T.i) ⋆ T [i := n]

(2) (⋆i ∈ ℕ : 0 ≤ i < n + 1 : T.i) = T [i := 0]⋆(⋆i ∈ ℕ : 0 < i < n + 1 : T.i)

Os seguintes axiomas valem para os quantificadores lógicos (∀, ∃).

(∀x : R.x : P.x) = ∀x : R.x ⇒ P.x (12) (∃x : R.x : P.x) = ∃x : R.x ∧ P.x (13) (∃x : R.x : P.x) = ¬(∀x : R.x : ¬P.x) (14) (∀x : R.x : P.x) ⊢ R[x := E] ⇒ P [x := E] (15)

A seguinte regra de inferência é usada para provar sentenças universalmente quantificadas, assumindo que x̂ é parâmetro que não ocorre livre em Γ ou P.

\frac{Γ ⊢ P [x := x̂]}{Γ ⊢ ∀x : P.x} (16)

3. Seqüências

Uma seqüência de elementos de um tipo A é uma seqüência vazia (denotada por ⊥) ou resultado de adicionar um elemento de A a uma seqüência de elementos de A. Os axiomas a seguir definem seqüências de elementos de A, denotada seq.A: ⊥ ∈ seq.A (17) (a ◁ x) ∈ seq.A ⇐ x ∈ seq.A ∧ a ∈ A (18)

(19) fecho universal.

4 RAUL H.C.LOPES

Assumindo que x, y ∈ seq.A e que a, b ∈ A, os seguintes axiomas tratam a igualdade sobre seqüências. ⊥ ≠ (a ◁ x) (20) (a ◁ x) = (b ◁ y) .=. a = b ∧ x = y (21)

O princípio da indução sobre seqüências estabelece condições para que uma propriedade P seja válida para qualquer seqüência, sendo denotado W P I(P).

(22) W P S(P) =^{△} ((∀x : x ∈ seq.A : (∀a : a ∈ A : P.x) ⇒ P.a ◁ x))
(23) W P I(P) =^{△} (P.⊥ ∧ W P S(P)) ⇒ ((∀x : x ∈ seq.A : P.x))

As equações a seguir definem o operador snoc (denotado ▷, em oposição, logicamente ao operador cons, ◁). ⊥ ▷ a .=. a ◁ ⊥ (24) (a ◁ x) ▷ b .=. a ◁ (x ▷ b) (25) As equações a seguir definem um operador cat (denotado ˆ ˆ ˆ ˆ ˆˆ ) para concatenar duas seqüências.

⊥ˆ ˆ ˆ ˆ ˆˆ y = y (26) (a ◁ x)ˆ ˆ ˆ ˆ ˆˆ y = .a ◁ (xˆ ˆ ˆ ˆ ˆˆ y) (27)

Pertinência em uma seqüência é definida a seguir. a ∉ ⊥ (28) a ∈ (b ◁ x) =. a = b ∨ a ∈ x (29) (30)

⊥. ↗ (31) a ◁ x. ↗= x. ↗ ∧(∀b : b ∈ x : a ≤ b) (32) Exercício 2. Dados os axiomas min ⊥ = +∞ (33) min.a ◁ x = a ↓ .min x (34) prove que

(1) (∀x : x ∈ seq.A : min x = (↓a : a ∈ seq.A : a))

(2) (∀x : x ∈ seq.A : (∀a : a ∈ x : min x ≤ a))

ADT: WARM UP 5

De agora em diante, e assumindo os resultados do exercício 2, quando x for uma seqüência, valerá a seguinte notação:

↓ x = min x

Exercício 3. Dados os axiomas del a ⊥ = ⊥ (35) a = b ⇒. del a (b ◁ x) = x (36) a ≠ b ⇒. del a (b ◁ x) = b ◁ (del a x) (37) Prove

(∀a : a ∈ A : (∀b : b ∈ x : ↓ x ≤ (del b x)))

Exercício 4. Dados os axiomas selSort⊥ = ⊥ (38) x ≠ ⊥ ⇒. selSort x = (↓ x) ◁ .selSort.del (↓ x) x (39) Prove que

(selSort x) ↗

Exercício 5. Dados os axiomas rev ⊥ = ⊥ (40) rev (a ◁ x) = (rev x) ▷ a (41) prove que

(1) rev .xˆ ˆ ˆ ˆ ˆˆ y = (rev y)ˆ ˆ ˆ ˆ ˆˆ (rev x)

(2) rev .xˆ ˆ ˆ ˆ ˆˆ yˆ ˆ ˆ ˆ ˆˆ z = rev z.ˆ ˆ ˆ ˆ ˆˆ .rev yˆ ˆ ˆ ˆ ˆˆ .rev x

(3) rev (x ▷ a) =. a ◁ .rev x Exercício 6. Considere os axiomas: ispref(⊥, x) (42) ¬ispref(a ◁ x, ⊥) (43) ispref(a ◁ x, b ◁ y) =. a = b ∧ ispref(x, y) (44) Prove que

ispref(x, y) = (∃z : z ∈ seq.a : y = xˆ ˆ ˆ ˆ ˆˆ z)

4. Árvore binária de pesquisa

Os axiomas a seguir definem uma árvore binária sobre um conjunto (tipo de dados) A:

⊥ ∈ bint.A (45) x, y ∈ bint.A ∧ a ∈ A ⇒ ⟨x, a, y⟩ ∈ bint.A (46)

(47) Fecho universal sobre 45, 46 (48)

A altura de uma árvore é dada pelos axiomas a seguir:

h⊥ = 0 (49) h⟨x, a, y⟩ = 1 + (hx) ↑ (hy) (50)

Os axiomas a seguir estabelecem o conceito de pertinência em árvore binária.

a ∉ ⊥ (51) a ∈ ⟨x, b, y⟩ = a ∈ x ∨ a = b ∨ a ∈ y (52)

O princípio de indução para árvores binárias estabelece uma indução sobre altura da árvore. Sua definição baseia-se no princípio de indução sobre ℕ, o conjunto dos inteiros não negativos. O axioma 54, a seguir, define o princípio de indução sobre inteiros não negativos, onde P.i é uma propriedade qualquer parametrizada em relação a i.

(53) SP S(P) =^{△} (∀n : n ∈ ℕ : (∀i ∈ ℕ : 0 ≤ i < n : P.i) ⇒ P.n)
(54) SP I(P) =^{△} SP S(P) ⇒ (∀n : n ∈ ℕ : P.n)

Exercício 7. Prove que

SP S(P) = (∀n : n ∈ ℕ : P.n)

O axioma de indução sobre árvores binárias é obtido de 54 substituindo P.i por uma propriedade R que se objetiva provar sobre árvores de altura i.

BINT P (R, i) =^{△} (∀x ∈ bint.A : hx = i : R.x) (55)
(∀x : x ∈ bint.A : R.x) = (56)

(∀n : n ∈ ℕ : (∀i ∈ ℕ : 0 ≤ i < n : BINT P (R, i)) ⇒ BINT P (R, n))

Exercício 8. Prove que o axioma 56 estabelece que, para provar que uma propriedade R vale para qualquer árvore binária, basta provar que:

ADT: WARM UP 7

• R vale para a árvore vazia;

• o fato de que R vale para qualquer árvore de altura menor do que k, implica que R vale para qualquer árvore de altura k, onde k é qualquer inteiro positivo.

As considções de ordenação de uma árvore binária são definidas a seguir. (⊥) ↗ (57)

(58)  ⟨x, a, y⟩ ↗=x ↗
∧ y ↗
∧ (∀b : b ∈ x : b < a)
∧ (∀b : b ∈ x : b > a)

Exercício 9. Assumindo que x e y são árvores binárias, e dados os axiomas a ⇝ ⊥ = ⟨⊥, a, ⊥⟩ (59) a < b ⇒. a ⇝ ⟨x, b, y⟩ = ⟨a ⇝ x, b, y⟩ (60) a = b ⇒. a ⇝ ⟨x, b, y⟩ = ⟨x, b, y⟩ (61) a > b ⇒. a ⇝ ⟨x, b, y⟩ = ⟨x, b, a ⇝ y⟩ (62) Prove:

(1) b ∈ a ⇝ x =. a = b ∨ b ∈ x

(2) x. ↗⇒ (a ⇝ x) ↗ Exercício 10. Assumindo que x e y são árvores binárias, e dados os axiomas ↓ ⟨⊥, a, y⟩ = a (63) ↓ ⟨x, a, y⟩ =↓ x (64) del a ⊥ = ⊥ (65) a = b ⇒. del a ⟨⊥, b, y⟩ = y (66) a = b ⇒. del a ⟨x, b, y⟩ = ⟨del (↓ x) x, ↓ x, y⟩ (67) a < b ⇒. del a ⟨x, b, y⟩ = ⟨del a x, b, y⟩ (68) a > b ⇒. del a ⟨x, b, y⟩ = ⟨x, b, del a y⟩ (69) (70) Prove

(1) (x) ↗⇒ (del a x) ↗

(2) a ∈ del b x =. a ≠ b ∧ a ∈ x

Referências

1. Haskell B. Curry, Foundations of mathematical logic, Dover Publications, Inc., 1977.

2. David Gries and Fred B.Schneider, A logical approach to discrete mathematics, Springer-Verlag, 1993.

3. Stephen Cole Kleene, Introduction to metamathematics, North-Holland Publishing CO., 1964.