🗊Презентация Доказательство правильности программ. Структурное программирование

Нажмите для полного просмотра!
Доказательство правильности программ. Структурное программирование, слайд №1Доказательство правильности программ. Структурное программирование, слайд №2Доказательство правильности программ. Структурное программирование, слайд №3Доказательство правильности программ. Структурное программирование, слайд №4Доказательство правильности программ. Структурное программирование, слайд №5Доказательство правильности программ. Структурное программирование, слайд №6Доказательство правильности программ. Структурное программирование, слайд №7Доказательство правильности программ. Структурное программирование, слайд №8Доказательство правильности программ. Структурное программирование, слайд №9Доказательство правильности программ. Структурное программирование, слайд №10Доказательство правильности программ. Структурное программирование, слайд №11Доказательство правильности программ. Структурное программирование, слайд №12Доказательство правильности программ. Структурное программирование, слайд №13Доказательство правильности программ. Структурное программирование, слайд №14Доказательство правильности программ. Структурное программирование, слайд №15Доказательство правильности программ. Структурное программирование, слайд №16Доказательство правильности программ. Структурное программирование, слайд №17Доказательство правильности программ. Структурное программирование, слайд №18Доказательство правильности программ. Структурное программирование, слайд №19Доказательство правильности программ. Структурное программирование, слайд №20Доказательство правильности программ. Структурное программирование, слайд №21Доказательство правильности программ. Структурное программирование, слайд №22Доказательство правильности программ. Структурное программирование, слайд №23Доказательство правильности программ. Структурное программирование, слайд №24Доказательство правильности программ. Структурное программирование, слайд №25Доказательство правильности программ. Структурное программирование, слайд №26Доказательство правильности программ. Структурное программирование, слайд №27Доказательство правильности программ. Структурное программирование, слайд №28Доказательство правильности программ. Структурное программирование, слайд №29Доказательство правильности программ. Структурное программирование, слайд №30Доказательство правильности программ. Структурное программирование, слайд №31Доказательство правильности программ. Структурное программирование, слайд №32Доказательство правильности программ. Структурное программирование, слайд №33Доказательство правильности программ. Структурное программирование, слайд №34Доказательство правильности программ. Структурное программирование, слайд №35Доказательство правильности программ. Структурное программирование, слайд №36Доказательство правильности программ. Структурное программирование, слайд №37Доказательство правильности программ. Структурное программирование, слайд №38Доказательство правильности программ. Структурное программирование, слайд №39Доказательство правильности программ. Структурное программирование, слайд №40Доказательство правильности программ. Структурное программирование, слайд №41

Содержание

Вы можете ознакомиться и скачать презентацию на тему Доказательство правильности программ. Структурное программирование. Доклад-сообщение содержит 41 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Доказательство правильности программ
Структурное программирование
Описание слайда:
Доказательство правильности программ Структурное программирование

Слайд 2





Пример использования структурного программирования
Описание слайда:
Пример использования структурного программирования

Слайд 3





Пример использования структурного программирования
Описание слайда:
Пример использования структурного программирования

Слайд 4





Пример использования структурного программирования
В исходной постановке задачи только входные данные a и b, мы ввели в рассмотрение три переменные: x, y и r >= 0 …..
Представим этапы проектирования блок-схемами…
1.		-- a>0, b>=0		2.	 -- a>0, b>=0
	Найти НОД(a, b)		положить x = a и y = b
		--НОД(a, b) = x			 -- НОД(a, b)= НОД(x, y)
						y ≠ 0	нет
		 НОД(a, b)= НОД(x, y) ---				
						   да	   	-- НОД(a, b) = x
						
					уменьшить Y и изменить x
					с сохранением НОД
Описание слайда:
Пример использования структурного программирования В исходной постановке задачи только входные данные a и b, мы ввели в рассмотрение три переменные: x, y и r >= 0 ….. Представим этапы проектирования блок-схемами… 1. -- a>0, b>=0 2. -- a>0, b>=0 Найти НОД(a, b) положить x = a и y = b --НОД(a, b) = x -- НОД(a, b)= НОД(x, y) y ≠ 0 нет НОД(a, b)= НОД(x, y) --- да -- НОД(a, b) = x уменьшить Y и изменить x с сохранением НОД

Слайд 5





Пример использования структурного программирования
3.       	       -- a>0, b>=0
	      положить   x=a 
	      положить y = b
			-- НОД(a, b ) = НОД(x, y)
		     
		      y ≠ 0		нет
			да	               -- НОД(a, b) = x
НОД(a, b)= НОД(x,y)     r  = x mod y
            
		     x = y
  
                     y = r
	
Это процесс декомпозиции.
Способы композиции действий, составляющих алгоритм: 
		линейная, итерационная.  
		 Продолжение декомпозиции – положить r = x mod y:
Описание слайда:
Пример использования структурного программирования 3. -- a>0, b>=0 положить x=a положить y = b -- НОД(a, b ) = НОД(x, y) y ≠ 0 нет да -- НОД(a, b) = x НОД(a, b)= НОД(x,y) r = x mod y x = y y = r Это процесс декомпозиции. Способы композиции действий, составляющих алгоритм: линейная, итерационная. Продолжение декомпозиции – положить r = x mod y:

Слайд 6





Получение целой части и остатка отделения
				          --x ≥ 0, y > 0
				положить q = 0
				положить r =x
				                -- x = q*y + r,  r ≥ 0
				         r ≥ y          нет
	
    x = q*r + y, r ≥ 0--	      да 	x = q*y+r, r ≥y	--x = q*y+r, 0 ≤ r < y
			              положить  r = r – y
			               положить q = q + 1
Описание слайда:
Получение целой части и остатка отделения --x ≥ 0, y > 0 положить q = 0 положить r =x -- x = q*y + r, r ≥ 0 r ≥ y нет x = q*r + y, r ≥ 0-- да x = q*y+r, r ≥y --x = q*y+r, 0 ≤ r < y положить r = r – y положить q = q + 1

Слайд 7





Статическая и динамическая структура программы
Каждый алгоритм имеет статическую и динамическую структуру.
Статическая структура представляется текстом программы или его
структурной схемой, описывающими действия и проверки, которые
должны быть выполнены для решения конкретной задачи.
Статическая структура, текст не зависит от исходных данных.
Динамическая структура отражает процесс вычислений и
представляет собой последовательность состояний вычислений.
ДС зависит, определяется набором исходных данных, так как от
них зависит последовательность вычислений и переходов в
программе. Текущее состояние вычислений включает в себя
значения всех программных переменных в данный момент
времени и зависит от входных данных и от предыдущих состояний
вычислений.
Описание слайда:
Статическая и динамическая структура программы Каждый алгоритм имеет статическую и динамическую структуру. Статическая структура представляется текстом программы или его структурной схемой, описывающими действия и проверки, которые должны быть выполнены для решения конкретной задачи. Статическая структура, текст не зависит от исходных данных. Динамическая структура отражает процесс вычислений и представляет собой последовательность состояний вычислений. ДС зависит, определяется набором исходных данных, так как от них зависит последовательность вычислений и переходов в программе. Текущее состояние вычислений включает в себя значения всех программных переменных в данный момент времени и зависит от входных данных и от предыдущих состояний вычислений.

Слайд 8





Спецификация программы и правила вывода
Любой  оператор или изменяет состояние вычислений… или анализирует и принимает решение…
Любой язык программирования включает в себя некоторое количество простых операторов и  методы  объединения, композиции их в составные, структурные.
Задача: описать соотношения и правила вывода, которые позволят определить эффект воздействия простого оператора на состояние вычислений и выделить свойства составного оператора из свойств входящих в него простых операторов.
На структурной схеме нахождения div и mod определены состояния вычислений с помощью соотношений, которые должны выполняться для входных и промежуточных величин.
Фундаментальным свойством всех способов композиции является возможность объединения в одну сложную структурную схему с одним входом и одним выходом произвольного количества любых структурных схем.
Описание слайда:
Спецификация программы и правила вывода Любой оператор или изменяет состояние вычислений… или анализирует и принимает решение… Любой язык программирования включает в себя некоторое количество простых операторов и методы объединения, композиции их в составные, структурные. Задача: описать соотношения и правила вывода, которые позволят определить эффект воздействия простого оператора на состояние вычислений и выделить свойства составного оператора из свойств входящих в него простых операторов. На структурной схеме нахождения div и mod определены состояния вычислений с помощью соотношений, которые должны выполняться для входных и промежуточных величин. Фундаментальным свойством всех способов композиции является возможность объединения в одну сложную структурную схему с одним входом и одним выходом произвольного количества любых структурных схем.

Слайд 9





Спецификация программы и правила вывода
						          - P
 Спецификация программы: 		        S
		{ P} S { Q }   (1)											           -Q
 Если соотношение P – истинно перед выполнением S, то после завершения выполнения S, будет истинно выражение Q. …
Если S  - это программа, корректность которой мы должны установить, то необходимо доказать нотацию (1), где P – соотношение, которому должны удовлетворять входные данные, а Q – выходные.
Для задачи поиска div и mod:
		{(x ≥ 0) ^ (y > 0)}  S  {(x = q * y + r) ^ (0 ≤ r < y)}

Соотношение (1) определяет частичную корректность программы, так как S может не завершаться, точка выхода может не достигаться. Завершаемость S необходимо доказать, тогда будет доказана полная корректность.
Описание слайда:
Спецификация программы и правила вывода - P Спецификация программы: S { P} S { Q } (1) -Q Если соотношение P – истинно перед выполнением S, то после завершения выполнения S, будет истинно выражение Q. … Если S - это программа, корректность которой мы должны установить, то необходимо доказать нотацию (1), где P – соотношение, которому должны удовлетворять входные данные, а Q – выходные. Для задачи поиска div и mod: {(x ≥ 0) ^ (y > 0)} S {(x = q * y + r) ^ (0 ≤ r < y)} Соотношение (1) определяет частичную корректность программы, так как S может не завершаться, точка выхода может не достигаться. Завершаемость S необходимо доказать, тогда будет доказана полная корректность.

Слайд 10





Спецификация программы и правила вывода
Проектирование должно начинаться с определения спецификации {P} S {Q}, которой должна удовлетворять проектируемая программа, при каких условиях она должна работать (предусловие P) и какие результаты должны быть получены, каким условиям должны удовлетворять выходные данные (постусловие Q).
Процесс проектирования сверху вниз определяет спецификации {Pi} Si {Qi} для компонент программы Si 
Проектирование программы осуществляется одновременно с доказательством корректности этих спецификаций.
Описание слайда:
Спецификация программы и правила вывода Проектирование должно начинаться с определения спецификации {P} S {Q}, которой должна удовлетворять проектируемая программа, при каких условиях она должна работать (предусловие P) и какие результаты должны быть получены, каким условиям должны удовлетворять выходные данные (постусловие Q). Процесс проектирования сверху вниз определяет спецификации {Pi} Si {Qi} для компонент программы Si Проектирование программы осуществляется одновременно с доказательством корректности этих спецификаций.

Слайд 11






Представим блок-схему этого алгоритма как композицию…..
	 x>=0, y>0					x>=0, y> 0
         s1						q = 0;
	  r>=0				s1	r = x;
         s3
	    x=q*y+r, 0<= r<y				x=q*y+r, r>=0
Описание слайда:
Представим блок-схему этого алгоритма как композицию….. x>=0, y>0 x>=0, y> 0 s1 q = 0; r>=0 s1 r = x; s3 x=q*y+r, 0<= r<y x=q*y+r, r>=0

Слайд 12






						x = q*y + r, r >=y
S3				r = r – y; 
		 s2 		q = q + 1;
			  			 x = q * y +r , r >=O
Описание слайда:
x = q*y + r, r >=y S3 r = r – y; s2 q = q + 1; x = q * y +r , r >=O

Слайд 13





Правила вывода
Правила вывода – это схемы рассуждений, позволяющие доказывать свойства программ. Общий вид:
				H1,H2,…Hn
				         H
Если над чертой истинные выражения, то и под чертой выражение будет истинным.
Первое правило консеквенции:
				{P} S {R}, R      Q
				       {P} S {Q}
Например:
	{(x > 0) ^ (y > 0)}  S  {(z + u * y = x * y) ^ (u = 0)},
		 (z + u * y = x * y) ^ (u = 0)           (z = x * y)

		 {(x > 0) ^ (y > 0)}  S  {(z = x * y)}
Описание слайда:
Правила вывода Правила вывода – это схемы рассуждений, позволяющие доказывать свойства программ. Общий вид: H1,H2,…Hn H Если над чертой истинные выражения, то и под чертой выражение будет истинным. Первое правило консеквенции: {P} S {R}, R Q {P} S {Q} Например: {(x > 0) ^ (y > 0)} S {(z + u * y = x * y) ^ (u = 0)}, (z + u * y = x * y) ^ (u = 0) (z = x * y) {(x > 0) ^ (y > 0)} S {(z = x * y)}

Слайд 14





Второе правило консеквенции:
			P      R, {R} S {Q}
			       {P} S {Q}
Например:
	((x = y * q + r) ^ (r > y))         (x = y * (1 + q) + (r – y), 

		{x = y * (1 + q) + (r – y)}  r = r – y  { x = y * (1 + q) + r} 

	   {(x = y * q + r) ^ (r > y)}  r = r – y  { x = y * (1 + q) + r}
Описание слайда:
Второе правило консеквенции: P R, {R} S {Q} {P} S {Q} Например: ((x = y * q + r) ^ (r > y)) (x = y * (1 + q) + (r – y), {x = y * (1 + q) + (r – y)} r = r – y { x = y * (1 + q) + r} {(x = y * q + r) ^ (r > y)} r = r – y { x = y * (1 + q) + r}

Слайд 15





Правила вывода для операторов языка программирования
Описание слайда:
Правила вывода для операторов языка программирования

Слайд 16





Правила вывода для структурных операторов
Простейшей формой структурирования является создание составных операторов с помощью последовательной композиции действий S1, S2,… Sn. 
		В   С++  составной оператор - {S1; S2;… Sn;}
Описание слайда:
Правила вывода для структурных операторов Простейшей формой структурирования является создание составных операторов с помощью последовательной композиции действий S1, S2,… Sn. В С++ составной оператор - {S1; S2;… Sn;}

Слайд 17





Правила вывода для составного и условных операторов
Описание слайда:
Правила вывода для составного и условных операторов

Слайд 18





Правила вывода для условных операторов
Если мы хотим доказать истинность утверждения 
			{P} if (B) S1; else S2 {Q}
то  необходимо доказать истинность двух утверждений.
1. Так как P справедливо перед выполнением оператора if и, если выполняется оператор S1, то перед выполнением оператора if должно быть истинно условие B, а это значит, что должно быть истинно и выражение P^B. Но если после выполнения оператора if выполняется условие Q, то первое утверждение, которое должно выполняться, запишется в виде: 
			{P^B}  S1  {Q}
Описание слайда:
Правила вывода для условных операторов Если мы хотим доказать истинность утверждения {P} if (B) S1; else S2 {Q} то необходимо доказать истинность двух утверждений. 1. Так как P справедливо перед выполнением оператора if и, если выполняется оператор S1, то перед выполнением оператора if должно быть истинно условие B, а это значит, что должно быть истинно и выражение P^B. Но если после выполнения оператора if выполняется условие Q, то первое утверждение, которое должно выполняться, запишется в виде: {P^B} S1 {Q}

Слайд 19





Правила вывода для условных операторов
2. Если B ложно, то будет выполняться оператор S2. Так как P было
истинно перед выполнением if, делаем вывод, что перед
выполнением S2 справедливо соотношение    P ^ ¬B. И так как
после выполнения S2 должно выполняться Q, то второе
утверждение запишется так:	{P ^ ¬B}  S2  {Q}
Описание слайда:
Правила вывода для условных операторов 2. Если B ложно, то будет выполняться оператор S2. Так как P было истинно перед выполнением if, делаем вывод, что перед выполнением S2 справедливо соотношение P ^ ¬B. И так как после выполнения S2 должно выполняться Q, то второе утверждение запишется так: {P ^ ¬B} S2 {Q}

Слайд 20





Правила вывода для условных операторов
	Сокращенный условный оператор:
				if ( B ) S;
Блок-схема сокращенного условного оператора: 
					P
  				        B
			P ^ B
				 S
					
					Q
		1. {P ^ B}  S  {Q}
Описание слайда:
Правила вывода для условных операторов Сокращенный условный оператор: if ( B ) S; Блок-схема сокращенного условного оператора: P B P ^ B S Q 1. {P ^ B} S {Q}

Слайд 21





Правила вывода для условных операторов
	2. 	P ^ ¬B        Q
Описание слайда:
Правила вывода для условных операторов 2. P ^ ¬B Q

Слайд 22





Итерационная композиция, операторы циклов
Оператор цикла с предусловием: 
				while (B) S;
B – выражение,  S – оператор, простой или составной. 
S выполняется пока условие B выполняется, имеет истинное значение.  Итерационное выполнение S завершается, когда B становится ложным.
Описание слайда:
Итерационная композиция, операторы циклов Оператор цикла с предусловием: while (B) S; B – выражение, S – оператор, простой или составной. S выполняется пока условие B выполняется, имеет истинное значение. Итерационное выполнение S завершается, когда B становится ложным.

Слайд 23





Итерационная композиция, операторы циклов
Если P справедливо, когда впервые входим в цикл, то P^B будет справедливо,
если мы достигнем точки C. Если же придем в точку D, т.е. цикл завершится
нормально, то должно выполняться условие  P^ ¬ B.  Но после выполнения
оператора S, мы снова попадем  в точку  А и снова должно выполняться
условие P.   Т.е. в точке A условие P, а в точке С условие P^B , будут
выполняться столько раз, сколько раз выполняется тело цикла.
Описание слайда:
Итерационная композиция, операторы циклов Если P справедливо, когда впервые входим в цикл, то P^B будет справедливо, если мы достигнем точки C. Если же придем в точку D, т.е. цикл завершится нормально, то должно выполняться условие P^ ¬ B. Но после выполнения оператора S, мы снова попадем в точку А и снова должно выполняться условие P. Т.е. в точке A условие P, а в точке С условие P^B , будут выполняться столько раз, сколько раз выполняется тело цикла.

Слайд 24





Правило вывода для цикла с постусловием:
do S  while  B;

					A   –P
					   S
			Q ^ B  --   	C   --Q
					   B
				 Истина
					       Ложь
					 D  --Q ^ ¬ B
P будет истинно всякий раз, когда достигается точка A, и Q будет
истинно в точке С независимо от числа повторений цикла. Когда
достигается точка D, должно быть истинно утверждение Q ^ ¬ B.
Описание слайда:
Правило вывода для цикла с постусловием: do S while B; A –P S Q ^ B -- C --Q B Истина Ложь D --Q ^ ¬ B P будет истинно всякий раз, когда достигается точка A, и Q будет истинно в точке С независимо от числа повторений цикла. Когда достигается точка D, должно быть истинно утверждение Q ^ ¬ B.

Слайд 25





Правило вывода для цикла с постусловием:

	{ P } S { Q }, Q ^ B        P
	{ p } do S while (B); { Q ^ ¬ B }
Пример.
Описание слайда:
Правило вывода для цикла с постусловием: { P } S { Q }, Q ^ B P { p } do S while (B); { Q ^ ¬ B } Пример.

Слайд 26





Доказательство правильности алгоритма поиска div и mod
Описание слайда:
Доказательство правильности алгоритма поиска div и mod

Слайд 27





Фрагмент программы
Описание слайда:
Фрагмент программы

Слайд 28





Рассмотрим вначале цикл, представленный  блоком s3
B -  это  (r >= y) ,  отрицание B – это ( r < y )
Переписав выходное соотношение с использованием этих выражений, получим:
Описание слайда:
Рассмотрим вначале цикл, представленный блоком s3 B - это (r >= y) , отрицание B – это ( r < y ) Переписав выходное соотношение с использованием этих выражений, получим:

Слайд 29





Для этого необходимо доказать, что справедливо соотношение над чертой, в нашем случае

где s2 – составной оператор, отраженный блок-схемой. Докажем
это соотношение. Для этого используем утверждение, которое
следует из того, что если из r вычесть y, то к  q необх. прибавить 1.
Описание слайда:
Для этого необходимо доказать, что справедливо соотношение над чертой, в нашем случае где s2 – составной оператор, отраженный блок-схемой. Докажем это соотношение. Для этого используем утверждение, которое следует из того, что если из r вычесть y, то к q необх. прибавить 1.

Слайд 30





Теперь используем правило составного оператора и 2-е правило консеквенции
получим
Описание слайда:
Теперь используем правило составного оператора и 2-е правило консеквенции получим

Слайд 31


Доказательство правильности программ. Структурное программирование, слайд №31
Описание слайда:

Слайд 32





Осталось доказать спецификацию для составного оператора 
{ s1;s3}
Описание слайда:
Осталось доказать спецификацию для составного оператора { s1;s3}

Слайд 33





Мы доказали частичную корректность алгоритма, так как при доказательстве не использовалось условие y>0. Это условие используется для доказательства завершаемости алгоритма.
Мы доказали частичную корректность алгоритма, так как при доказательстве не использовалось условие y>0. Это условие используется для доказательства завершаемости алгоритма.
Описание слайда:
Мы доказали частичную корректность алгоритма, так как при доказательстве не использовалось условие y>0. Это условие используется для доказательства завершаемости алгоритма. Мы доказали частичную корректность алгоритма, так как при доказательстве не использовалось условие y>0. Это условие используется для доказательства завершаемости алгоритма.

Слайд 34





Доказательство завершаемости алгоритмов
Деление целых неотрицательных чисел.
		-----------------------------------------
			{x >= 0, y > 0}	
				q = 0; r = x;
			{r + y > 0}
				while (r >= y)
				  {r = r – y; q = q + 1
			{r + y > 0}
				  }
Инвариантом цикла является выражение    r + y > 0 и это
выражение   остается большим нуля и на каждом шаге цикла
уменьшается за счет оператора r = r – y. Следовательно, цикл
может повторяться только конечное число раз, исходя из условий 
			x > 0 и y > 0
Описание слайда:
Доказательство завершаемости алгоритмов Деление целых неотрицательных чисел. ----------------------------------------- {x >= 0, y > 0} q = 0; r = x; {r + y > 0} while (r >= y) {r = r – y; q = q + 1 {r + y > 0} } Инвариантом цикла является выражение r + y > 0 и это выражение остается большим нуля и на каждом шаге цикла уменьшается за счет оператора r = r – y. Следовательно, цикл может повторяться только конечное число раз, исходя из условий x > 0 и y > 0

Слайд 35





Доказательство завершаемости алгоритмов
Используя условие y > 0, доказали завершаемость алгоритма,
Сочетание доказательства частичной корректности алгоритма,
выполненное с использованием условия x > 0, с доказательством
завершаемости алгоритма дает полную корректность программы.
	
Если не удается найти выражение, которое будет инвариантом цикла, это еще не значит, что алгоритм не обладает завершенностью, необходимо доказать, что инвариантом является не только предусловие 
	{ P } но и условие {P ^ B} для цикла c предусловием и условие {Q ^  B} для цикла с постусловием. 
	.
Описание слайда:
Доказательство завершаемости алгоритмов Используя условие y > 0, доказали завершаемость алгоритма, Сочетание доказательства частичной корректности алгоритма, выполненное с использованием условия x > 0, с доказательством завершаемости алгоритма дает полную корректность программы. Если не удается найти выражение, которое будет инвариантом цикла, это еще не значит, что алгоритм не обладает завершенностью, необходимо доказать, что инвариантом является не только предусловие { P } но и условие {P ^ B} для цикла c предусловием и условие {Q ^ B} для цикла с постусловием. .

Слайд 36





Умножение двух положительных целых чисел x и y
Алгоритм, использующий только операции сложения и вычитания,
может быть таким: 1) положить z = 0 и u = x;  2) увеличить z на
величину y и уменьшить u на 1;  3) повторять пункт 2) до тех пор,
пока u не станет равным нулю. Структурная схема:
 				        A	x > 0, y > 0
				z = 0; u = x
				       B	(z+u*y = x*y) ^ (u>0)
				z = z + y; u = u – 1;
				        C    (z+u*y = x*y) ^ (u>=0)

			          нет      u = 0
					
				          D	   да (z+u*y = x*y) ^ (u=0)
						(z = x * y)
Описание слайда:
Умножение двух положительных целых чисел x и y Алгоритм, использующий только операции сложения и вычитания, может быть таким: 1) положить z = 0 и u = x; 2) увеличить z на величину y и уменьшить u на 1; 3) повторять пункт 2) до тех пор, пока u не станет равным нулю. Структурная схема: A x > 0, y > 0 z = 0; u = x B (z+u*y = x*y) ^ (u>0) z = z + y; u = u – 1; C (z+u*y = x*y) ^ (u>=0) нет u = 0 D да (z+u*y = x*y) ^ (u=0) (z = x * y)

Слайд 37





Соотношения в точках  B,C и D отражают суть алгоритма:
z используется для накопления суммы, u  определяет
сколько еще раз нужно  вычислить сумму, чтобы
получить произведение x*y , т.е. как раз справедливо
соотношение     z + u * y = x * y.     И это соотношение
является инвариантом цикла, что отражает блок-схема.
Перед очередным умножением в точке B u > 0, а в
точке C  может быть u >=0. Реализация алгоритма:
			{(x>0) ^ (y>0)}
			{ z = 0; u = x;
			   do 
			     z = z + y; u = u - 1;
			   while (u <> 0);
			};
			{ (z = x * y)}
Описание слайда:
Соотношения в точках B,C и D отражают суть алгоритма: z используется для накопления суммы, u определяет сколько еще раз нужно вычислить сумму, чтобы получить произведение x*y , т.е. как раз справедливо соотношение z + u * y = x * y. И это соотношение является инвариантом цикла, что отражает блок-схема. Перед очередным умножением в точке B u > 0, а в точке C может быть u >=0. Реализация алгоритма: {(x>0) ^ (y>0)} { z = 0; u = x; do z = z + y; u = u - 1; while (u <> 0); }; { (z = x * y)}

Слайд 38





Применяем правила вывода для доказательства правильности алгоритма:
Из исходных условий можно записать:
			((x>0) ^ (y>0))              ((x*y = x*y) ^ (x>0)
Применив правило вывода для составного оператора, расположенного между точками A и B, получим:
  {(x*y = x*y) ^ (x>0)}  {z = 0; u = x;}  {(z+u*y = x*y) ^ (u > 0)}
Использовав второе правило консеквенции, получим:
	{(x>0) ^ (y>0)}   {(z = 0); (u = x)}   {(z+u*y = x*y) ^ (u > 0)}
Теперь используем правило вывода для составного оператора, заключенного между точками B и C:
(*)  {(z+u*y = x*y) ^ (u>0)}   {z = z+y; u = u - 1}   {(z+u*y = x*y) ^ (u≥0)}
Здесь постусловие соответствует точке С, и если по схеме попадем на ветвь, когда u ≠ 0, то верно будет соотношение:
(**)   ((z+u*y = x*y) ^ (u ≥ 0) ^ ¬(u = 0))        ((z+u*y = x*y) ^ (u > 0))
Описание слайда:
Применяем правила вывода для доказательства правильности алгоритма: Из исходных условий можно записать: ((x>0) ^ (y>0)) ((x*y = x*y) ^ (x>0) Применив правило вывода для составного оператора, расположенного между точками A и B, получим: {(x*y = x*y) ^ (x>0)} {z = 0; u = x;} {(z+u*y = x*y) ^ (u > 0)} Использовав второе правило консеквенции, получим: {(x>0) ^ (y>0)} {(z = 0); (u = x)} {(z+u*y = x*y) ^ (u > 0)} Теперь используем правило вывода для составного оператора, заключенного между точками B и C: (*) {(z+u*y = x*y) ^ (u>0)} {z = z+y; u = u - 1} {(z+u*y = x*y) ^ (u≥0)} Здесь постусловие соответствует точке С, и если по схеме попадем на ветвь, когда u ≠ 0, то верно будет соотношение: (**) ((z+u*y = x*y) ^ (u ≥ 0) ^ ¬(u = 0)) ((z+u*y = x*y) ^ (u > 0))

Слайд 39





Используем правило вывода для оператора цикла с постусловием
			{P}  S  {Q},  Q ^ B     P
		       {P} do s; while (B); {Q ^ ¬ B}
Если S – это операторы, стоящие между точками B и C,
а P и Q – это предусловие и постусловие в выражении (*),
тогда (*) и (**) – это правильные утверждения, стоящие
над чертой, а это значит, что справедливо и
утверждение, записанное под чертой, т.е. корректна:
		{(z+u*y = x*y) ^ (u > 0))}
		do 
		  z = z+y; u = u – 1; 
		while (u = 0);
		{(z + u * y = x * y) ^ (u≥0) ^ (u = 0)}
Описание слайда:
Используем правило вывода для оператора цикла с постусловием {P} S {Q}, Q ^ B P {P} do s; while (B); {Q ^ ¬ B} Если S – это операторы, стоящие между точками B и C, а P и Q – это предусловие и постусловие в выражении (*), тогда (*) и (**) – это правильные утверждения, стоящие над чертой, а это значит, что справедливо и утверждение, записанное под чертой, т.е. корректна: {(z+u*y = x*y) ^ (u > 0))} do z = z+y; u = u – 1; while (u = 0); {(z + u * y = x * y) ^ (u≥0) ^ (u = 0)}

Слайд 40





Из постусловия этого утверждения следует
	
((z + u * y = x * y) ^ (u≥0) ^ (u = 0))        z = x * y
И, наконец, используем правило вывода для составного оператора S1, S2, получим:
		{(x > 0) ^ (y > 0)}   S1; S2;   {z = x * y}   
Доказали частичную корректность алгоритма суммирования целых неотрицательных чисел.
Описание слайда:
Из постусловия этого утверждения следует ((z + u * y = x * y) ^ (u≥0) ^ (u = 0)) z = x * y И, наконец, используем правило вывода для составного оператора S1, S2, получим: {(x > 0) ^ (y > 0)} S1; S2; {z = x * y} Доказали частичную корректность алгоритма суммирования целых неотрицательных чисел.

Слайд 41





Доказательство завершаемости алгоритма суммирования целых неотрицательных чисел:
			--------------------------------
			{ (x > 0), (y > 0)}
		     {  z = 0; u = x;
			{ (u + y) > 0}
		         do 
			z = z + y; u = u – 1; { (u + y) > 0}

			while (u ≠ 0);
			----------------------------------
 Инвариантом цикла является выражение u + y > 0,
и оно остается больше нуля, и на каждом шаге цикла уменьшается
за счет оператора u = u – 1. Следовательно цикл может
Повторяться только конечное число раз, исходя из условия того,
 что  исходные данные x и y неотрицательные числа. 
	Доказали завершаемость, доказали полную корректность алгоритма.
Описание слайда:
Доказательство завершаемости алгоритма суммирования целых неотрицательных чисел: -------------------------------- { (x > 0), (y > 0)} { z = 0; u = x; { (u + y) > 0} do z = z + y; u = u – 1; { (u + y) > 0} while (u ≠ 0); ---------------------------------- Инвариантом цикла является выражение u + y > 0, и оно остается больше нуля, и на каждом шаге цикла уменьшается за счет оператора u = u – 1. Следовательно цикл может Повторяться только конечное число раз, исходя из условия того, что исходные данные x и y неотрицательные числа. Доказали завершаемость, доказали полную корректность алгоритма.



Похожие презентации
Mypresentation.ru
Загрузить презентацию