Metody matematyczne w semantyce j˛ezyków programowania

Transkrypt

Metody matematyczne w semantyce j˛ezyków programowania
Metody matematyczne w semantyce
j˛ezyków programowania
Paweł Waszkiewicz
[email protected]
Informatyka Teoretyczna
Uniwersytet Jagielloński
Metody matematyczne w semantyce jezyków
˛
programowania – p. 1/6
Semantyka
Semantyka to po prostu znaczenie.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 2/6
Semantyka
Semantyka to po prostu znaczenie.
Gdy mówimy o semantyce (fragmentu) programu, to
mamy na myśli oczekiwany wynik, rezultat wykonania
programu, który stanowi jego znaczenie.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 2/6
Semantyka
Semantyka to po prostu znaczenie.
Gdy mówimy o semantyce (fragmentu) programu, to
mamy na myśli oczekiwany wynik, rezultat wykonania
programu, który stanowi jego znaczenie.
Na przykład, semantyka˛ fragmentu programu
if x = 0 then 1 else x ∗ f (x − 1)
jest funkcja silnia.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 2/6
Semantyka
Semantyka to po prostu znaczenie.
Gdy mówimy o semantyce (fragmentu) programu, to
mamy na myśli oczekiwany wynik, rezultat wykonania
programu, który stanowi jego znaczenie.
Na przykład, semantyka˛ fragmentu programu
if x = 0 then 1 else x ∗ f (x − 1)
jest funkcja silnia.
Semantyka jezyka
˛
programowania jest wiec
˛ niczym
innym, tylko znaczeniem poszczególnych konstrukcji
składniowych definiujacych
˛
jezyk.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 2/6
Trzy style semantyki
Semantyka aksjomatyczna. Znaczenie programu
definiuje sie˛ aksjomatycznie, podajac
˛ reguły pewnej
logiki własności programu.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 3/6
Trzy style semantyki
Semantyka aksjomatyczna. Znaczenie programu
definiuje sie˛ aksjomatycznie, podajac
˛ reguły pewnej
logiki własności programu.
Semantyka operacyjna. Znaczenie programu definiuje
sie˛ podajac
˛ dozwolone kroki obliczeniowe w trakcie
wykonania tego programu.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 3/6
Trzy style semantyki
Semantyka aksjomatyczna. Znaczenie programu
definiuje sie˛ aksjomatycznie, podajac
˛ reguły pewnej
logiki własności programu.
Semantyka operacyjna. Znaczenie programu definiuje
sie˛ podajac
˛ dozwolone kroki obliczeniowe w trakcie
wykonania tego programu.
Semantyka denotacyjna. Określa matematyczny model
jezyka
˛
programowania. Znaczenie programu definiuje
sie˛ abstrakcyjnie jako element odpowiedniej struktury
matematycznej.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 3/6
Semantyka operacyjna
dana przez indukcyjnie zdefiniowana˛ relacje˛ ewaluacji
E⇓V
ozn.: program E redukuje sie˛ do wartości V
(wartości to wyniki obliczeń programu).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 4/6
Semantyka operacyjna
dana przez indukcyjnie zdefiniowana˛ relacje˛ ewaluacji
E⇓V
ozn.: program E redukuje sie˛ do wartości V
(wartości to wyniki obliczeń programu).
Na przykład, jeśli E jest wyrażeniem boolowskim , to
E ⇓ V opisuje sytuacje,
˛ gdy E przyjmuje wartość
V ∈ {true, f alse}.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 4/6
Semantyka operacyjna
dana przez indukcyjnie zdefiniowana˛ relacje˛ ewaluacji
E⇓V
ozn.: program E redukuje sie˛ do wartości V
(wartości to wyniki obliczeń programu).
Na przykład, jeśli E jest wyrażeniem boolowskim , to
E ⇓ V opisuje sytuacje,
˛ gdy E przyjmuje wartość
V ∈ {true, f alse}.
Uwaga! Dla programu E może nie istnieć wartość V
taka, że E ⇓ V , gdyż nie każdy program E kończy
obliczenia.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 4/6
Równość programów
Dwa programy E1 i E2 sa˛ obserwowalnie równe wtedy i
tylko wtedy, gdy
C[E1 ] ⇓ V ⇐⇒ C[E2 ] ⇓ V
dla wszystkich kontekstów C[·] i wszystkich wartości V .
Metody matematyczne w semantyce jezyków
˛
programowania – p. 5/6
Równość programów
Dwa programy E1 i E2 sa˛ obserwowalnie równe wtedy i
tylko wtedy, gdy
C[E1 ] ⇓ V ⇐⇒ C[E2 ] ⇓ V
dla wszystkich kontekstów C[·] i wszystkich wartości V .
obserwowalna równość jest trudna do sprawdzenia,
gdyż definicja wymaga kwantyfikacji po wszystkich
kontekstach
Metody matematyczne w semantyce jezyków
˛
programowania – p. 5/6
Semantyka denotacyjna
Tu każdemu fragmentowi programu E jest przypisana
jego denotacja [[E]], czyli matematyczny obiekt
reprezentujacy
˛ jego znaczenie
Metody matematyczne w semantyce jezyków
˛
programowania – p. 6/6
Semantyka denotacyjna
Tu każdemu fragmentowi programu E jest przypisana
jego denotacja [[E]], czyli matematyczny obiekt
reprezentujacy
˛ jego znaczenie
Przykład
[[if x = 0 then 1 else x ∗ f (x − 1)]] = ! (silnia).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 6/6
Semantyka denotacyjna
Tu każdemu fragmentowi programu E jest przypisana
jego denotacja [[E]], czyli matematyczny obiekt
reprezentujacy
˛ jego znaczenie
Przykład
[[if x = 0 then 1 else x ∗ f (x − 1)]] = ! (silnia).
Obiekt [[E]] ∈ D jest nazywany również znaczeniem,
semantyka,
˛ obiektem semantycznym i jest elementem
pewnego zbioru D zwanego dziedzina˛ semantyczna˛ lub
dziedzina.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 6/6
Semantyka denotacyjna
Tu każdemu fragmentowi programu E jest przypisana
jego denotacja [[E]], czyli matematyczny obiekt
reprezentujacy
˛ jego znaczenie
Przykład
[[if x = 0 then 1 else x ∗ f (x − 1)]] = ! (silnia).
Obiekt [[E]] ∈ D jest nazywany również znaczeniem,
semantyka,
˛ obiektem semantycznym i jest elementem
pewnego zbioru D zwanego dziedzina˛ semantyczna˛ lub
dziedzina.
˛
Cecha˛ charakterystyczna˛ semantyki denotacyjnej jest
to, że znaczenie fragmentu programu zależy wyłacznie
˛
od znaczenia jego podfragmentów. Ta cecha semantyki
denotacyjnej jest nazywana kompozycyjnościa.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 6/6
Przykład kompozycyjności
Majac
˛ dwie funkcje cz˛eściowe
[[C]], [[D]] : Stan → Stan
oraz funkcje˛
[[B]] : Stan → {true, f alse},
definiujemy:
[[if B then C else D ]] = λs ∈ Stan.if ([[B]](s), [[C]](s), [[D]](s)),
gdzie

x
if (b, x, y) := 
y
jeśli b = true,
jeśli b = f alse,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 7/6
Denotacja złożenia instrukcji
Denotacja dwóch nastepuj
˛ acych
˛
po sobie instrukcji
(komend, rozkazów)
[[C; C ′ ]] := [[C ′ ]] ◦ [[C]] = λs ∈ Stan.[[C ′ ]]([[C]](s))
jest złożeniem dwóch funkcji cz˛eściowych
[[C]], [[C ′ ]] : Stan → Stan,
które sa˛ denotacjami instrukcji C, C ′ .
Metody matematyczne w semantyce jezyków
˛
programowania – p. 8/6
Prosty j˛ezyk imperatywny IMP
SKŁADNIA:
W yr zbiór wyrażeń boolowskich (ozn. b)
Akc zbiór prymitywnych akcji
(ozn. a)
Zd
zbiór zdań
(ozn. z)
dany przez gramatyk˛e:
z ::= a | skip | z;z | (if b then z else z)
Metody matematyczne w semantyce jezyków
˛
programowania – p. 9/6
Prosty j˛ezyk imperatywny IMP
SKŁADNIA:
W yr zbiór wyrażeń boolowskich (ozn. b)
Akc zbiór prymitywnych akcji
(ozn. a)
Zd
zbiór zdań
(ozn. z)
dany przez gramatyk˛e:
z ::= a | skip | z;z | (if b then z else z)
OBIEKTY SEMANTYCZNE (DZIEDZINY):
Bool = {true, f alse}
zbiór wart. logicznych
(ozn. t)
Stan
zbiór stanów programu (ozn. s)
Roz ⊆ (Stan → Stan) zbiór rozkazów
(ozn. θ)
Metody matematyczne w semantyce jezyków
˛
programowania – p. 9/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
[[·]] : W yr → (Stan → Bool) jest zadana z góry
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
[[·]] : W yr → (Stan → Bool) jest zadana z góry
[[·]] : Akc → Roz jest zadana z góry
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
[[·]] : W yr → (Stan → Bool) jest zadana z góry
[[·]] : Akc → Roz jest zadana z góry
[[·]] : Zd → Roz jest zdefiniowana za pomoca˛ dwóch
poprzednich funkcji zgodnie z wymogiem
kompozycyjności:
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
[[·]] : W yr → (Stan → Bool) jest zadana z góry
[[·]] : Akc → Roz jest zadana z góry
[[·]] : Zd → Roz jest zdefiniowana za pomoca˛ dwóch
poprzednich funkcji zgodnie z wymogiem
kompozycyjności:
[[skip]](s) = s
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
[[·]] : W yr → (Stan → Bool) jest zadana z góry
[[·]] : Akc → Roz jest zadana z góry
[[·]] : Zd → Roz jest zdefiniowana za pomoca˛ dwóch
poprzednich funkcji zgodnie z wymogiem
kompozycyjności:
[[skip]](s) = s
[[z1 ; z2 ]](s) = [[z2 ]]([[z1 ]](s))
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Prosty j˛ezyk imperatywny IMP
DENOTACJA
[[·]] : W yr → (Stan → Bool) jest zadana z góry
[[·]] : Akc → Roz jest zadana z góry
[[·]] : Zd → Roz jest zdefiniowana za pomoca˛ dwóch
poprzednich funkcji zgodnie z wymogiem
kompozycyjności:
[[skip]](s) = s
[[z1 ; z2 ]](s) = [[z2 ]]([[z1 ]](s))
[[if b then z1 else z2 ]](s) = if ([[b]](s), [[z1 ]](s), [[z2 ]](s))
Metody matematyczne w semantyce jezyków
˛
programowania – p. 10/6
Wymagania dla dziedzin
„Zwykłe” zbiory nie nadaja˛ sie˛ na dziedziny:
przypuśćmy, że rozszerzyliśmy IMP o dodatkowe
zdanie z ::= while b do z. Oczekujemy, że:
[[while b do z]] = [[if b then z; while b do z else skip]]
Metody matematyczne w semantyce jezyków
˛
programowania – p. 11/6
Wymagania dla dziedzin
„Zwykłe” zbiory nie nadaja˛ sie˛ na dziedziny:
przypuśćmy, że rozszerzyliśmy IMP o dodatkowe
zdanie z ::= while b do z. Oczekujemy, że:
[[while b do z]] = [[if b then z; while b do z else skip]]
Oznaczajac
˛ θ = [[while b do z]], mamy:
θ(s) = if ([[b]](s), θ([[z]](s)), s).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 11/6
Wymagania dla dziedzin
„Zwykłe” zbiory nie nadaja˛ sie˛ na dziedziny:
przypuśćmy, że rozszerzyliśmy IMP o dodatkowe
zdanie z ::= while b do z. Oczekujemy, że:
[[while b do z]] = [[if b then z; while b do z else skip]]
Oznaczajac
˛ θ = [[while b do z]], mamy:
θ(s) = if ([[b]](s), θ([[z]](s)), s).
W szczególnym przypadku jeśli [[b]] = true i z = skip, to
θ(s) = θ(s), czyli θ może być dowolna; tymczasem
powinna być niezdefiniowana!
Metody matematyczne w semantyce jezyków
˛
programowania – p. 11/6
Wymagania dla dziedzin
„Zwykłe” zbiory nie nadaja˛ sie˛ na dziedziny:
przypuśćmy, że rozszerzyliśmy IMP o dodatkowe
zdanie z ::= while b do z. Oczekujemy, że:
[[while b do z]] = [[if b then z; while b do z else skip]]
Oznaczajac
˛ θ = [[while b do z]], mamy:
θ(s) = if ([[b]](s), θ([[z]](s)), s).
W szczególnym przypadku jeśli [[b]] = true i z = skip, to
θ(s) = θ(s), czyli θ może być dowolna; tymczasem
powinna być niezdefiniowana!
Wniosek: Funkcja θ powinna być funkcja˛ cz˛eściowa.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 11/6
Wymagania dla dziedzin
Każda funkcja cz˛eściowa p : A → B jest równoważna
U
funkcji totalnej p : A → B⊥ , gdzie B⊥ = B {⊥}.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 12/6
Wymagania dla dziedzin
Każda funkcja cz˛eściowa p : A → B jest równoważna
U
funkcji totalnej p : A → B⊥ , gdzie B⊥ = B {⊥}.
Zdanie p(x) = ⊥ jest interpretowane jako: p przyjmuje
dla argumentu x wartość niezdefiniowana.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 12/6
Wymagania dla dziedzin
Każda funkcja cz˛eściowa p : A → B jest równoważna
U
funkcji totalnej p : A → B⊥ , gdzie B⊥ = B {⊥}.
Zdanie p(x) = ⊥ jest interpretowane jako: p przyjmuje
dla argumentu x wartość niezdefiniowana.
˛
w tej interpretacji fragment programu majacy
˛
niezdefiniowane znaczenie może być zawarty w
programie wiekszym,
˛
posiadajacym
˛
nietrywialna˛
semantyk˛e.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 12/6
Wymagania dla dziedzin
Każda funkcja cz˛eściowa p : A → B jest równoważna
U
funkcji totalnej p : A → B⊥ , gdzie B⊥ = B {⊥}.
Zdanie p(x) = ⊥ jest interpretowane jako: p przyjmuje
dla argumentu x wartość niezdefiniowana.
˛
w tej interpretacji fragment programu majacy
˛
niezdefiniowane znaczenie może być zawarty w
programie wiekszym,
˛
posiadajacym
˛
nietrywialna˛
semantyk˛e.
Wniosek: dziedziny semantyczne powinny być
wyposażone w element ⊥. Interpretacja ⊥ sugeruje, że
dowolna funkcja p pomiedzy
˛
dziedzinami powinna
spełniać p(⊥) = ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 12/6
Wymagania dla dziedzin
Przykład dziedziny: płaskie liczby naturalne N⊥ .
x ⊑ y ⇐⇒ (x = ⊥) ∨ (x = y)
Metody matematyczne w semantyce jezyków
˛
programowania – p. 13/6
Wymagania dla dziedzin
Przykład dziedziny: płaskie liczby naturalne N⊥ .
x ⊑ y ⇐⇒ (x = ⊥) ∨ (x = y)
Warunek p(⊥) = ⊥ jest równoważny stwierdzeniu, że
funkcja p : N⊥ → N⊥ jest monotoniczna.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 13/6
Wymagania dla dziedzin
Przykład dziedziny: płaskie liczby naturalne N⊥ .
x ⊑ y ⇐⇒ (x = ⊥) ∨ (x = y)
Warunek p(⊥) = ⊥ jest równoważny stwierdzeniu, że
funkcja p : N⊥ → N⊥ jest monotoniczna.
Podobnie funkcja if : Bool⊥ × Stan⊥ × Stan⊥ → Stan⊥
definiowana jako:



s
jeśli b = true,
if (b, s, s′ ) := s′ jeśli b = f alse,


⊥ jeśli b = ⊥
jest monotoniczna.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 13/6
Wymagania dla dziedzin
Wróćmy do semantyki while: pamietaj
˛ ac,
˛ że
θ = [[while b do z]], równość:
θ(s) = if ([[b]](s), θ([[z]](s)), s)
jest w istocie wymaganiem istnienia punktu stałego:
θ = F (θ)
dla funkcji F = λg.if ([[b]], g ◦ [[z]], 1Stan⊥ ).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 14/6
Wymagania dla dziedzin
Wróćmy do semantyki while: pamietaj
˛ ac,
˛ że
θ = [[while b do z]], równość:
θ(s) = if ([[b]](s), θ([[z]](s)), s)
jest w istocie wymaganiem istnienia punktu stałego:
θ = F (θ)
dla funkcji F = λg.if ([[b]], g ◦ [[z]], 1Stan⊥ ).
A zatem denotacja petli
˛ while jest niczym innym, tylko
punktem stałym funkcji F typu
(Stan⊥ → Stan⊥ ) → (Stan⊥ → Stan⊥ ).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 14/6
Wymagania dla dziedzin
Wróćmy do semantyki while: pamietaj
˛ ac,
˛ że
θ = [[while b do z]], równość:
θ(s) = if ([[b]](s), θ([[z]](s)), s)
jest w istocie wymaganiem istnienia punktu stałego:
θ = F (θ)
dla funkcji F = λg.if ([[b]], g ◦ [[z]], 1Stan⊥ ).
A zatem denotacja petli
˛ while jest niczym innym, tylko
punktem stałym funkcji F typu
(Stan⊥ → Stan⊥ ) → (Stan⊥ → Stan⊥ ).
Wniosek: Każda funkcja miedzy
˛
dziedzinami powinna
posiadać (najmniejszy) punkt stały.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 14/6
Kategoria Dcpo
Podzbiór D ⊆ P posetu P jest skierowany jeśli jest
niepusty i dla każdej pary x, y ∈ D istnieje z ∈ D taki,
że x, y ⊑ z.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 15/6
Kategoria Dcpo
Podzbiór D ⊆ P posetu P jest skierowany jeśli jest
niepusty i dla każdej pary x, y ∈ D istnieje z ∈ D taki,
że x, y ⊑ z.
Poset nazywamy zupełnym, jeśli każdy jego podzbiór
skierowany posiada supremum.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 15/6
Kategoria Dcpo
Podzbiór D ⊆ P posetu P jest skierowany jeśli jest
niepusty i dla każdej pary x, y ∈ D istnieje z ∈ D taki,
że x, y ⊑ z.
Poset nazywamy zupełnym, jeśli każdy jego podzbiór
skierowany posiada supremum.
Funkcje˛ f : P → Q nazywamy ciagł
˛ a,
˛ jeśli zachowuje
suprema zbiorów skierowanych:
_
f(
D) =
_
f (d).
d∈D
Metody matematyczne w semantyce jezyków
˛
programowania – p. 15/6
Kategoria Dcpo
Podzbiór D ⊆ P posetu P jest skierowany jeśli jest
niepusty i dla każdej pary x, y ∈ D istnieje z ∈ D taki,
że x, y ⊑ z.
Poset nazywamy zupełnym, jeśli każdy jego podzbiór
skierowany posiada supremum.
Funkcje˛ f : P → Q nazywamy ciagł
˛ a,
˛ jeśli zachowuje
suprema zbiorów skierowanych:
_
f(
D) =
_
f (d).
d∈D
Posety zupełne z elementami najmniejszymi plus
tworza˛ kategorie˛ idealnie nadajac
˛ a˛ sie˛ na
funkcje ciagłe
˛
uniwersum dziedzin semantycznych.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 15/6
Prof. Dana S. Scott
fot. Andrej Bauer
Ur. 1932 – informatyk, logik, filozof.
W latach 1972-1981 pracował na
Uniwersytecie Oxfordzkim jako profesor logiki matematycznej. Tu razem z Ch. Stracheyem stworzył teorie˛ dziedzin i podstawy semantyki
denotacyjnej. W 1976 roku został
uhonorowany nagroda˛ Turinga, fundowana˛ przez Towarzystwo ACM.
Kariere˛ profesorska˛ Scott zakończył
w 2003 na Uniwersytecie Carnegie
Mellon w Pittsburgu, choć wykłada i
bierze udział w konferencjach informatycznych do dziś.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 16/6
Twierdzenie o punkcie stałym
TWIERDZENIE (Scott): Każda funkcja ciagła
˛
f: P →P
na posecie zupełnym z elementem najmniejszym
⊥ ∈ P posiada najmniejszy punkt stały
f ix(f ) =
{f n (⊥) | n ∈ ω}.
_
Co wiecej,
˛
operator f ix : [P, P ] → P , f 7→ f ix(f ) jest
ciagły.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 17/6
Twierdzenie o punkcie stałym
TWIERDZENIE (Scott): Każda funkcja ciagła
˛
f: P →P
na posecie zupełnym z elementem najmniejszym
⊥ ∈ P posiada najmniejszy punkt stały
f ix(f ) =
{f n (⊥) | n ∈ ω}.
_
Co wiecej,
˛
operator f ix : [P, P ] → P , f 7→ f ix(f ) jest
ciagły.
˛
Dowód: ⊥ ⊑ f (⊥).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 17/6
Twierdzenie o punkcie stałym
TWIERDZENIE (Scott): Każda funkcja ciagła
˛
f: P →P
na posecie zupełnym z elementem najmniejszym
⊥ ∈ P posiada najmniejszy punkt stały
f ix(f ) =
{f n (⊥) | n ∈ ω}.
_
Co wiecej,
˛
operator f ix : [P, P ] → P , f 7→ f ix(f ) jest
ciagły.
˛
Dowód: ⊥ ⊑ f (⊥).
Z monotoniczności:
f (⊥) ⊑ f 2 (⊥) ⊑ f 3 (⊥) ⊑ ... ⊑ f n (⊥) ⊑ ...
Metody matematyczne w semantyce jezyków
˛
programowania – p. 17/6
Twierdzenie o punkcie stałym
TWIERDZENIE (Scott): Każda funkcja ciagła
˛
f: P →P
na posecie zupełnym z elementem najmniejszym
⊥ ∈ P posiada najmniejszy punkt stały
f ix(f ) =
{f n (⊥) | n ∈ ω}.
_
Co wiecej,
˛
operator f ix : [P, P ] → P , f 7→ f ix(f ) jest
ciagły.
˛
Dowód: ⊥ ⊑ f (⊥).
Z monotoniczności:
f (⊥) ⊑ f 2 (⊥) ⊑ f 3 (⊥) ⊑ ... ⊑ f n (⊥) ⊑ ...
Z ciagłości:
˛
W
W
W
n
n
f ( n∈ω f (⊥)) = n∈ω f (f (⊥)) = n∈ω f n (⊥).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 17/6
Twierdzenie o punkcie stałym
Jeśli x ∈ D jest innym punktem stałym f , to ⊥ ⊑ x oraz
f (⊥) ⊑ f (x) = x, ..., f n (⊥) ⊑ f n (x) = x.
Prosta indukcja pokazuje wiec,
˛ że
f ix(f ) =
_
f n (⊥) ⊑ x.
n∈ω
Dowiedliśmy zatem, że f ix(f ) jest najmniejszym
punktem stałym funkcji f .
Metody matematyczne w semantyce jezyków
˛
programowania – p. 18/6
Twierdzenie o punkcie stałym
Pokażemy teraz, że operator f ix jest ciagły.
˛
Rozważmy
dla każdego n ∈ ω funkcje˛ itn : [P, P ] → P
itn (f ) = f n (⊥).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 19/6
Twierdzenie o punkcie stałym
Pokażemy teraz, że operator f ix jest ciagły.
˛
Rozważmy
dla każdego n ∈ ω funkcje˛ itn : [P, P ] → P
itn (f ) = f n (⊥).
Funkcja it0 , przyporzadkowuj
˛
aca
˛ każdej funkcji f
element najmniejszy ⊥, jest funkcja˛ ciagł
˛ a.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 19/6
Twierdzenie o punkcie stałym
Pokażemy teraz, że operator f ix jest ciagły.
˛
Rozważmy
dla każdego n ∈ ω funkcje˛ itn : [P, P ] → P
itn (f ) = f n (⊥).
Funkcja it0 , przyporzadkowuj
˛
aca
˛ każdej funkcji f
element najmniejszy ⊥, jest funkcja˛ ciagł
˛ a.
˛
Indukcyjnie: itn jest funkcja˛ ciagł
˛ a˛ dla każdego n ∈ ω.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 19/6
Twierdzenie o punkcie stałym
Pokażemy teraz, że operator f ix jest ciagły.
˛
Rozważmy
dla każdego n ∈ ω funkcje˛ itn : [P, P ] → P
itn (f ) = f n (⊥).
Funkcja it0 , przyporzadkowuj
˛
aca
˛ każdej funkcji f
element najmniejszy ⊥, jest funkcja˛ ciagł
˛ a.
˛
Indukcyjnie: itn jest funkcja˛ ciagł
˛ a˛ dla każdego n ∈ ω.
Funkcje {itn | n ∈ ω} tworza˛ łańcuch, którego
supremum jest f ix.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 19/6
while X > 0 do (Y := X ∗ X; X := X − 1),
(Andy Pitts) Przedyskutujmy semantyk˛e powyższej
petli,
˛ gdy zbiór stanów programu jest posetem Stan⊥ ,
gdzie Stan = N × N (z porzadkiem
˛
po współrz˛ednych):
Metody matematyczne w semantyce jezyków
˛
programowania – p. 20/6
while X > 0 do (Y := X ∗ X; X := X − 1),
(Andy Pitts) Przedyskutujmy semantyk˛e powyższej
petli,
˛ gdy zbiór stanów programu jest posetem Stan⊥ ,
gdzie Stan = N × N (z porzadkiem
˛
po współrz˛ednych):
[[X > 0]] jest funkcja,
˛ która parze (x, y) ∈ Stan⊥
przypisze wartość true, jeśli x > 0, przypisze wartość
false, jeśli x ¬ 0 oraz przypisze wartość ⊥ jeśli x = ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 20/6
while X > 0 do (Y := X ∗ X; X := X − 1),
(Andy Pitts) Przedyskutujmy semantyk˛e powyższej
petli,
˛ gdy zbiór stanów programu jest posetem Stan⊥ ,
gdzie Stan = N × N (z porzadkiem
˛
po współrz˛ednych):
[[X > 0]] jest funkcja,
˛ która parze (x, y) ∈ Stan⊥
przypisze wartość true, jeśli x > 0, przypisze wartość
false, jeśli x ¬ 0 oraz przypisze wartość ⊥ jeśli x = ⊥.
Załóżmy też, że [[Y := X ∗ Y ]] jest funkcja˛ dana˛ z góry
jako
[[Y := X ∗ Y ]](x, y) = (x, xy)
oraz [[X := X − 1]] jest funkcja˛ dana˛ z góry jako
[[X := X − 1]](x, y) = (x − 1, y).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 20/6
θ = [[while X > 0 do (Y := X ∗ X; X := X − 1)]],
Zgodnie z wymogiem kompozycyjności
[[Y := X ∗ Y ; X = X − 1]](x, y) =
[[X = X − 1]](x, xy) = (x − 1, xy).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 21/6
θ = [[while X > 0 do (Y := X ∗ X; X := X − 1)]],
Zgodnie z wymogiem kompozycyjności
[[Y := X ∗ Y ; X = X − 1]](x, y) =
[[X = X − 1]](x, xy) = (x − 1, xy).
Pamietaj
˛ ac
˛ że
F (θ) = θ = if ([[X > 0]], θ[[Y := X ∗Y ; X = X −1]], 1Stan⊥ )
dostaniemy



(x, y)
jeśli x = 0
F (θ)(x, y) = θ(x − 1, xy) jeśli x > 0


⊥
w przeciwnym przypadku.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 21/6
F (θ)(x, y) = (x, y), jeśli x = 0; θ(x − 1, xy), jeśli x > 0; ⊥ wpp
Aby znaleźć funkcje˛ θ : Stan⊥ → Stan⊥ zastosujemy
metode˛ kolejnych przybliżeń z dowodu tw. Scotta.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 22/6
F (θ)(x, y) = (x, y), jeśli x = 0; θ(x − 1, xy), jeśli x > 0; ⊥ wpp
Aby znaleźć funkcje˛ θ : Stan⊥ → Stan⊥ zastosujemy
metode˛ kolejnych przybliżeń z dowodu tw. Scotta.
Pierwsze przybliżenie θ0 (x, y) = ⊥ ∈ Stan⊥ . Nastepnie
˛
budujemy ciag
˛ dalszych przybliżeń jako θn+1 = F (θn )
dla n ∈ ω.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 22/6
F (θ)(x, y) = (x, y), jeśli x = 0; θ(x − 1, xy), jeśli x > 0; ⊥ wpp
Aby znaleźć funkcje˛ θ : Stan⊥ → Stan⊥ zastosujemy
metode˛ kolejnych przybliżeń z dowodu tw. Scotta.
Pierwsze przybliżenie θ0 (x, y) = ⊥ ∈ Stan⊥ . Nastepnie
˛
budujemy ciag
˛ dalszych przybliżeń jako θn+1 = F (θn )
dla n ∈ ω.

(x, y)
θ1 (x, y) = F (θ0 )(x, y) = 
⊥
jeśli x = 0
jeśli x ­ 1 ∨ (x, y) = ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 22/6
F (θ)(x, y) = (x, y), jeśli x = 0; θ(x − 1, xy), jeśli x > 0; ⊥ wpp
Aby znaleźć funkcje˛ θ : Stan⊥ → Stan⊥ zastosujemy
metode˛ kolejnych przybliżeń z dowodu tw. Scotta.
Pierwsze przybliżenie θ0 (x, y) = ⊥ ∈ Stan⊥ . Nastepnie
˛
budujemy ciag
˛ dalszych przybliżeń jako θn+1 = F (θn )
dla n ∈ ω.

(x, y)
jeśli x = 0
jeśli x ­ 1 ∨ (x, y) = ⊥.



(x, y)
jeśli x = 0
jeśli x = 1
jeśli x ­ 2 ∨ (x, y) = ⊥.
θ1 (x, y) = F (θ0 )(x, y) = 
⊥
θ2 (x, y) = F (θ1 )(x, y) = (0, y)


⊥
Metody matematyczne w semantyce jezyków
˛
programowania – p. 22/6
F (θ)(x, y) = (x, y), jeśli x = 0; θ(x − 1, xy), jeśli x > 0; ⊥ wpp
θ3 (x, y) = F (θ2 )(x, y) =


(x, y) jeśli x = 0




(0, y)
jeśli x = 1

(0, 2y) jeśli x = 2




⊥
jeśli x ­ 3 ∨ (x, y) = ⊥,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 23/6
F (θ)(x, y) = (x, y), jeśli x = 0; θ(x − 1, xy), jeśli x > 0; ⊥ wpp
θ3 (x, y) = F (θ2 )(x, y) =


(x, y) jeśli x = 0




(0, y)
jeśli x = 1

(0, 2y) jeśli x = 2




⊥
jeśli x ­ 3 ∨ (x, y) = ⊥,
θ4 (x, y) = F (θ3 )(x, y) =

(x, y) jeśli x = 0






jeśli x = 1

(0, y)
(0, 2y) jeśli x = 2




(0, 6y) jeśli x = 3




⊥
jeśli x ­ 4 ∨ (x, y) = ⊥,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 23/6
θ∞ = [[while X > 0 do (Y := X ∗ X; X := X − 1)]],
i w ogólności



(x, y)
jeśli x = 0
θn (x, y) = (0, (x!)y) jeśli 0 < x < n


⊥
jeśli x ­ 4 ∨ (x, y) = ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 24/6
θ∞ = [[while X > 0 do (Y := X ∗ X; X := X − 1)]],
i w ogólności



(x, y)
jeśli x = 0
θn (x, y) = (0, (x!)y) jeśli 0 < x < n


⊥
jeśli x ­ 4 ∨ (x, y) = ⊥.
Widzimy, że wartości funkcji θ0 , θ1 , θ2 , ... zgadzaja˛ sie˛ na
wspólnych argumentach, a wiec
˛ ich suma
mnogościowa jest dobrze zdefiniowana˛ funkcja;
˛
nazwijmy ja˛ θ∞ . Jak łatwo sprawdzić, θ∞ jest dana jako

(x, y)
θ∞ (x, y) = 
(0, (x!)y)
jeśli x = 0
jeśli x > 0.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 24/6
θ∞ = [[while X > 0 do (Y := X ∗ X; X := X − 1)]],
Czy θ∞ = F (θ∞ )? Tak, ponieważ:

(x, y)
jeśli x = 0
F (θ∞ )(x, y) = 
θ∞ (x − 1, xy) jeśli x > 0



(x, y)
jeśli x = 0
= (0, y)
jeśli x = 1


(0, (x − 1)!xy) jeśli x > 1
= θ∞ (x, y).
Zgodnie z twierdzeniem Scotta θ∞ jest najmniejszym
˛ spełnia wszystkie warunki,
punktem stałym funkcji F , a wiec
aby móc pretendować do roli semantyki petli
˛ while.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 25/6
Liczby naturalne
Poset ω nie jest zupełny, ponieważ
łańcuch ω nie ma supremum.
Funkcja nastepnik
˛
jest ciagła,
˛
ale nie
posiada żadnego punktu stałego.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 26/6
Odcinek
Odcinek [0,1] z naturalnym porzad˛
kiem jest krata˛ zupełna,
˛ a wiec
˛ w
szczególności posetem zupełnym.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 27/6
Dziedzina pododcinków [0, 1]
Niech I[0, 1] oznacza zbiór wszystkich podprzedziałów domknietych,
˛
niepustych przedziału [0,1] uporzad˛
kowany wzgledem
˛
odwrotnej inkluzji, to znaczy:
[a, b] ⊑ [c, d] ⇐⇒ [a, b] ⊇ [c, d].
Jest to poset zupełny.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 28/6
Zbiór pot˛egowy
Niech X bedzie
˛
dowolnym zbiorem.
Zbiór potegowy
˛
P(X) jest krata˛ zupełna˛ iSdla każdego
Y ⊆ X mamy
W
V
T
Y = Y i Y = Y.
P(X) jest wiec
˛ w szczególności posetem zupełnym. Najmniejszym elementem P(X) jest ∅, a najwiekszym
˛
X.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 29/6
Model zbioru Cantora
Zbiór wszystkich skończonych i nieskończonych ciagów
˛
zerojedynkowych {0, 1}∞ w porzadku
˛
prefiksowym jest
posetem zupełnym. Każdy zbiór skierowany jest
łańcuchem. Elementem najmniejszym jest ciag
˛ pusty ε.
Zbiór elementów maksymalnych pokrywa sie˛ ze zbiorem
wszystkich ciagów
˛
nieskończonych, który posiada strukture˛
zbioru Cantora.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 30/6
Własności posetów zupełnych
TWIERDZENIE (produkt)
Niech D, E bed
˛ a˛ posetami zupełnymi. Wówczas:
Metody matematyczne w semantyce jezyków
˛
programowania – p. 31/6
Własności posetów zupełnych
TWIERDZENIE (produkt)
Niech D, E bed
˛ a˛ posetami zupełnymi. Wówczas:
Zbiór D × E = {(d, e) | d ∈ D, e ∈ E} z porzadkiem
˛
po
współrz˛ednych:
(x1 , y1 ) ⊑ (x2 , y2 ) ⇐⇒ (x1 ⊑ x2 ∧ y1 ⊑ y2 )
jest zupełny.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 31/6
Własności posetów zupełnych
TWIERDZENIE (produkt)
Niech D, E bed
˛ a˛ posetami zupełnymi. Wówczas:
Zbiór D × E = {(d, e) | d ∈ D, e ∈ E} z porzadkiem
˛
po
współrz˛ednych:
(x1 , y1 ) ⊑ (x2 , y2 ) ⇐⇒ (x1 ⊑ x2 ∧ y1 ⊑ y2 )
jest zupełny.
Jeśli D i E posiadaja˛ elementy najmniejsze, to D × E
ma element najmniejszy (⊥D , ⊥E ).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 31/6
Własności - produkt
Projekcje πD : D × E → D i πE : D × E → E dane
odpowiednio przez πD (x, y) = x, πE (x, y) = y sa˛
funkcjami ciagłymi.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 32/6
Własności - produkt
Projekcje πD : D × E → D i πE : D × E → E dane
odpowiednio przez πD (x, y) = x, πE (x, y) = y sa˛
funkcjami ciagłymi.
˛
Jeśli Z jest dowolnym posetem zupełnym, a funkcje
f : Z → D oraz g : Z → E sa˛ ciagłe,
˛
to funkcja
hf, gi : Z → D × E definiowana jako:
∀z ∈ Z hf, gi(z) = (f (z), g(z))
jest ciagła.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 32/6
Własności - eksponent
TWIERDZENIE (eksponent)
Niech D, E bed
˛ a˛ zupełne. Wówczas:
Metody matematyczne w semantyce jezyków
˛
programowania – p. 33/6
Własności - eksponent
TWIERDZENIE (eksponent)
Niech D, E bed
˛ a˛ zupełne. Wówczas:
Zbiór funkcji ciagłych
˛
[D, E] wraz z relacja˛
f ⊑ g ⇐⇒ ∀x ∈ D f (x) ⊑ g(x)
jest posetem zupełnym,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 33/6
Własności - eksponent
TWIERDZENIE (eksponent)
Niech D, E bed
˛ a˛ zupełne. Wówczas:
Zbiór funkcji ciagłych
˛
[D, E] wraz z relacja˛
f ⊑ g ⇐⇒ ∀x ∈ D f (x) ⊑ g(x)
jest posetem zupełnym,
Funkcja ewaluacji ev : [D, E] × D → E definiowana jako:
ev(f, x) = f (x)
dla każdej f ∈ [D, E] oraz x ∈ D, jest funkcja˛ ciagł
˛ a.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 33/6
Własności - eksponent
Ponieważ relacja ⊑ w zbiorze funkcji jest zdefiniowana
poprzez odwołanie do cz˛eściowego porzadku
˛
w E,
[D, E] jest również cz˛eściowym porzadkiem.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 34/6
Własności - eksponent
Ponieważ relacja ⊑ w zbiorze funkcji jest zdefiniowana
poprzez odwołanie do cz˛eściowego porzadku
˛
w E,
[D, E] jest również cz˛eściowym porzadkiem.
˛
Załóżmy, że F jest skierowanym podzbiorem funkcji
ciagłych
˛
z D do E. Pokażemy, że funkcja g : D → E
zdefiniowana jako:
g(x) :=
_
f (x)
f ∈F
jest funkcja˛ ciagł
˛ a˛ (oczywiście g jest supremum F ).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 34/6
Własności - eksponent
Niech A ⊆ D bedzie
˛
skierowany. Mamy:
_
g(
A) =
_
f ∈F
_
f(
A)
Metody matematyczne w semantyce jezyków
˛
programowania – p. 35/6
Własności - eksponent
Niech A ⊆ D bedzie
˛
skierowany. Mamy:
_
g(
A) =
=
_
f ∈F
_ _
_
f(
A)
f (a)
f ∈F a∈A
Metody matematyczne w semantyce jezyków
˛
programowania – p. 35/6
Własności - eksponent
Niech A ⊆ D bedzie
˛
skierowany. Mamy:
_
g(
A) =
=
_
f ∈F
_
f(
_ _
f (a)
_ _
f (a)
A)
f ∈F a∈A
=
a∈A f ∈F
Metody matematyczne w semantyce jezyków
˛
programowania – p. 35/6
Własności - eksponent
Niech A ⊆ D bedzie
˛
skierowany. Mamy:
_
g(
A) =
_
_
f(
f ∈F
=
_ _
f (a)
_ _
f (a)
A)
f ∈F a∈A
=
a∈A f ∈F
=
_
g(a).
a∈A
Metody matematyczne w semantyce jezyków
˛
programowania – p. 35/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
ev( G, x) = ( G)(x) =
W
W
W
g∈G g(x)
=
W
g∈G
ev(g, x).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
ev( G, x) = ( G)(x) =
W
W
W
g∈G g(x)
=
W
g∈G
ev(g, x).
Jeśli A ⊆ D oraz f ∈ [D → E] mamy:
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
ev( G, x) = ( G)(x) =
W
W
W
g∈G g(x)
=
W
g∈G
ev(g, x).
Jeśli A ⊆ D oraz f ∈ [D → E] mamy:
ev(f, A) = f ( A) = a∈A f (a) =
kończy dowód twierdzenia.
W
W
W
W
a∈A
ev(f, a). To
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
ev( G, x) = ( G)(x) =
W
W
W
g∈G g(x)
=
W
g∈G
ev(g, x).
Jeśli A ⊆ D oraz f ∈ [D → E] mamy:
ev(f, A) = f ( A) = a∈A f (a) =
kończy dowód twierdzenia.
W
W
W
W
a∈A
ev(f, a). To
Oczywiście elementem najmniejszym każdego
eksponentu jest funkcja stała o wartości ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
ev( G, x) = ( G)(x) =
W
W
W
g∈G g(x)
=
W
g∈G
ev(g, x).
Jeśli A ⊆ D oraz f ∈ [D → E] mamy:
ev(f, A) = f ( A) = a∈A f (a) =
kończy dowód twierdzenia.
W
W
W
W
a∈A
ev(f, a). To
Oczywiście elementem najmniejszym każdego
eksponentu jest funkcja stała o wartości ⊥.
Produkt i eksponent posiadaja˛ własności uniwersalne.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Ewaluacja funkcja˛ ciagł
˛ a˛
Dla ev(f, x) := f (x) wystarczy pokazać ciagłość
˛
oddzielnie ze wzgledu
˛ na pierwszy i na drugi argument.
Jeśli G ⊆ [D → E] i x ∈ D, mamy:
ev( G, x) = ( G)(x) =
W
W
W
g∈G g(x)
=
W
g∈G
ev(g, x).
Jeśli A ⊆ D oraz f ∈ [D → E] mamy:
ev(f, A) = f ( A) = a∈A f (a) =
kończy dowód twierdzenia.
W
W
W
W
a∈A
ev(f, a). To
Oczywiście elementem najmniejszym każdego
eksponentu jest funkcja stała o wartości ⊥.
Produkt i eksponent posiadaja˛ własności uniwersalne.
TWIERDZENIE. Kategoria Dcpo jest kartezjańsko
zamknieta.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 36/6
Inne potrzeby semantyki denotacyjnej
Nietypowany rachunek λ:
M ::= x | λx.M | (M M )
Metody matematyczne w semantyce jezyków
˛
programowania – p. 37/6
Inne potrzeby semantyki denotacyjnej
Nietypowany rachunek λ:
M ::= x | λx.M | (M M )
Semantyka: rozważamy obiekty D, E, ... takie, że:
termy λ-rachunku sa˛ interpretowane jako elementy
D
aplikacja funkcji do argumentu jest rozumiana jako
aplikacja strzałki f : D → E do argumentu typu D
Metody matematyczne w semantyce jezyków
˛
programowania – p. 37/6
Inne potrzeby semantyki denotacyjnej
Nietypowany rachunek λ:
M ::= x | λx.M | (M M )
Semantyka: rozważamy obiekty D, E, ... takie, że:
termy λ-rachunku sa˛ interpretowane jako elementy
D
aplikacja funkcji do argumentu jest rozumiana jako
aplikacja strzałki f : D → E do argumentu typu D
Dla termu λx.xx pierwsze wolne wystapienie
˛
x musi być
typu [D, D], zaś drugie typu D
Metody matematyczne w semantyce jezyków
˛
programowania – p. 37/6
Inne potrzeby semantyki denotacyjnej
Nietypowany rachunek λ:
M ::= x | λx.M | (M M )
Semantyka: rozważamy obiekty D, E, ... takie, że:
termy λ-rachunku sa˛ interpretowane jako elementy
D
aplikacja funkcji do argumentu jest rozumiana jako
aplikacja strzałki f : D → E do argumentu typu D
Dla termu λx.xx pierwsze wolne wystapienie
˛
x musi być
typu [D, D], zaś drugie typu D
Wniosek: Musimy wymagać, by D ∼
= [D, D]...
Metody matematyczne w semantyce jezyków
˛
programowania – p. 37/6
Definicja kategorii
DEFINICJA: Kategoria C składa sie˛ z nastepuj
˛ acych
˛
danych:
obiektów: A, B, C, ...,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 38/6
Definicja kategorii
DEFINICJA: Kategoria C składa sie˛ z nastepuj
˛ acych
˛
danych:
obiektów: A, B, C, ...,
morfizmów: f, g, h, ...,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 38/6
Definicja kategorii
DEFINICJA: Kategoria C składa sie˛ z nastepuj
˛ acych
˛
danych:
obiektów: A, B, C, ...,
morfizmów: f, g, h, ...,
dwóch operacji dom, cod przypisujacej
˛ każdemu
morfizmowi f obiekty dom(f ) i cod(f ),
Metody matematyczne w semantyce jezyków
˛
programowania – p. 38/6
Definicja kategorii
DEFINICJA: Kategoria C składa sie˛ z nastepuj
˛ acych
˛
danych:
obiektów: A, B, C, ...,
morfizmów: f, g, h, ...,
dwóch operacji dom, cod przypisujacej
˛ każdemu
morfizmowi f obiekty dom(f ) i cod(f ),
operacji 1 przypisujacej
˛ każdemu obiektowi A morfizm
1A nazywany identycznościa,
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 38/6
Definicja kategorii
DEFINICJA: Kategoria C składa sie˛ z nastepuj
˛ acych
˛
danych:
obiektów: A, B, C, ...,
morfizmów: f, g, h, ...,
dwóch operacji dom, cod przypisujacej
˛ każdemu
morfizmowi f obiekty dom(f ) i cod(f ),
operacji 1 przypisujacej
˛ każdemu obiektowi A morfizm
1A nazywany identycznościa,
˛
operacji ◦ przypisujacej
˛ każdej parze morfizmów f, g
takich, że cod(g) = dom(f ) morfizm f ◦ g nazywany
złożeniem,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 38/6
Definicja kategorii
spełniajacych
˛
nastepuj
˛ ace
˛ aksjomaty:
dom(1A ) = A = cod(1A ); dom(f ◦ g) = dom(g);
cod(f ◦ g) = cod(f ),
Metody matematyczne w semantyce jezyków
˛
programowania – p. 39/6
Definicja kategorii
spełniajacych
˛
nastepuj
˛ ace
˛ aksjomaty:
dom(1A ) = A = cod(1A ); dom(f ◦ g) = dom(g);
cod(f ◦ g) = cod(f ),
f ◦ 1A = f = 1B ◦ f , gdzie A = dom(f ) oraz B = cod(f ),
Metody matematyczne w semantyce jezyków
˛
programowania – p. 39/6
Definicja kategorii
spełniajacych
˛
nastepuj
˛ ace
˛ aksjomaty:
dom(1A ) = A = cod(1A ); dom(f ◦ g) = dom(g);
cod(f ◦ g) = cod(f ),
f ◦ 1A = f = 1B ◦ f , gdzie A = dom(f ) oraz B = cod(f ),
jeśli f, g sa˛ składalne oraz g, h sa˛ składalne, to
(f ◦ g) ◦ h = f ◦ (g ◦ h).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 39/6
Przykłady kategorii
Set: zbiory i funkcje
Metody matematyczne w semantyce jezyków
˛
programowania – p. 40/6
Przykłady kategorii
Set: zbiory i funkcje
Dcpo: cz˛eściowe porzadki
˛ i funkcje ciagłe
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 40/6
Przykłady kategorii
Set: zbiory i funkcje
Dcpo: cz˛eściowe porzadki
˛ i funkcje ciagłe
˛
obiekty: elementy posetu P ; morfizmy: a ¬ b
Metody matematyczne w semantyce jezyków
˛
programowania – p. 40/6
Przykłady kategorii
Set: zbiory i funkcje
Dcpo: cz˛eściowe porzadki
˛ i funkcje ciagłe
˛
obiekty: elementy posetu P ; morfizmy: a ¬ b
monoid
Metody matematyczne w semantyce jezyków
˛
programowania – p. 40/6
Przykłady kategorii
Set: zbiory i funkcje
Dcpo: cz˛eściowe porzadki
˛ i funkcje ciagłe
˛
obiekty: elementy posetu P ; morfizmy: a ¬ b
monoid
itd...
Metody matematyczne w semantyce jezyków
˛
programowania – p. 40/6
Funktory
Funktor F : C → D z kategorii C do kategorii D jest dany
poprzez:
operacje˛ przypisujac
˛ a˛ jednoznacznie każdemu
obiektowi X z C obiekt F (X) w D
Metody matematyczne w semantyce jezyków
˛
programowania – p. 41/6
Funktory
Funktor F : C → D z kategorii C do kategorii D jest dany
poprzez:
operacje˛ przypisujac
˛ a˛ jednoznacznie każdemu
obiektowi X z C obiekt F (X) w D
operacje˛ przypisujac
˛ a˛ jednoznacznie każdemu
morfizmowi f z C morfizm F (f ) w D
Metody matematyczne w semantyce jezyków
˛
programowania – p. 41/6
Funktory
Funktor F : C → D z kategorii C do kategorii D jest dany
poprzez:
operacje˛ przypisujac
˛ a˛ jednoznacznie każdemu
obiektowi X z C obiekt F (X) w D
operacje˛ przypisujac
˛ a˛ jednoznacznie każdemu
morfizmowi f z C morfizm F (f ) w D
w ten sposób, że:
jeśli f : X → Y w C, to F (f ) : F (X) → F (Y ) w D
F (1X ) = 1F (X)
F (f ◦ g) = F (f ) ◦ F (g)
Metody matematyczne w semantyce jezyków
˛
programowania – p. 41/6
Przykłady funktorów
Produkt (− × −) jest funktorem:
A, B 7→ A × B
f, g 7→ f × g
Metody matematyczne w semantyce jezyków
˛
programowania – p. 42/6
Przykłady funktorów
Produkt (− × −) jest funktorem:
A, B 7→ A × B
f, g 7→ f × g
Eksponent [−, −] jest funktorem:
A, B 7→ [A, B]
f, g 7→ [f, g] := curry(g ◦ ev ◦ (1 × f )),
gdzie curry(h : X × Y → Z) := λx.h(x) : X → (Y → Z).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 42/6
Przykłady funktorów
Produkt (− × −) jest funktorem:
A, B 7→ A × B
f, g 7→ f × g
Eksponent [−, −] jest funktorem:
A, B 7→ [A, B]
f, g 7→ [f, g] := curry(g ◦ ev ◦ (1 × f )),
gdzie curry(h : X × Y → Z) := λx.h(x) : X → (Y → Z).
przekatna
˛
∆; A 7→ (A, A), f 7→ (f, f ) jest funktorem.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 42/6
Przykłady funktorów
Produkt (− × −) jest funktorem:
A, B 7→ A × B
f, g 7→ f × g
Eksponent [−, −] jest funktorem:
A, B 7→ [A, B]
f, g 7→ [f, g] := curry(g ◦ ev ◦ (1 × f )),
gdzie curry(h : X × Y → Z) := λx.h(x) : X → (Y → Z).
przekatna
˛
∆; A 7→ (A, A), f 7→ (f, f ) jest funktorem.
złożenie funktorów jest funktorem.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 42/6
Inne potrzeby semantyki denotacyjnej
Nietypowany rachunek λ:
M ::= x | λx.M | (M M )
Semantyka: rozważamy obiekty D, E, ... takie, że:
termy λ-rachunku sa˛ interpretowane jako elementy
D
aplikacja funkcji do argumentu jest rozumiana jako
aplikacja strzałki f : D → E do argumentu typu D
Dla termu λx.xx pierwsze wolne wystapienie
˛
x musi być
typu [D, D], zaś drugie typu D
Wniosek: Musimy wymagać, by D ∼
= [D, D]...
Metody matematyczne w semantyce jezyków
˛
programowania – p. 43/6
Rekursywne równania na dziedzinach
Zauważmy, że [D, D] = [−, −] ◦ ∆(D).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 44/6
Rekursywne równania na dziedzinach
Zauważmy, że [D, D] = [−, −] ◦ ∆(D).
A zatem rozwiazaniem
˛
równania D ∼
= [D, D] jest punkt
stały funktora [−, −] ◦ ∆ : Dcpo → Dcpo.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 44/6
Rekursywne równania na dziedzinach
Zauważmy, że [D, D] = [−, −] ◦ ∆(D).
A zatem rozwiazaniem
˛
równania D ∼
= [D, D] jest punkt
stały funktora [−, −] ◦ ∆ : Dcpo → Dcpo.
Dana Scott pokazał, że nietrywialne rozwiazania
˛
istnieja˛ w kategorii Dcpo.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 44/6
Rekursywne równania na dziedzinach
Zauważmy, że [D, D] = [−, −] ◦ ∆(D).
A zatem rozwiazaniem
˛
równania D ∼
= [D, D] jest punkt
stały funktora [−, −] ◦ ∆ : Dcpo → Dcpo.
Dana Scott pokazał, że nietrywialne rozwiazania
˛
istnieja˛ w kategorii Dcpo.
To znaczy, że istnieje poset zupełny nieskończony
izomorficzny z posetem swoich endofunkcji ciagłych!!!
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 44/6
Rekursywne równania na dziedzinach
Zauważmy, że [D, D] = [−, −] ◦ ∆(D).
A zatem rozwiazaniem
˛
równania D ∼
= [D, D] jest punkt
stały funktora [−, −] ◦ ∆ : Dcpo → Dcpo.
Dana Scott pokazał, że nietrywialne rozwiazania
˛
istnieja˛ w kategorii Dcpo.
To znaczy, że istnieje poset zupełny nieskończony
izomorficzny z posetem swoich endofunkcji ciagłych!!!
˛
Przykłady: P(ω) ∼
= [P(ω), P(ω)].
Metody matematyczne w semantyce jezyków
˛
programowania – p. 44/6
Rekursywne równania na dziedzinach
Zauważmy, że [D, D] = [−, −] ◦ ∆(D).
A zatem rozwiazaniem
˛
równania D ∼
= [D, D] jest punkt
stały funktora [−, −] ◦ ∆ : Dcpo → Dcpo.
Dana Scott pokazał, że nietrywialne rozwiazania
˛
istnieja˛ w kategorii Dcpo.
To znaczy, że istnieje poset zupełny nieskończony
izomorficzny z posetem swoich endofunkcji ciagłych!!!
˛
Przykłady: P(ω) ∼
= [P(ω), P(ω)].
Idea Scotta opiera sie˛ na odpowiednim uogólnieniu
twierdzenia o istnieniu punktu stałego endofunkcji
ciagłej
˛
f : P → P na posecie zupełnym P na
twierdzenie o istnieniu punktu stałego endofunktora
ciagłego
˛
F : Dcpo → Dcpo na kategorii posetów
zupełnych.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 44/6
Kogranice ω-diagramów w Dcpo
DEFINICJA: Kogranica˛ ω-diagramu
f0
f1
f2
f3
f4
D0 → D1 → D2 → D3 → D4 → ...
nazywamy poset zupełny D∞ i funkcje ciagłe
˛
ιi : D i → D ∞
tak, że: ιi+i ◦ fi = ιi oraz dla dowolnego E wraz z kolekcja˛
g : Di → E z gi+i ◦ fi = gi istnieje dokładnie jedna funkcja
ciagła
˛
h : D∞ → E z gi = h ◦ ιi .
Metody matematyczne w semantyce jezyków
˛
programowania – p. 45/6
Granice ω-diagramów w Dcpo
DEFINICJA: Granica˛ ω-diagramu
f0
f1
f2
f3
f4
D0 ← D1 ← D2 ← D3 ← D4 ← ...
nazywamy poset zupełny D∞ i funkcje ciagłe
˛
πi : D∞ → Di
tak, że: fi ◦ πi+i = πi oraz dla dowolnego E wraz z kolekcja˛
g : E → Di z fi ◦ gi+i = gi istnieje dokładnie jedna funkcja
ciagła
˛
h : E → D∞ z gi = πi ◦ h.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 46/6
(Ko)granice ω-diagramów w Dcpo
TWIERDZENIE: Granica dowolnego ω-diagramu
f0
f1
f2
f3
f4
D0 ← D1 ← D2 ← D3 ← D4 ← ...
istnieje i jest dana przez:
D∞ = {(x0 , x1 , ...) | (∀n ∈ ω)(fn (xn+1 ) = xn )}
wraz z projekcjami πi : D∞ → Di , πi (x0 , x1 , ...) := xi .
TWIERDZENIE: Kogranica dowolnego ω-diagramu
f0
f1
f2
f3
f4
D0 → D1 → D2 → D3 → D4 → ...
istnieje.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 47/6
Fuktory ciagłe
˛
DEFINICJA: Funktor F nazywamy ciagłym,
˛
jeśli
zachowuje kogranice tj.: jeśli D∞ jest kogranica˛
diagramu
f0
f1
f2
f4
f3
D0 → D1 → D2 → D3 → D4 → ...,
to F (D∞ ) jest kogranica˛ diagramu:
F f0
F f1
F f2
F f3
F f4
F D0 → F D1 → F D2 → F D3 → F D4 → ...,
Metody matematyczne w semantyce jezyków
˛
programowania – p. 48/6
Fuktory ciagłe
˛
DEFINICJA: Funktor F nazywamy ciagłym,
˛
jeśli
zachowuje kogranice tj.: jeśli D∞ jest kogranica˛
diagramu
f0
f1
f2
f4
f3
D0 → D1 → D2 → D3 → D4 → ...,
to F (D∞ ) jest kogranica˛ diagramu:
F f0
F f1
F f2
F f3
F f4
F D0 → F D1 → F D2 → F D3 → F D4 → ...,
Funktor [−, −] ◦ ∆ : Dcpo → Dcpo jest ciagły.
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 48/6
Własność funktorów ciagłych
˛
LEMAT. Niech F : Dcpo → Dcpo bedzie
˛
funktorem ciagłym
˛
i niech f : D → F (D) bedzie
˛
funkcja˛ ciagł
˛ a˛ oraz niech
diagram
f
F (f )
F 2 (f )
F 3 (f )
F 4 (f )
D → F (D) → F 2 (D) → F 3 (D) → F 4 (D) → ...,
posiada kogranice˛ D∞ . Wówczas
D∞ ∼
= F (D∞ ).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 49/6
Pary e-p
DEFINICJA: Para˛ e-p nazywamy pare˛ funkcji ciagłych
˛
miedzy
˛
posetami zupełnymi
e: D ⇆ E : p
takie, że: p ◦ e = 1D oraz e ◦ p ⊑ 1E .
Metody matematyczne w semantyce jezyków
˛
programowania – p. 50/6
Pary e-p
DEFINICJA: Para˛ e-p nazywamy pare˛ funkcji ciagłych
˛
miedzy
˛
posetami zupełnymi
e: D ⇆ E : p
takie, że: p ◦ e = 1D oraz e ◦ p ⊑ 1E .
PRZYKŁAD: Dla dowolnego posetu zupełnego (P, ⊑)
zanurzamy go w poset zupełny ideałów (I(P ), ⊆),
e(x) := ↓x = {y ∈ P | y ⊑ x}. Projekcje definiujemy
W
przypisujac
˛ ideałowi jego supremum: p(I) := I.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 50/6
Pary e-p
DEFINICJA: Para˛ e-p nazywamy pare˛ funkcji ciagłych
˛
miedzy
˛
posetami zupełnymi
e: D ⇆ E : p
takie, że: p ◦ e = 1D oraz e ◦ p ⊑ 1E .
PRZYKŁAD: Dla dowolnego posetu zupełnego (P, ⊑)
zanurzamy go w poset zupełny ideałów (I(P ), ⊆),
e(x) := ↓x = {y ∈ P | y ⊑ x}. Projekcje definiujemy
W
przypisujac
˛ ideałowi jego supremum: p(I) := I.
Dla pary e-p zupełność D wynika z zupełności E.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 50/6
Pary e-p
DEFINICJA: Para˛ e-p nazywamy pare˛ funkcji ciagłych
˛
miedzy
˛
posetami zupełnymi
e: D ⇆ E : p
takie, że: p ◦ e = 1D oraz e ◦ p ⊑ 1E .
PRZYKŁAD: Dla dowolnego posetu zupełnego (P, ⊑)
zanurzamy go w poset zupełny ideałów (I(P ), ⊆),
e(x) := ↓x = {y ∈ P | y ⊑ x}. Projekcje definiujemy
W
przypisujac
˛ ideałowi jego supremum: p(I) := I.
Dla pary e-p zupełność D wynika z zupełności E.
PRZYKŁAD: Jako e : P → [P, P ] bierzemy λy.λx.y, zaś
jako p : [P, P ] → P funkcje˛ λf.f (⊥).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 50/6
Twierdzenie Scotta
Niech P bedzie
˛
posetem zupełnym z ⊥. Rozważmy:
D0 = P, D1 = [P, P ], ..., Dn+1 = [Dn , Dn ],
e0 : P → [P, P ] jest funkcja˛ λy.λx.y.
p0 : [P, P ] → P jest funkcja˛ λf.f (⊥).
en+1 : [Dn , Dn ] = Dn+1 → [Dn+1 , Dn+1 ] jest funkcja˛
λf.en ◦ f ◦ pn .
pn+1 : [Dn+1 , Dn+1 ] → [Dn , Dn ] jest funkcja˛ λg.pn ◦ g ◦ en .
p0
p1
Niech D∞ bedzie
˛
granica˛ diagramu D0 ← D1 ← D2 ← ...
Wówczas D∞ ∼
= [D∞ , D∞ ].
Metody matematyczne w semantyce jezyków
˛
programowania – p. 51/6
Rekursywne równania na dziedzinach
Przykład: Punkt stały funktora F : Dcpo⊥ → Dcpo⊥ ,
który dodaje element najmniejszy: dla obiektu D,
F (D) := D⊥ . Dla morfizmu f : P → Q,
F (f ) := f⊥ : P⊥ → Q⊥ , f⊥ (p ∈ P ) := p, f⊥ (⊥) := ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 52/6
Rekursywne równania na dziedzinach
Przykład: Punkt stały funktora F : Dcpo⊥ → Dcpo⊥ ,
który dodaje element najmniejszy: dla obiektu D,
F (D) := D⊥ . Dla morfizmu f : P → Q,
F (f ) := f⊥ : P⊥ → Q⊥ , f⊥ (p ∈ P ) := p, f⊥ (⊥) := ⊥.
Zaczynajac
˛ od posetu jednoelementowego 1, mamy
1⊥ = 2, itd.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 52/6
Rekursywne równania na dziedzinach
Metody matematyczne w semantyce jezyków
˛
programowania – p. 53/6
Rekursywne równania na dziedzinach
PRZYKŁAD: Szukamy rozwiazania
˛
równania
X = 1⊥ + X,
gdzie + jest koproduktem w kategorii Dcpo⊥ .
Koproduktem jest suma rozłaczna,
˛
w którym dwa elementy
najmniejsze identyfikujemy ze soba:
˛
Metody matematyczne w semantyce jezyków
˛
programowania – p. 54/6
Rekursywne równania na dziedzinach
Rozwiazaniem
˛
równania
X = 1⊥ + X,
sa˛ płaskie liczby naturalne N⊥ .
Metody matematyczne w semantyce jezyków
˛
programowania – p. 55/6
Rekursywne równania na dziedzinach
PRZYKŁAD: Szukamy rozwiazanie
˛
równania
X∼
= X ⊕ X,
gdzie F (P, Q) := P ⊕ Q jest suma˛ rozłaczna
˛
P i Q, do której
dodany jest nowy element najmniejszy.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 56/6
Rekursywne równania na dziedzinach
Rozwiazaniem
˛
równania
X∼
= X ⊕X
jest nieskończone drzewo binarne (model zbioru Cantora).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 57/6
Rekursywne równania na dziedzinach
Poszukujemy rozwiazania
˛
równania
X∼
= 1⊥ + (N⊥ ⊗ X)
gdzie: N⊥ to płaskie liczby naturalne, zaś
F (P, Q) := P ⊗ Q jest funktorem przypisujacym
˛
posetom zupełnym P ,Q ich produkt zredukowany.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 58/6
Rekursywne równania na dziedzinach
Poszukujemy rozwiazania
˛
równania
X∼
= 1⊥ + (N⊥ ⊗ X)
gdzie: N⊥ to płaskie liczby naturalne, zaś
F (P, Q) := P ⊗ Q jest funktorem przypisujacym
˛
posetom zupełnym P ,Q ich produkt zredukowany.
Produkt zredukowany jest ilorazem produktu P × Q
przez relacje˛ równoważności ≡, która identyfikuje ze
soba˛ wszystkie elementy produktu, w których na
choćby jednej współrz˛ednej znajduje sie˛ ⊥.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 58/6
Rekursywne równania na dziedzinach
Poszukujemy rozwiazania
˛
równania
X∼
= 1⊥ + (N⊥ ⊗ X)
gdzie: N⊥ to płaskie liczby naturalne, zaś
F (P, Q) := P ⊗ Q jest funktorem przypisujacym
˛
posetom zupełnym P ,Q ich produkt zredukowany.
Produkt zredukowany jest ilorazem produktu P × Q
przez relacje˛ równoważności ≡, która identyfikuje ze
soba˛ wszystkie elementy produktu, w których na
choćby jednej współrz˛ednej znajduje sie˛ ⊥.
Rozwiazaniem
˛
tego równania jest dziedzina
skończonych i nieskończonych listy liczb naturalnych.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 58/6
Podsumowanie
Omówiliśmy semantyk˛e petli
˛ while prostego jezyka
˛
IMP oraz wyprowadziliśmy podstawowe wymagania dla
dziedzin semantycznych.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 59/6
Podsumowanie
Omówiliśmy semantyk˛e petli
˛ while prostego jezyka
˛
IMP oraz wyprowadziliśmy podstawowe wymagania dla
dziedzin semantycznych.
Udowodniliśmy twierdzenie Scotta o punkcie stałym
endofunkcji ciagłych
˛
na cz˛eściowych porzadkach
˛
zupełnych.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 59/6
Podsumowanie
Omówiliśmy semantyk˛e petli
˛ while prostego jezyka
˛
IMP oraz wyprowadziliśmy podstawowe wymagania dla
dziedzin semantycznych.
Udowodniliśmy twierdzenie Scotta o punkcie stałym
endofunkcji ciagłych
˛
na cz˛eściowych porzadkach
˛
zupełnych.
Udowodniliśmy, że kategoria Dcpo jest kartezjańsko
zamknieta
˛ i zupełna.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 59/6
Podsumowanie
Omówiliśmy semantyk˛e petli
˛ while prostego jezyka
˛
IMP oraz wyprowadziliśmy podstawowe wymagania dla
dziedzin semantycznych.
Udowodniliśmy twierdzenie Scotta o punkcie stałym
endofunkcji ciagłych
˛
na cz˛eściowych porzadkach
˛
zupełnych.
Udowodniliśmy, że kategoria Dcpo jest kartezjańsko
zamknieta
˛ i zupełna.
Naszkicowaliśmy dowód twierdzenia Scotta o istnieniu
nietrywialnych rozwiaza
˛ ń równania D ∼
= [D, D] w
kategorii Dcpo.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 59/6
Podsumowanie
Omówiliśmy semantyk˛e petli
˛ while prostego jezyka
˛
IMP oraz wyprowadziliśmy podstawowe wymagania dla
dziedzin semantycznych.
Udowodniliśmy twierdzenie Scotta o punkcie stałym
endofunkcji ciagłych
˛
na cz˛eściowych porzadkach
˛
zupełnych.
Udowodniliśmy, że kategoria Dcpo jest kartezjańsko
zamknieta
˛ i zupełna.
Naszkicowaliśmy dowód twierdzenia Scotta o istnieniu
nietrywialnych rozwiaza
˛ ń równania D ∼
= [D, D] w
kategorii Dcpo.
Pokazaliśmy przykłady rozwiaza
˛ ń innych równań
rekursywncyh na dziedzinach typu D ∼
= F (D).
Metody matematyczne w semantyce jezyków
˛
programowania – p. 59/6
Literatura
Abramsky, S., Jung, A., (1994) Domain Theory. Chapter
3 of Handbook of Logic in Computer Science, pp. 1–168,
Oxford University Press.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 60/6
Literatura
Abramsky, S., Jung, A., (1994) Domain Theory. Chapter
3 of Handbook of Logic in Computer Science, pp. 1–168,
Oxford University Press.
Gierz, G., Hofmann, J.H., Keimel, K., Lawson, J.D.,
Mislove, M. and Scott, D.S. (2003) Continuous Lattices
and Domains, Vol. 93 of Encyclopedia of Mathematics
and Its Applications, Cambridge University Press.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 60/6
Literatura
Abramsky, S., Jung, A., (1994) Domain Theory. Chapter
3 of Handbook of Logic in Computer Science, pp. 1–168,
Oxford University Press.
Gierz, G., Hofmann, J.H., Keimel, K., Lawson, J.D.,
Mislove, M. and Scott, D.S. (2003) Continuous Lattices
and Domains, Vol. 93 of Encyclopedia of Mathematics
and Its Applications, Cambridge University Press.
skrypty on-line: Steve Awodey, Andy Pitts, Gordon
Plotkin, Thomas Streicher, etc.
Metody matematyczne w semantyce jezyków
˛
programowania – p. 60/6