
- •Факультет информационных технологий ю.П.Кораблин Денотационная семантика языков программирования
- •Денотационная семантика языков программирования
- •Семантические определения
- •Циклические конструкции и их семантика
- •Методы доказательства свойств программ
- •Метод доказательства, основанный на свойстве фиксированных точек
- •Метод численной индукции
- •Метод индукции фиксированной точки
- •Свойства условного оператора
- •Примеры решения задач методами денотационной семантики
Свойства условного оператора
Введем сначала определения коммутативности и идемпотентности.
Определение. Две команды γ0 и γ1 коммутативны, если γ0∘γ1 = γ1∘γ0 . Команда γ и выражение ω коммутативны, если ω ≡ ω ∘ γ. т.е. выражение имеет то же самое значение до или после выполнения команды.
Два выражения всегда коммутируют, т.к. вычисление одного не может влиять на другое (положение меняется, когда допускается побочный эффект).
Определение. Команда γ идемпотентна, если γ∘γ ≡ γ. Таким образом, идемпотентность команды означает, что выполнение ее более, чем один раз, ничего не меняет.
Пусть b обозначает истинностное значение, а греческие буквы обозначают элементы подходящей области (например, (S→S) - для условных команд или (S → T) - для условных выражений).
Полагаем, что значения всех команд и выражений – строгие функции.
(1) Левая факторизация:
γ0∘(b → γ1,γ2) = b → γ0∘γ1,γ0∘γ2
(2) Если γ коммутирует с ω, то
(λσ.ωσ → pσ,qσ)∘γ = (λσ.ωσ → (p∘γ)σ,(q∘γ)σ).
(3) b →( b → γ0,γ1),( b → γ2,γ3)= b → γ0,( b → γ2,γ3) =
= b → ( b → γ0,γ1), γ3 = b → γ0,γ3
(4) Если ω коммутирует с γ2 и γ3, то
(λσ.ωσ → γ0σ,γ1σ)∘( λσ.ωσ → γ2σ,γ3σ) =
= (λσ.ωσ → (γ0∘γ2)σ, (γ1∘γ3)σ)
(5) Если ω0 и ω1 имеют допустимые подходящие значения на σ0, то
ω1σ0 → (λσ.ω0σ → γ0σ,γ1σ), ( λσ.ω0σ → γ2σ,γ3σ) =
ω0σ0 → (λσ.ω1σ → γ0σ,γ2σ), ( λσ.ω1σ → γ1σ,γ3σ)
Все эти свойства могут быть легко доказаны простой подстановкой в левую и правую части всех возможных проверяемых значений.
Правило (3) дает упрощение для вложенных условий; (4) позволяет объединить два условных оператора в один; (5) говорит о том, что вложенные условные операторы могут быть вынесены наружу.
Примеры решения задач методами денотационной семантики
С[while E do C od ] = C[if E then C; while E do C od else e fi]
Решение:
С[while E do C od] = fix(λγ.λδ.ωδ→γ∙γ1δ,δ) = fix H = ỹ,
где H = λγ.λδ.ωδ→γ∙γ1δ,δ
Введём следующие обозначения E[E]=ω ; C[C] = γ1
л.ч. = ỹ
п.ч. = λδ.ωδ→ ỹ ∙γ1δ,δ
Подстовляя ỹ в H получим:
л.ч. = ỹ = H(ỹ) = λγ.λδ.ωδ→ ỹ ∙γ1δ,δ = п.ч. ,
откуда вытекает искомое равенство.
C[repeat C until E]=C[C; if E then e else repeat C until E fi]
Введём те же самые обозначения, что и в примере 1
C[repeat C until E] = fix (λγ.(λδ.ωδ→ δ, γδ)∙γ1)
л. ч. = ỹ
п. ч. = С[if E then e else repeat C until E fi] ∙ C[C] = (λδ.ωδ→ δ, ỹδ)∙γ1
Подстовляя ỹ в H, получим:
л. ч. = ỹ =H(ỹ) =(λδ.ωδ→ δ, ỹδ)∙γ1 = п.ч.
откуда вытекает искомое равенство.
С[while E do C od ] = С[while E do C od; if E then C else e fi]
Решение:
Введём те же самые обозначения, что и в примере 1
л.ч. = fix H = ỹ, где H = λγ.λδ.ωδ→γ∙γ1δ,δ
п.ч. = C[if E then C else e fi] ∙ С[while E do C od] = λδ.ωδ→ γ1δ,δ ∙ ỹ
Требуется доказать, что
ỹ = λδ.ωδ→ γ1δ,δ ∙ ỹ
Доказательство проведём методом индукции фиксированной точки
Пусть q(x) ≡ x = (λδ.ωδ→ γ1δ,δ) ∙x
q(┴) = справиделиво, т.к.
q(┴) ≡ ┴ = (λδ.ωδ→ γ1δ,δ) ∙┴ = (λδ.ωδ→ γ1δ,δ) ∙(┴) = ┴ , т. к.
ф-ция (λδ.ωδ→ γ1δ,δ) строгая
3.2 Пусть q(┴) – справедливо, т.е. x = (λδ.ωδ→ γ1δ,δ) ∙x
Тогда q(H(x)) ≡ H(x) = (λδ.ωδ→ γ1δ,δ) ∙H(x)
Покажем, что q(H(x)) – справедливо
л.ч. = H(x) = λδ.ωδ→ x∙γ1δ,δ
п.ч. = (λδ.ωδ→ γ1δ,δ) ∙ (λδ.ωδ→ x∙γ1δ,δ) =
= λδ.ωδ→(λδ.ωδ→ γ1δ,δ) ∙x∙γ1δ, (λδ.ωδ→ x∙γ1δ,δ) δ =
= λδ.ωδ→( λδ.ωδ→ γ1δ,δ) ∙x∙γ1δ, (ωδ→ x∙γ1δ,δ)=
По предположению о том, что x = (λδ.ωδ→ γ1δ,δ) ∙x
= λδ.ωδ→x∙γ1δ, (ωδ→ x∙γ1δ,δ)= λδ.ωδ→x∙γ1δ, δ= H(x)
ч.т.д.
Из справедливости свойств 1 и 2 заключаем, что q(fix H) – справедливо,
т.е. fix H = (λδ.ωδ→γ1δ, δ) ∙ fix H, а следовательно ỹ = (λδ.ωδ→ γ1δ,δ) ∙ ỹ, ч.т.д.
C[if E then repeat C until ¬E else e fi] = С[while E do C od ]
Решение
E[E]=ω ; C[C] = γ1
С[while E do C od] = fix(λγ.λδ.ωδ→γ∙γ1δ,δ) = fix H = ỹ,
где H = λγ.λδ.ωδ→γ∙γ1δ,δ
C[repeat C until ¬E] = fix(λγ.(λδ.E[¬E]δ→ δ, γδ) ∙γ1) =
= fix(λγ.(λδ.E[E]δ→ γδ, δ) ∙γ1), т.к. ранее было доказано утверждение
λδ.E[¬E]δ → γ1δ, γ2δ = λδ.E[E]δ → γ2δ, γ1δ
Далее имеем: C[repeat C until ¬E] = fix(fix(λγ.(λδ.ωδ→ γδ, δ) ∙γ1) =
= fix H2 = ỹ2, где H2 = λγ.(λδ.ωδ → γδ, δ) ∙γ1
Таким образом, получаем:
л.ч. = λγ.λδ.ωδ→ ỹ2δ,δ
п.ч. = ỹ1
Доказательство проведём методом индукции по двум фиксированным точкам.
Пусть q(x,y) ≡ λδ.ωδ→ xδ,δ = y
Свойство 1. q(┴,┴) – не выполняется, т.к. λδ.ωδ→ ┴ δ,δ ≠ ┴
Преобразуем правую часть следующим образом ỹ1 = H(ỹ1) = λδ.ωδ→ ỹ1∙γ1δ,δ
Из сравнения этого выражения с левой частью следует, то для доказательства утверждения требуется доказать, что.
ỹ2 = ỹ1∙γ1
Доказательство индукцией по двум фиксированным точкам.
4.1 q(┴,┴) ≡ ┴ = ┴∙γ1 – справедливо
4.2 Пусть q(x,y) ≡ x = y∙γ1 – справедливо
Покажем, что q(H2(x),H1(y)) – справедливо,
Т.е. H2(x) = H1(y) ∙γ1
л.ч. = H2(x) = (λδ.ωδ → xδ, δ) ∙γ1
п.ч. = H1(y) ∙γ1 = (λδ.ωδ→y∙γ1δ,δ) ∙γ1 =
по предположению о справедливости q(x,y)
=(λδ.ωδ→x δ,δ) ∙γ1 = л.ч.
ч.т.д
С[while E do C1 od; C2 ]
= С[while E do C1 od; if E then C1 else C2 fi]
Решение:
E[E]=ω ; C[C1] = γ1; C[C2] = γ2
С[while E do C1 od] = fix(λγ.λδ.ωδ→γ∙γ1δ,δ) = fix H = ỹ,
где H = λγ.λδ.ωδ→γ∙γ1δ,δ
л.ч. = C[C2] ∙ С[while E do C1 od] = γ2 ∙ ỹ1
п.ч. = C[if E then C1 else C2 fi] ∙ С[while E do C1 od] = (λδ.ωδ→γ1δ, γ2δ) ∙ ỹ1
Таким образом, требуется доказать, что γ2 ∙ ỹ1 = (λδ.ωδ→γ1δ, γ2δ) ∙ ỹ1
Доказательство проведём методом индукции фиксированной точки
Пусть q(x) ≡ γ2 ∙ x = (λδ.ωδ→γ1δ, γ2δ) ∙ x
5.1 q(┴) ≡ γ2 ∙ ┴ = (λδ.ωδ→γ1δ, γ2δ) ∙ ┴ - справедливо
5.2 Пусть q(x) ≡ γ2 ∙ x = (λδ.ωδ→γ1δ, γ2δ) ∙ x – справедливо
Покажем, что q(H1(x)) ≡ γ2 ∙ H1(x) = (λδ.ωδ→γ1δ, γ2δ) ∙ H1(x) – справедливо
л.ч. = γ2 ∙ H1(x) = γ2 ∙ (λδ.ωδ→x∙γ1δ, δ)= (левая факторизация)
= λδ.ωδ→ γ2∙x∙γ1δ, γ2 δ
п.ч. = (λδ.ωδ→γ1δ, γ2δ) ∙ (λδ.ωδ→x∙γ1δ, δ) = λδ.ωδ→(λδ.ωδ→γ1δ, γ2δ) ∙x∙γ1δ, (λδ.ωδ→γ1δ, γ2δ) δ = (по предположению о справедливости q(x))
= λδ.ωδ→γ2∙x∙γ1δ, (ωδ→γ1δ, γ2δ) = (по 3 свойству усл. оператора)
= λδ.ωδ→γ2∙x∙γ1δ,γ2δ = л.ч.
А следовательно, q(fix H1) = q(ỹ1) ≡ γ2 ∙ ỹ1 = (λδ.ωδ→γ1δ, γ2δ) ∙ ỹ1 –справедливо,
ч.т.д.
С[while E do C1 od; while E do C2 od;] = С[while E do C1 od;]
Решение
Пусть E[E]=ω ; C[C1] = γ1; C[C2] = γ2
С[while E do C1 od;] = fix(λγ.λδ.ωδ→γ∙γ1δ,δ) = fix H1 = ỹ1,
где H1 = λγ.λδ.ωδ→γ∙γ1δ,δ
С[while E do C2 od;] = fix(λγ.λδ.ωδ→γ∙γ1δ,δ) = fix H2 = ỹ2,
где H2 = λγ.λδ.ωδ→γ∙γ1δ,δ
л.ч. = С[while E do C2 od;] ∙ С[while E do C1 od;] = ỹ2∙ ỹ1
п.ч. = ỹ1
Таким образом, требуется доказать что: ỹ2∙ ỹ1 = ỹ1
Доказательство проведём методом индукции фиксированной точки
Пусть q(x) ≡ ỹ2∙ x = x
6.1. q(┴) ≡ ỹ2∙ ┴ = ┴
6.2. Пусть q(x) ≡ ỹ2∙ x = x – справедливо
Покажем, что q(H1(x)) ≡ ỹ2∙ H1(x) = H1(x) – справедливо
Л.ч. = ỹ2∙ H1(x) = ỹ2∙ λδ.ωδ→x∙γ1δ,δ = (лев. факторизация)
= λδ.ωδ→ ỹ2∙ x∙γ1δ, ỹ2δ = (по предположению о справедливости q(x))
= λδ.ωδ→x∙γ1δ, ỹ2δ = (по свойству фиксированной точки)
= λδ.ωδ→x∙γ1δ, H2(ỹ2)δ =
= λδ.ωδ→x∙γ1δ, (λδ.ωδ→ ỹ2∙γ2δ,δ) δ =
= λδ.ωδ→x∙γ1δ, (λδ.ωδ→ ỹ2∙γ2δ,δ) = (по 3 свойству условного оператора)
= λδ.ωδ→x∙γ1δ, δ
п.ч. = H1(x) = λδ.ωδ→x∙γ1δ, δ = л.ч.
Из п.1 и п.2 вытекает, что q(fix H1) = q(ỹ1) – справедливо, а следовательно
ỹ2∙ỹ1 = ỹ1, ч.т.д.
С[while E do C1; while E do C2 od od] =
= C[if E then C1; while E do C2 od else e fi]
Решение Пусть E[E]=ω ; C[C1] = γ1; C[C2] = γ2
С[while E do C2 od;] = fix(λγ.λδ.ωδ→γ∙γ1δ,δ) = fix H2 = ỹ2,
где H2 = λγ.λδ.ωδ→γ∙γ1δ,δ
С[while E do C1; while E do C2 od od] = fix H1 = ỹ1,
Где H1 = λγ.λδ.ωδ→γ∙ С[C1; while E do C2 od]δ,δ =
= λγ.λδ.ωδ→γ∙ С[while E do C2 od]∙С[C1]δ,δ =
= λγ.λδ.ωδ→γ∙ ỹ2∙ γ1δ,δ
л.ч. = ỹ1
п.ч. = λδ.ωδ→ С[while E do C2 od]∙С[C1]δ,δ =
= λγ.λδ.ωδ→ỹ2∙ γ1δ,δ
По свойству фиксированной точки имеем:
Л.ч. = ỹ1 = H1(ỹ1) = λγ.λδ.ωδ→ ỹ1∙ ỹ2∙ γ1δ,δ
Таким образом, для доказательства искомого утверждения необходимо доказать, что ỹ2∙ γ1 = ỹ1∙ ỹ2∙ γ1, для чего достаточно доказать, что ỹ2 = ỹ1∙ ỹ2
Доказательство: см. решение задачи 6.
С[while E do C1; while E do C2 od od] =
= C[if E then C1 else e fi; while E do C2 od]
Решение Пусть E[E]=ω ; C[C1] = γ1; C[C2] = γ2
л.ч. = fix H1 = ỹ1, где H1 = λγ.λδ.ωδ→ γ∙ ỹ2∙ γ1δ,δ
п.ч. = ỹ2∙ (λδ.ωδ→ γ1δ,δ) , где ỹ2 = fix H2, H2 = λγ.λδ.ωδ→ γ∙γ2δ,δ
Таким образом, требуется доказать, что
ỹ1 = ỹ2∙ (λδ.ωδ→ γ1δ,δ)
По свойству фиксированных точек:
л.ч. = ỹ1 = H1(ỹ1) = λγ.λδ.ωδ→ ỹ1∙ ỹ2∙ γ1δ,δ
п.ч. = ỹ2∙ (λδ.ωδ→ γ1δ,δ) = (левая факторизация)
= λδ.ωδ→ ỹ2∙ γ1δ, ỹ2∙ δ = λδ.ωδ→ ỹ2∙ γ1δ, H2(ỹ2)∙ δ =
= λδ.ωδ→ ỹ2∙ γ1δ, (λδ.ωδ→ ỹ2∙γ2δ,δ)δ = λδ.ωδ→ ỹ2∙ γ1δ, ωδ→ ỹ2∙γ2δ,δ =
(По 3-ему свойству условного оператора)
= λδ.ωδ→ ỹ2∙ γ1δ,δ
Таким образом, для доказательства искомого утверждения необходимо показать, что: ỹ1∙ ỹ2∙ γ1 = ỹ2∙ γ1, для чего достаточно доказать, что ỹ1∙ ỹ2= ỹ2
Доказательство: См. решение задачи 6
С[repeat C1 until E; if E then C2 else e fi] =
= C[C1; until E do C1 od; C2]
Решение:
E[E]=ω ; C[C1] = γ1; C[C2] = γ2
С[repeat C1 until E] = fix H1 = ỹ1, где H1 = λγ.(λδ.ωδ→ δ, γδ)∙γ1
С[if E then C2 else e fi] = λδ.ωδ→ γ2δ,δ
C[until E do C1 od] = fix H2 = ỹ2, где
H2 = λγ.λδ.ωδ→ δ, γ∙γ1δ
Л.ч. = (λδ.ωδ→ γ2δ,δ)∙ ỹ1
П.ч. = γ2∙ ỹ2∙ γ1
Таким образом, требуется доказать, что:
(λδ.ωδ→ γ2δ,δ)∙ ỹ1 = γ2∙ ỹ2∙ γ1
Доказательство проведём методом индукции по двум фиксированным точкам.
Пусть q(x,y) ≡ (λδ.ωδ→ γ2δ,δ)∙x = γ2∙ y ∙ γ1
9.1 q(┴,┴) ≡ (λδ.ωδ→ γ2δ,δ)∙┴ = γ2∙ ┴ ∙ γ1
9.2 Пусть q(x,y) ≡ (λδ.ωδ→ γ2δ,δ)∙x = γ2∙ y ∙ γ1 – справедливо
Покажем, что q(H1(x),H2(y)) ≡ (λδ.ωδ→ γ2δ,δ)∙ H1(x),= γ2∙ H2(y) ∙ γ1 – справедливо
Л.ч. = (λδ.ωδ→ γ2δ,δ)∙ (λδ.ωδ→ δ, xδ)∙γ1 = (левая факторизация) = (λδ.ωδ→(λδ.ωδ→ γ2δ,δ)δ, (λδ.ωδ→ γ2δ,δ)∙xδ)∙γ1 = (по предположению о справедлиовсти q(x,y))
= (λδ.ωδ→(ωδ→ γ2δ,δ), γ2∙ ỹ2∙ γ1δ)∙γ1 = (свойство 3 условного оператора)
= (λδ.ωδ→γ2δ, γ2∙ ỹ2∙ γ1δ)∙γ1
П.ч. = γ2∙ H2(y) ∙ γ1= γ2∙ (λδ.ωδ→ δ, γ∙γ1δ) ∙ γ1 = (левая факторизация)
= (λδ.ωδ→ γ2δ, γ2∙γ∙γ1δ) ∙ γ1 = л.ч.
Отсюда следует, что q(fix H1, fix H2)=q(ỹ1, ỹ2) – справедливо, т.е. имеет место искомое утверждение, ч.т.д.
С[repeat C1 until E; while ¬E do C2 od] = С[C1; until E do C1 od; if E then e else C3 fi]
Решение: E[E]=ω ; C[C1] = γ1; C[C2] = γ2; C[C3] = γ3
С[repeat C1 until E] = fix H1 = ỹ1, где H1 = λγ.(λδ.ωδ→ δ, γδ)∙γ1
С[while ¬E do C2 od] = fix H2 = ỹ2, где H2 = λγ.λδ.E[¬E]δ→ γ∙γ2δ,δ =
= λγ.λδ.E[E]δ→ δ,γ∙γ2δ = λγ.λδ.ωδ→ δ,γ∙γ2δ
C[until E do C1 od] = fix H3 = ỹ3, где
H3 = λγ.λδ.ωδ→ δ, γ∙γ1δ
Л.ч. = ỹ2∙ ỹ1
П.ч. = (λδ.ωδ→ δ,γ3δ) ∙ ỹ3∙γ1
Таким образом, требуется доказать, что
ỹ2∙ ỹ1 = (λδ.ωδ→ δ,γ3δ) ∙ ỹ3∙γ1
Доказательство проведём методом индукции по двум фиксированным точкам.
Пусть q(x,y) ≡ ỹ2∙x = (λδ.ωδ→ δ,γ3δ) ∙ y∙γ1
10.1 q(┴,┴) ≡ ỹ2∙┴ = (λδ.ωδ→ δ,γ3δ) ∙ ┴∙γ1 - справедливо
10.2 Пусть q(x,y) ≡ ỹ2∙x = (λδ.ωδ→ δ,γ3δ) ∙ y∙γ1 –справедливо
Покажем, что q(H1(x),H3(y)) ≡ ỹ2∙ H1(x) = (λδ.ωδ→ δ,γ3δ) ∙H3(y)∙γ1 – справедливо
Л.ч. = ỹ2∙ H1(x) = ỹ2∙ (λδ.ωδ→ δ, xδ)∙γ1 = (левая факторизация)
= (λδ.ωδ→ ỹ2δ, ỹ2∙ xδ)∙γ1 = (по свойству фиксированной точки)
= (λδ.ωδ→ H2(ỹ2)δ, ỹ2∙ xδ)∙γ1 =
= (λδ.ωδ→ (λδ. ωδ→ δ, ỹ2∙γ2δ)δ, ỹ2∙xδ)∙γ1 =
= (λδ.ωδ→ (λδ. ωδ→ δ, ỹ2∙γ2δ), ỹ2∙xδ)∙γ1 = (3-е свойство усл. оператора)
= (λδ.ωδ→ δ, ỹ2∙xδ)∙γ1.
П.ч. = (λδ.ωδ→ δ,γ3δ)∙(λδ.ωδ→ δ, γ∙γ1δ) ∙γ1 = (лев. факторизация)
= (λδ.ωδ→ (λδ.ωδ→ δ,γ3δ)δ, (λδ.ωδ→ δ,γ3δ)∙γ∙γ1δ ∙)γ1 = (в силу предположения о справедливости q(x,y))
= (λδ.ωδ→ (ωδ→ δ,γ3δ), ỹ2∙x δ) ∙γ1 (3-е свойство условного оператора)
= (λδ.ωδ→ δ,ỹ2∙x δ) ∙γ1 = л.ч.
Отсюда следует, что
q(fix H1,fix H3) = fix(ỹ1,ỹ3) – справедливо, т.е. имеет место искомое утверждение
ỹ2∙ ỹ1 = (λδ.ωδ→ δ,γ3δ) ∙ ỹ3∙γ1 ч.т.д.
Литература.
1. Кораблин Ю.П., Семантика языков программирования, М., изд-во МЭИ, 1992, 100 стр.
2. Кораблин Ю.П., Куликова Н.Л.,Чумакова Е.В., Семантические методы анализа программ, М., изд-во РГСУ, 2008, 85 стр.