slides eqs 1

advertisement
Algebraı̈sche Specificaties
We veronderstellen gegeven twee eindige verzamelingen:
• datasoorten, genoteerd met s, en
• functiesymbolen, genoteerd met f .
Ieder functiesymbool f heeft een typering
f : s1 × · · · × sn → s.
Voorbeeld: Soorten nat en bool.
0
succ
add
mul
:
:
:
:
→ nat
nat → nat
nat × nat → nat
nat × nat → nat
T
F
and
or
not
:
:
:
:
:
→ bool
→ bool
bool × bool → bool
bool × bool → bool
bool → bool
even : nat → bool
odd : nat → bool
2
Signatuur
Een signatuur bestaat uit twee eindige verzamelingen:
• S van soorten, en
• Σ van functiesymbolen, voorzien van een
typering:
f : s1 × · · · × sn → s
c :→ s (oftewel n is 0) heet een constante.
Voorbeeld: Stacks.
S is {data, stack}
Σ bestaat uit:
d1, . . . , dn : → data
empty : → stack
push : data × stack → stack
pop : stack → stack
top : stack → data
error : → data
3
Termen
Gegeven een signatuur (S, Σ).
X is een S-soortige verzameling (Xs)s∈S van
variabelen:
• Xs ∩ Xs′ is leeg als s 6≡ s′.
• De variabelen in Xs zijn van soort s.
Constanten en variabelen zijn termen van eigen soort.
Laat f ∈ Σ met
f : s1 × · · · × sn → s
(en n > 0), en t1, . . . , tn termen van soort
s1, . . . , sn. Dan is
f (t1, . . . , tn)
een term van soort s.
De collectie termen wordt genoteerd met Ter Σ(X).
4
Een gesloten term bevat geen variabelen. Anders heet hij open.
Voorbeeld: add(succ(x), 0) en mul(0, add(y, z))
zijn open termen.
succ(add(0, succ(0))) is een gesloten term.
Equationale Specificaties
Een vergelijking is van de vorm
t=u
waarbij t en u termen van dezelfde soort zijn.
Een equationele specificatie is een verzameling
vergelijkingen.
Equationele specificaties van data-types zijn
relatief eenvoudig, en executeerbaar als een termherschrijfsysteem.
5
Voorbeeld: Naturals.
[N1]
add(x, 0) = x
[N2] add(x, succ(y)) = succ(add(x, y))
[N3]
mul(x, 0) = 0
[N4] mul(x, succ(y)) = add(mul(x, y), x)
Een afleiding van één plus één is twee:
add(succ(0), succ(0)) = succ(add(succ(0), 0))
= succ(succ(0))
Vraag: Geef een afleiding van
mul(succ(0), succ(0)) = succ(0)
6
Vraag: Geef een equationele specificatie voor
de Booleans, met als functiesymbolen:
T
F
and
or
not
De specificaties van Naturals en Booleans
kunnen tezamen genomen worden tot een gemengde specificatie.
Vraag: Specificeer ook
even, odd : nat → bool
Vraag: Geef een equationele specificatie voor
Stacks, met als functiesymbolen:
empty
push
pop
top
7
Substituties
Laat (S, Σ) een signatuur zijn, en X een Ssoortige verzameling variabelen.
Een substitutie is een functie
θ : X → Ter Σ(X)
waarbij θ(x) steeds een term van dezelfde soort
als de variabele x is.
Zo’n functie θ kan inductief worden uitgebreid
tot een functie θ̄ : Ter Σ(X) → Ter Σ(X):
θ̄(x)
≡ θ(x)
θ̄(f (t1, . . . , tn)) ≡ f (θ̄(t1), . . . , θ̄(tn))
8
Afleidbaarheid
De uit een equationele specificatie E afleidbare
vergelijkingen worden recursief gedefinieerd:
(axioma’s) De vergelijkingen in E heten
axioma’s en zijn afleidbaar uit E.
(reflexiviteit) Elke vergelijking t = t is
afleidbaar uit E.
(symmetrie) Als t = u afleidbaar is uit E,
dan is u = t dat ook.
(transitiviteit) Als t1 = t2 en t2 = t3
afleidbaar zijn uit E, dan is t1 = t3 dat ook.
(congruentie) Laat t1, . . . , tn van soort
s1, . . . , sn zijn, en f : s1 × · · · × sn → s.
Als ti = ui voor i ∈ {1, . . . , n} afleidbaar zijn
uit E, dan is f (t1, . . . , tn) = f (u1, . . . , un)
afleidbaar uit E.
(substitutie) Laat θ een substitutie zijn. Als
t = u afleidbaar is uit E, dan is θ̄(t) = θ̄(u)
ook afleidbaar uit E.
9
E ⊢ t = u noteert dat t = u afleidbaar is uit
E.
Vraag: Leid uit onderstaande axioma’s af:
even(add(succ(succ(0)), succ(0))) = F
[N1]
add(x, 0) = x
[N2] add(x, succ(y)) = succ(add(x, y))
[E1]
even(0) = T
[E2] even(succ(x)) = odd(x)
[E3]
odd(0) = F
[E4]
odd(succ(x)) = even(x)
Welke van deze zes axioma’s wordt in bovenstaande afleiding niet gebruikt?
Kan add(x, y) = add(y, x) worden afgeleid van
axioma’s [N1] en [N2]?
Download