Доказательство пpавильности декодиpования


Содержание

Вопрос 39. Методы доказательства правильности программ

К методам проверки правильности программ относятся:

1) методы доказательство правильности программ;

2) верификация и аттестация программ.

Методы доказательства правильности программ, появились в 80–е годы, делятся на два класса:1. Точные методы доказательства правильности программ.

2. Методы доказательства частичной правильности программ.

Наиболее известными точными методами доказательства программ являются метод рекурсивной индукции или индуктивных утверждений Флойда и Наура и метод структурной индукции Хоара и др. Эти методы основываются на утверждениях и пред и пост–условиях.

Общая характеристика формальных методов доказательства

Метод Флойда основан на определении условий для входных и выходных данных и в выборе контрольных точек в доказываемой программе так, чтобы путь прохождения по программе проходил хотя бы через одну контрольную точку. Для этих точек формулируются утверждения о состоянии переменных в этих точках. Каждая точка рассматривается, как индуктивное утверждение, т.е формула, которая остается истинной при возвращении в эту точку программы и зависит не только от входных и выходных данных, но от значений промежуточных переменных. На основе индуктивных утверждений и условий на аргументы программы строятся условия проверки правильности этой программы. Для каждого пути программы между двумя точками устанавливается соответствие условий правильности и определяется истинность этих условий при успешном завершении программы на данных, которые удовлетворяют входным условиям.

Доказательство корректности применялось для уже написанных программ и тех, что разрабатываются путем последовательной декомпозиции задачи на подзадачи, для каждого из них формулировалось утверждение с учетом условий ввода и вывода и соответствующих входных и выходных утверждений. Доказать истинность этих условий – основа метода доказательства полноты, однозначности и непротиворечивости спецификаций.

Метод Хоара – это усовершенствованный метод Флойда, основанный на аксиоматическом описании семантики ЯП исходных программ. Каждая аксиома описывает изменение значений переменных с помощью операторов этого языка. Операторы перехода, рассматриваемый как выход из циклов и аварийных ситуаций, и вызовов процедур определяются правилами вывода, каждое из которых задает индуктивное высказывание для каждой метки и функции исходной программы Система правил вывода дополняется механизмом переименования глобальных переменных, условиями на аргументы и результаты.

Метод рекурсивныхиндукций Дж. Маккартисостоит в структурнойпроверкефункций, работающих над структурными типами данных, изменяетструктурыданных и диаграммыпереходавовремя символьного выполненияпрограмм. Выполняемая программа рассматривается как серия изменений состояний, самое последнее состояние считается выходным состоянием и если оно получено, то программа считается правильной. Моделирование выполнения кода является дорогим процессом, обеспечивающим высокое качество исходного кода.

Основу этого метода составляет ­ – перевычисление, математическая индукция и абстракция.Перевычисление базируется на инвариантах отношений, которые проверяют границы вычислений в проверяемой программе. Математическая индукция применяется для проверки циклов и рекурсивных процедур с помощью необходимых и достаточных условий повторения вычислений. Абстракция задает количественные ограничения, которые накладываются методом перевычислений.

Чтобы доказать, что некоторая программа правильная, надо правильно описать, что эта программа делает, т.е ее логику. Такое описание называется правильным высказыванием или просто утверждением. Исходя из предположения, при котором работающая программа в конце концов успешно завершится, утверждение о правильности будет справедливо.

Модель формального доказательства конкретности программы

Сущность формального доказательства заключается в преобразовании кода программы к логической структуре.

Чтобы доказать, что программа корректная, необходимо последовательно расположить все части, которые начинаются с А1 и заканчиваются Аend. Последовательность этих частей определяет, что истинность входного условия обеспечивает истинность выходного условия. После идентификации всех частей проверяется истинность каждой части программы с утверждением, что входные утверждения являются следствием выходного утверждения, которые отвечают преобразованиям ее частей. Доказательство программы завершено.

Дата добавления: 2020-02-15 ; просмотров: 510 ; ЗАКАЗАТЬ РАБОТУ

Достоверность и достаточность доказательств

Доказательства должны быть достоверны и их должно быть достаточно для вынесения решения по делу.

Достоверность доказательств

Вывод о наличии или об отсутствии искомых фактов суд делает на основании достоверных доказательств. Достоверность — это качество доказательства, характеризующее точность, правильность отражения обстоятельств, входящих в предмет доказывания. Достоверность доказательств может подтверждаться:

  • 1) получением доказательства из достоверного источника информации. Но даже самый добросовестный свидетель может заблуждаться, ошибаться. Современные методы экспертных исследований могут оказаться недостаточными для формулирования заключения, и прочие особенности источника могут повлиять на качество доказательства. Достоверность показаний свидетеля зависит от того, при каких условиях происходило восприятие, запоминание, а затем воспроизведение событий. Важное значение в этом процессе имеют личностные особенности конкретного человека. При оценке достоверности заключения эксперта имеют значение избранная методика исследования, ее бесспорность, возможность получения окончательного, а не вероятностного вывода и проч. Достоверность письменных доказательств проверяется на предмет наличия всех необходимых реквизитов. Подчистки, нечеткость печати, подписи и т. п. могут свидетельствовать о недостоверности доказательств. Условия хранения вещественных доказательстве момента их изъятия и до предъявления в суд могут повлиять на достоверность информации, полученной при их исследовании в судебном заседании;
  • 2) сопоставлением нескольких доказательств. Обнаружение противоречивых, взаимоисключающих сведений говорит о недостоверности каких-то из доказательств. При этом немаловажную роль играет выяснение отношений между лицами, участвующими в деле, свидетелями. Например, вряд ли правильно строить решение суда только на основе показаний свидетеля, являющегося близким другом истца или ответчика, необходимо сопоставить эти показания с другими доказательствами по делу, чтобы убедиться в их объективности;
  • 3) оценкой всей совокупности доказательств, имеющихся по делу.

Достаточность доказательств

Если относимость, допустимость, достоверность доказательств оцениваются на любой стадии гражданского процесса, то достаточность доказательств в основном определяется при разрешении дела. По каждому конкретному делу достаточность доказательств оценивается индивидуально. Достаточность доказательств — это качество совокупности имеющихся доказательств, необходимых для разрешения дела. Невозможно дать какой бы то ни было однозначный совет о достаточности доказательств, приемлемый для всех случаев. Можно лишь сказать, что доказательств достаточно тогда, когда суд в состоянии разрешить дело. При этом достаточность доказательств — это не количественный, а качественный показатель.

Достоверность и достаточность доказательств

Достоверность и достаточность доказательств – две важные характеристики доказательств, которые используются и для раскрытия сущности доказательств, и для их оценки.

Достоверность доказательств

Доказательство признается судом достоверным, если в результате его проверки и исследования выясняется, что содержащиеся в нем сведения соответствуют действительности. Проверка доказательств на их достоверность может охватывать многие аспекты.

Во-первых, достоверное доказательство должно быть получено из доброкачественного источника информации. Но это не единственное требование, так как даже самый доброкачественный свидетель может заблуждаться, ошибаться. Современные методы экспертных исследований могут оказаться недостаточными для формулирования доброкачественного заключения, и прочие особенности источника могут сказаться на качестве доказательства. Достоверность показаний свидетеля зависит от того, при каких условиях происходило восприятие, запоминание, а затем воспроизведение событий. Большое значение в этом процессе играют личностные особенности конкретного человека. Если говорить о заключении эксперта, то важна избранная методика исследования, ее бесспорность, возможность получения окончательного, а не вероятностного вывода и пр. Достоверность письменных доказательств проверяется на предмет наличия всех необходимых реквизитов. Подчистки, нечеткость печати, подписи и т.п. могут свидетельствовать о недостоверности доказательств.

Статья 67 ГПК содержит подробную регламентацию оценки достоверности письменных доказательств. Так, при оценке документов или иных письменных доказательств суд обязан с учетом других доказательств убедиться в том, что такие документ или иное письменное доказательство исходят от органа, уполномоченного представлять данный вид доказательств, подписаны лицом, имеющим право скреплять документ подписью, содержат все другие неотъемлемые реквизиты данного вида доказательств (ч. 5 ст. 67 ГПК). Недаром для оценки достоверности доказательства относительно принадлежности подписи уполномоченному лицу суд запрашивает правоустанавливающие документы, из которых следует полномочие лиц на подписание документов.

При оценке копии документа или иного письменного доказательства суд проверяет, не произошло ли при копировании изменение содержания копии документа по сравнению с его оригиналом, с помощью какого технического приема выполнено копирование, гарантирует ли копирование тождественность копии документа и его оригинала, каким образом сохранялась копия документа (ч. 6 ст. 67 ГПК). По причине недостоверности доказательств суд не принимает письма, направленные с помощью факса, ибо последние сложно проверить на предмет их достоверности.

Вопросы оценки достоверности доказательств часто отражены в постановлениях Пленума Верховного Суда РФ. Например, по делам, связанным с усыновлением детей, при исследовании представленных органом опеки и попечительства документов судье необходимо проверить, выданы ли они компетентными органами (лицами) и заверены ли они соответствующими подписями и печатями. Если судьей будет установлено, что к заключению органа опеки и попечительства приложены не все необходимые документы либо заключение или документы не отвечают требованиям, предъявляемым к ним, то ему следует истребовать надлежащие заключение и документы от органа опеки и попечительства (п. 5 постановления Пленума ВС РФ от 20.04.2006 № 8).

Во-вторых, достоверность информации проверяется при сопоставлении нескольких доказательств. «При возникновении сомнений в достоверности исследуемых доказательств их следует разрешать путем сопоставления с другими установленными судом доказательствами, проверки правильности содержания и оформления документа, назначения в необходимых случаях экспертизы и т.д.» (п. 14 постановления Пленума Верховного Суда РФ от 26.06.2008 № 13 «О применении норм Гражданского процессуального кодекса Российской Федерации при рассмотрении и разрешении дел в суде первой инстанции» (далее – постановление Пленума ВС РФ от 26.06.2008 №13).

Обнаружение противоречивых, взаимоисключающих сведений говорит о недостоверности каких-либо доказательств. Так, суд не может считать доказанными обстоятельства, подтверждаемые только копией документа или иного письменного доказательства, если утрачен и не передан суду оригинал документа, и представленные каждой из спорящих сторон копии этого документа не тождественны между собой, и невозможно установить подлинное содержание оригинала документа с помощью других доказательств (ч. 7 ст. 67 ГПК).

Можно привести интересный случай из судебной практики, который подтверждает необходимость рассмотрения всех доказательств во взаимосвязи для выявления их достоверности или, наоборот, противоречивости.

Пример. Б. обратилась в городской суд г. Лесного с иском к Р. о компенсации морального вреда, указав, что 26 мая 2007 г. около 11 часов корова соседей Р. зашла на ее приусадебный участок, расположенный рядом с жилым домом, на котором был посажен картофель, и истоптала его. Ответчица Р. пришла на участок истицы с граблями и стала боронить землю. Когда Р. отказалась выполнить требования Б. покинуть ее огород, Б. взяла Р. за руку и повела к выходу, в ответ Р. укусила ее за руку. В результате действий Р. истице было причинено телесное повреждение в виде кровоподтека в области тыльной поверхности левой кисти книзу от второго пястно-фалангового сустава, которое относится к телесным повреждениям, не повлекшим за собой вред здоровью. От укуса ответчицы она испытала боль, к судмедэксперту обратилась по направлению участкового инспектора.


В связи с причиненными физическими страданиями, Б. просила взыскать с ответчицы компенсацию морального вреда в размере 2000 руб., а также расходы по оплате услуг адвоката.

Ответчица Р., действуя лично и через представителя П., иск не признала, указав, что истца не кусала, а сделала только вид, что хочет ее укусить, повреждения Б. могла получить на своем земельном участке, могла укусить себя сама.

В кассационной жалобе истица также ссылалась на незаконность определения суда от 17 июня 2008 г., которым только частично было удовлетворено ее ходатайство об обеспечении доказательств по делу, а именно: об ознакомлении и снятии копий с журналов и документов мирового судьи участка № 2 г. Лесного за июнь- июль 2007 г., относящихся к их делу; о признании недопустимыми доказательствами по делу и исключении из числа доказательств акта медицинского освидетельствования от 28 мая 2007 г., объяснения лиц от 26 мая 2007 г., полученные участковым инспектором Е.; о проведении следственного эксперимента по делу с использованием грабель для установления положения истца и ответчика во время конфликта; о получении по месту работы истца сведений о времени ее нахождения на работе 26 мая 2007 г.; об определении места укуса, фактического места укуса; о вызове в судебное заседание специалиста для участия в следственном эксперименте для пояснения значений медицинских терминов по данным анатомического атласа и месту укуса; о получении судом отпечатка режущих кромок передних зубов (резцов) Р. для установления картины укуса, если бы он был сделан Р.; о приобщении фотографии зубов Р.; о запросах в ЦМСЧ-91 г. Лесного, в частности, сведений о графике работы судебно-медицинского эксперта, в удовлетворении которых суд отказал, только частично удовлетворив ходатайство представителя ответчика П. о приобщении к материалам дела фотографии зубов Р.; представленные материалы, поступившие мировому судье из ОВД г. Лесного (в подлинниках) исследованы судом и приобщены к материалах дела в копиях [1] .

Как следует из материалов дела, мировому судье поступил материал проверки по факту причинения Б. телесных повреждений Р. по признакам преступления, предусмотренного ст. 116 УК, однако в связи с тем, что Б. не подала мировому судье заявление о возбуждении дела частного обвинения в отношении Р., по данному факту уголовное дело частного обвинения не возбуждалось. Вместе с тем несмотря на то, что уголовное дело частного обвинения в отношении Р. по факту причинения Б. телесных повреждений не возбуждалось, судом было достоверно установлено, что ответчица причинила истице телесные повреждения, укусив ее за руку, что подтверждается актом судебно-медицинского освидетельствования от 28

мая 2007 г. в отношении Б., у которой судмедэкспертом было зафиксировано телесное повреждение в виде кровоподтека в области тыльной поверхности левой кисти книзу от второго пястно-фалангового сустава.

В то же время материалы проверки, проведенной участковым инспектором Е., и показания свидетелей К. и Н., не доверять которым у суда не имелось оснований, поскольку они являются незаинтересованными в исходе дела лицами, подтверждают обстоятельства причинения ответчицей истице телесных повреждений в результате действий, которые истица и свидетель К. расценивали как укус, а ответчица, не оспаривая обстоятельств произошедшего между ней и истицей инцидента, имевшего место на земельном участке Б., полагала имитацией укуса. Оснований подвергать сомнениям показания свидетеля К., которая последовательно и подробно давала одинаковые показания как в своих письменных объяснениях в рамках проводимой участковым инспектором проверки, так и в судебном заседании, не имелось. Доводы ответчика о фиктивности данных доказательств являются необоснованными, не опровергаются они и представленной записью на диске от 26 июня 2008 г., при отсутствии подтверждения о том, что запись беседы проводилась именно с данным лицом, а также в связи с тем, что указанное доказательство было получено после вынесения судом решения 17 июня 2008 г.

Суд кассационной инстанции иные утверждения ответчика не может принять во внимание, поскольку они направлены на неправильное толкование закона, однако суд первой инстанции правильно применил закон и оснований к отмене решения не имеется. Доводы о том, что Б. укусила себя сама или имитировала зубной укус, суд кассационной инстанции считает не убедительными и не доказанными.

Таким образом, факт причинения Б. телесных повреждений именно Р. подтверждается помимо письменных доказательств показаниями сторон и свидетеля К., которым так же, как и показаниям свидетеля Н., суд дал правильную оценку [2] .

Из данного примера видна мотивация признания судом достоверности доказательств: их непротиворечивость, незаинтересованность источников информации и пр.

В-третьих, достоверность доказательств проверяется при оценке всей совокупности доказательств, имеющихся по делу. В связи с этим, как уже было отмечено ранее, Пленум Верховного Суда РФ указал, что в случае возникновения сомнений в достоверности исследуемых доказательств их следует разрешать путем сопоставления с другими установленными судом доказательствами, проверки правильности содержания и оформления документа, назначения в необходимых случаях экспертизы и т.д. (п. 14 постановления Пленума ВС РФ от 26.06.2008 № 13).

Таким образом, достоверность – это качество доказательства, характеризующее точность, правильность отражения обстоятельств, входящих в предмет доказывания.

Если решение суда основано на недостоверных доказательствах, то оно подлежит отмене.

Пример. «С позицией суда о правомерности обжалуемых заявителями действий по передаче открепительных удостоверений в территориальные избирательные комиссии без их пересчета и, следовательно, без указания в актах количества переданных открепительных удостоверений на право участия в выборах Президента РФ нельзя согласиться.

Как видно из текста приобщенной к делу выписки из журнала телефонограмм, разрешение Центральной избирательной комиссии РФ организовать выдачу открепительных удостоверений пачками (четные и нечетные) с их пересчетом в комиссиях и составлением актов было передано в Центральную избирательную комиссию Республики Татарстан телефонограммой за подписью секретаря Центральной избирательной комиссии РФ Вешнякова А. А. в ответ на письмо Центральной избирательной комиссии Республики Татарстан за исходящим № 23-ВПР от 3 апреля 1996 г.

К материалам дела приобщена также ксерокопия письма Центральной избирательной комиссии Республики Татарстан от 3 апреля 1996 г. № 25-ВПР.

Однако суд не уточнил, принимала ли Центральная избирательная комиссия РФ на своем заседании решение, разрешающее Центральной избирательной комиссии Республики Татарстан изменение порядка выдачи открепительных удостоверений, тогда как для правильного разрешения дела в этом имелась необходимость, поскольку установленный в нормативном акте Центральной избирательной комиссии РФ порядок передачи открепительных удостоверений была вправе изменить лишь сама Центральная избирательная комиссия РФ, а не отдельное должностное лицо этой комиссии. Как видно из дела, Хафизов и его представитель Султанов в опровержение вывода суда о правомерности обжалуемых ими действий Центральной избирательной комиссии Республики Татарстан и должностных лиц Центральной избирательной комиссии Республики Татарстан представили в суд кассационной инстанции новые относимые доказательства и заявили ходатайство об их исследовании, приведя обоснования невозможности представления этих доказательств в суд первой инстанции. Судебная коллегия по гражданским делам Верховного Суда РФ, несмотря на предоставленное ей процессуальным законом как суду кассационной инстанции право на исследование новых доказательств при условии, что они не могли быть представлены в суд первой инстанции (ч. 1 ст. 294 ГПК РСФСР), ходатайство Хафизова и Султанова не обсудила и, не признав приведенные ими обоснования несостоятельными, оставила новые доказательства без внимания.

Илон Маск рекомендует:  Dos fn 57h установитьопросить датувремя файла

Из представленных Хафизовым и Султановым писем Секретаря Центральной избирательной комиссии РФ Вешнякова А. А. от 6 ноября 1996 г. за № 01-22/3311 и от 5 декабря 1996 г. за № 01-22/3505 усматривается, в частности, что письмо из Центральной избирательной комиссии Республики Татарстан от 3 апреля 1996 г. за № 23-ВПР регистрацию в Управлении документационного обеспечения Центральной избирательной комиссии РФ не проходило, телефонограмм в адрес Центральной избирательной комиссии Республики Татарстан не передавалось, бланки открепительных удостоверений отправлялись Центральной избирательной комиссии Республики Татарстан не 3, а 9 апреля 1996 г., формирование посылок производилось путем отсчитывания по порядковым номерам.

Поскольку такие фактические данные не были известны заявителям при рассмотрении дела, имеют для его разрешения существенное значение, ставя под сомнение достоверность положенных в основу решения доказательств, они подлежат исследованию судом первой инстанции и оценке согласно ст. 56 ГПК РСФСР в совокупности со всеми материалами дела» [3] .

Решение по делу было отменено и направлено на новое рассмотрение в тот же суд.

Клуб студентов «Технарь». Уникальный сайт с дипломами и курсовыми для технарей.

Все разделы / Информатика /

Алгоритмы сжатия данных

Тип работы: Работа
Форматы файлов: Microsoft Office

Энтропия и количество информации

Комбинаторная, вероятностная и алгоритмическая оценка количества информации

Моделирование и кодирование

Некоторые алгоритмы сжатия данных

BWT — преобразование и компрессор

Алгоритм арифметического кодирования

Реализация алгоритма арифметического кодирования

Доказательство правильности декодирования

Приращаемая передача и получение

Переполнение и завершение

Адаптивная модель для арифметического кодирования

Приложение 1. Программный код

Приложение 2. Интерфейс программы

Основоположником науки о сжатии информации принято считать Клода Шеннона. Его теорема об оптимальном кодировании показывает, к чему нужно стремиться при кодировании информации и на сколько та или иная информация при этом сожмется. Кроме того, им были проведены опыты по эмпирической оценке избыточности английского текста. Он предлагал людям угадывать следующую букву и оценивал вероятность правильного угадывания. На основе ряда опытов он пришел к выводу, что количество информации в английском тексте колеблется в пределах 0.6 — 1.3 бита на символ. Несмотря на то, что результаты исследований Шеннона были по-настоящему востребованы лишь десятилетия спустя, трудно переоценить их значение.


Первые алгоритмы сжатия были примитивными в связи с тем, что была примитивной вычислительная техника. С развитием мощностей компьютеров стали возможными все более мощные алгоритмы. Настоящим прорывом было изобретение Лемпелем и Зивом в 1977 г. словарных алгоритмов. До этого момента сжатие сводилось к примитив­ному кодированию символов. Словарные алгоритмы позволяли кодир­овать повторяющиеся строки символов, что позволило резко повысить степень сжатия. Важную роль сыграло изобретение примерно в это же время арифметического кодирования, позволившего воплотить в жизнь идею Шеннона об оптимальном кодировании. Следующим прорывом было изобретение в 1984 г. алгоритма РРМ. Следует отметить, что это изобретение долго оставалось незамеченным. Дело в том, что алгоритм сложен и требует больших ресурсов, в первую очередь больших объемов памяти, что было серьезной проблемой в то время. Изобретенный в том же 1984 г. алгоритм LZW был чрезвычайно популярен благодаря своей простоте, хорошей рекламе и нетребовательности к ресурсам, несмотря на относительно низкую степень сжатия. На сегодняшний день алгоритм РРМ является наилучшим алгоритмом для сжатия текстовой информации, a LZW давно уже не встраивается в новые приложения (однако широко используется в старых).

Будущее алгоритмов сжатия тесно связано с будущим компью­терных технологий. Современные алгоритмы уже вплотную приблизи­лись к Шенноновской оценке 1.3 бита на символ, но ученые не видят причин, по которым компьютер не может предсказывать лучше, чем человек. Для достижения высоких степеней сжатия приходится использовать более сложные алгоритмы. Однако существовавшее одно время предубеждение, что сложные алгоритмы с более высокой степенью сжатия всегда более медленны, несостоятельно. Так, существуют крайне быстрые реализации алгоритмов РРМ для текстовой информации и SPIHT для графики, имеющие очень высокую степень сжатия.

Размер файла: 93,8 Кбайт
Фаил: (.zip)

Лекция 7: Формальные спецификации, доказательство и верификация программ

6.1.3. Спецификации задач концепторным языком

Для постановки сложных математических задач (суммирование бесконечных рядов, теоретикомножественных операций с бесконечными множествами, гильбертов оператор и др.) и задач искусственного интеллекта (игры, распознавание образов и др.) предложен общематематический процедурный язык, так называемый концепторный язык — КЯ [6.17]. В этом языке процесс описания сложной задачи проводится путем обоснования решения задачи с математической точки зрения, затем формального описания постановок задач и, наконец, делается переход к алгоритмическому описанию.

Средства спецификации сложных задач.Основу КЯ составляет теоретикомножественный язык, который содержит декларативные и императивные средства теории множеств ЦермелоФренкеля. Ядро содержит набор элементов (типы, выражения, операторы) и средства определения новых типов, выражений и операторов.

Декларативные средства КЯ — это типизированный, многосортный логикоматематический язык задания выражений и структуризации множества значений ( денотат ). Выражения состоят из термов и формул, термы обозначают объекты ПрО, а формулы — утверждения об объектах и отношениях между ними. К конструкторам составных типов и формул относятся функторы , предикаты, конекторы и субнекторы.

Функтор — это конструктор, преобразующий термы в термы. Предикаты превращают термы в формулы, конекторы включают в себя логические связки и кванторы для преобразования одной формулы в другую. Субнектор (дескриптор) — это конструктор построения термов из выражений и формул. Конструкторы термов — это традиционные арифметические и алгебраические операции над числовыми множествами и вещественными функциями. Конструкторы формул включают в себя предикаты, состоящие из предикатных и числовых символов, а также конекторы, состоящие из логических связок, кванторов и конструкторов теории множеств.

Императивные средства КЯ — это операторы и процедуры для описания объектов ПрО с помощью концепторов, состоящих из разделов для определения объектов решаемой задачи и действий над ними. Каждый концептор — это именованный набор определений и действий со следующей структурой описания:

Концептор — это декларативное описание объектов и императивное описание операторов вычисления выражений тела. Рассматривается два случая:

  1. декларативный концептор состоит из определений параметров и типов;
  2. императивный концептор — это тело из операторов задач.

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

Если полученный концептор неэффективен, то для повышения эффективности строится алгоритм, эквивалентный данному концептору. Он строится аппроксимацией концепторного решения путем замены неконструктивных объектов и неэффективных операций конструктивными и более эффективными аналогами.

Формализация КЯ. Общая схема формализации декларативной и императивной частей КЯ расширяется логикоматематическим языком, традиционными структурными операторами (присваивание, последовательность, цикл и т.п.), а также теоретикомодельными (денотационными) и аксиоматическими средствами формализации неконструктивной семантики КЯ.

Денотационный подход состоит в определении семантики языка путем подстановки каждому выражению соответствующего элемента из множества денотатов функции интерпретации символов сигнатуры языка. Каждой константе , функциональному символу и предикатному символу сопоставляется объект из множества денотат . Этот способ интерпретации семантики выражений и операторов языка аналогичен денотационной семантики ЯП. Главное отличие семантики КЯ от семантики программ — это ее неконструктивность. С каждым КЯ можно связать некоторую дедуктивную теорию, которая отражает свойства концепторов.

Формальная дедуктивная теория строится путем выделения из множества всех формул подмножества аксиом и правил вывода. Для каждой пары , формул дедуктивной теории и каждого оператора создается операторная формула с утверждением, что если истинно перед выполнением оператора , то завершение оператора обеспечивает истинность , т.е. формула — предусловие, а — постусловие оператора . С помощью неконструктивных объектов и неразрешимых формул этой теории можно адекватно описывать свойства неэффективных процедур.

Аксиоматическое описание КЯ — это аксиомы и утверждения относительно концепторного описания и проведения дедуктивного доказательства и верификации этого описания.

Логико-алгебраические спецификации.При использовании этих спецификаций ПрО представляется в виде алгебраической системы с помощью соответствующих носителей, сигнатуры и трех принципов. Первый принцип — логико-алгебраическая спецификация ПрО и уточнение понятий ПрО, второй принцип — описание свойств ПрО в виде аксиом, которые формулируются в языке предикатов первого порядка и хорновских атомарных формул, и, наконец, третий принцип — это определение термальных моделей из основных термов спецификации. Логико-алгебраические спецификации можно ограничить хорновскими формулами из-за простоты аксиом и для упрощения процесса автоматического доказательства теорем. Отношения в сигнатурах спецификаций заменяются булевыми функциями.

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

На первом этапе дискретная система рассматривается как черный ящик с конечным набором входов, выходов и состояний. Области значений входов и выходов — произвольные, а функционирование системы S — это набор частичных отображений и операций алгебраической системы . Они образуют частичную алгебру,формальное описание которой выполняется с помощью алгебраических спецификаций и является программой моделирования состояний дискретной системы.

На втором этапе система детализируется в виде совокупности взаимозависимых подсистем , каждая из которой описывается алгебраической спецификацией. В результате получается спецификация системы из функций переходов и выходов, для которых необходимо доказывать корректность. Процесс детализации выполняется на уровне элементной базы или элементарных программ и сопровождается доказательством их корректности. В конечном итоге получается система S, эквивалентная исходной спецификации. Примеры доказательства систем приведены в [6.17]. Рассмотрим один из них.

Пусть требуется построить спецификацию натуральных чисел из множества этих чисел с сигнатурой операций . При построении используется число и функция следования . Спецификация состоит из следующих аксиом:

При этом алгебраические системы становятся многоосновными алгебрами, а аксиомы — спецификациями: тождественными и квазитождественными. Алгебраические спецификации — наиболее используемые, поскольку для них существуют эффективные алгоритмы выполнения, которые преобразуют спецификации в ЯП высокого уровня. Поэтому такие языки называют языками выполняемых логико-алгебраических спецификаций. Их операционная семантика основана на переписывании термов, а создаваемая алгебраическая спецификация получает логическую семантику, используемую при доказательстве теорем.

6.2. Методы доказательства правильности программ

Формальные методы тесно связаны с математическими техниками спецификаций, верификацией и доказательством правильности программ. Эти методы содержат математическую символику, формальную нотацию и аппарат вывода. Правила доказательства являются громоздкими и поэтому на практике редко используются рядовыми программистами. Однако с теоретической точки зрения они развивают логику применения математического метода индукции при проверке правильности программ. На основе спецификации программ проводится частичное и полное доказательство правильности программ [6.4, 6.5].

Под доказательством частичной правильности понимается проверка выполнения свойств данных программы с помощью утверждений, которые описывают то, что должна получить эта программа , когда закончится ее выполнение в соответствии с условиями заключительного утверждения. Полностью правильной программой по отношению к ее описанию и заданным утверждениям будет программа , если она частично правильная и заканчивается ее выполнение при всех данных, удовлетворяющих ей.

Для доказательства частичной правильности используется метод индуктивных утверждений , сущность которого состоит в следующем. Пусть утверждение связано с началом программы, — с конечной точкой программы и утверждение отражает некоторые закономерности значений переменных, по крайней мере, в одной из точек каждого замкнутого пути в программе (например, в циклах). Если при выполнении программа попадает в -ю точку и справедливо утверждение , а затем она проходит от точки к точке , то будет справедливо утверждение .

Теорема 6.1. Если выполнены все действия метода индуктивных утверждений для программы, то она частично правильна относительно утверждений , , .

Требуется доказать что, если выполнение программы закончится, то утверждение будет справедливым. По индукции, при прохождении точек программы, в которых утверждение будет справедливым, то и -я точка программы будет такой же. Таким образом, если программа прошла -точку и утверждения и справедливы, то тогда, попадая из -ой точки в точку, утверждение будет справедливым, что и требовалось доказать.

6.2.1. Характеристика формальных методов доказательства

Наиболее известными формальными методами доказательства программ являются метод рекурсивной индукции или утверждений Флойда, Наура, метод структурной индукции Хоара и др. [6.4, 6.5, 6.18, 6.19].

Метод Флойда основан на определении условий для входных и выходных данных и в выборе контрольных точек в доказываемой программе так, чтобы путь прохождения по программе пересекал хотя бы одну контрольную точку. Для этих точек формулируются утверждения о состоянии и значениях переменных в них (для циклов эти утверждения должны быть истинными при каждом прохождении циклаинварианта).

Каждая точка рассматривается для индуктивного утверждения того, что формула остается истинной при возвращении в эту точку программы и зависит не только от входных и выходных данных, но и от значений промежуточных переменных. На основе индуктивных утверждений и условий на аргументы создаются утверждения с условиями проверки правильности программы в отдельных ее точках. Для каждого пути программы между двумя точками устанавливается проверка на соответствие условий правильности и определяется истинность этих условий при успешном завершении программы на данных, удовлетворяющих входным условиям.


Формирование таких утверждений — довольно сложная задача, особенно для программ с высокой степенью параллельности и взаимодействия с пользователем. Кроме того, трудно проверить достаточность и правильность самих утверждений.

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

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

Метод Хоара — это усовершенствованный метод Флойда , основанный на аксиоматическом описании семантики языка программирования исходных программ. Каждая аксиома описывает изменение значений переменных с помощью операторов этого языка. Формализация операторов перехода и вызовов процедур обеспечивается с помощью правил вывода, содержащих индуктивные высказывания для каждой точки и функции исходной программы.

Система правил вывода дополняется механизмом переименования глобальных переменных, условиями на аргументы и результаты, а также на правильность задания данных программы. Оператор перехода трактуется как выход из циклов и аварийных ситуаций.

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

Метод Маккарти состоит в структурной проверке функций, работающих над структурными типами данных, структур данных и диаграмм перехода во время символьного выполнения программ. Эта техника включает в себя моделирование выполнения кода с использованием символов для изменяемых данных. Тестовая программа имеет входное состояние, данные и условия ее выполнения.

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

Метод Дейкстры предлагает два подхода к доказательству правильности программ. Первый подход основан на модели вычислений, оперирующей с историями результатов вычислений программы , анализом путей прохождения и правил обработки большого объема информации. Второй подход базируется на формальном исследовании текста программы с помощью предикатов первого порядка. В процессе выполнения программа получает некоторое состояние, которое запоминается для дальнейших сравнений.

Основу метода составляет математическая индукция, абстрактное описание программы и ее вычисление. Математическая индукция применяется при прохождении циклов и рекурсивных процедур, а также необходимых и достаточных условий утверждений. Абстракция позволяет сформулировать некоторые количественные ограничения. При вычислении на основе инвариантных отношений проверяются на правильность границы вычислений и получаемые результаты.

Процесс формального доказательства правильности программ методом математической индукции зарекомендовал себя как система правил статической проверки правильности программ за столом для обнаружения в них формальных ошибок. С помощью этого метода можно доказать истинность некоторого предположения в зависимости от параметра для всех , и тем самым доказать случай . Исходя из истинности для любого значения , доказывается , что достаточно для доказательства истинности для всех .

Путь доказательства следующий. Пусть даны описание некоторой правильной программы (ее логики) и утверждение относительно этой программы, которая при выполнении достигает некоторой определенной точки. Проходя через эту точку раз, можно получить справедливость утверждения , если индуктивно доказать, что:

  1. справедливо при первом проходе через заданную точку,
  2. если справедливо при проходах через заданную точку, то справедливо и прохождение через заданную точку раз.

Исходя из предположения, что программа в конце концов успешно завершится, утверждение о ее правильности будет справедливым.

2.4. Достоверность доказательств

2.4. Достоверность доказательств

В ГПК отмечено, что суд оценивает не только относимость, допустимость доказательств, но и достоверность каждого доказательства в отдельности, а также достаточность и взаимную связь доказательств в их совокупности (ч. 3 ст. 67).

Достоверность доказательств – это качество доказательства, характеризующее точность, правильность отражения обстоятельств, входящих в предмет доказывания. Достоверно то доказательство, которое содержит правдивую информацию о действительности. Недостоверное доказательство не позволяет установить или опровергнуть обстоятельства дела. В связи с этим в процессе рассмотрения дела достоверность доказательств должна проверяться. В частности, достоверность доказательств зависит от доброкачественности источника информации, соответствия различных доказательств по делу друг другу, общей оценки всех собранных и исследованных доказательств.

Проверка доброкачественности источника информации. Прежде всего, о достоверности доказательства можно судить исходя из характеристики источника этой информации. Недаром судья устанавливает отношения свидетеля с лицами, участвующими в деле, что позволяет судить о достоверности сведений, содержащихся в показаниях свидетеля. Но даже самый добросовестный свидетель может заблуждаться, ошибаться. Современные методы экспертных исследований могут оказаться недостаточными для формулирования заключения, а особенности источника могут повлиять на качество доказательств. Достоверность письменных доказательств проверяется на предмет наличия всех необходимых реквизитов, соответствия документа компетенции органа и т.д. Подчистки, нечеткость печати, подписи и т.п. могут свидетельствовать о недостоверности доказательств. Условия хранения вещественных доказательств с момента их изъятия и до предъявления в суд могут повлиять на достоверность информации, полученной при их исследовании в судебном заседании.

Сопоставление доказательства с другими имеющимися в деле доказательствами. Обнаружение противоречивых, взаимоисключающих сведений свидетельствует о недостоверности каких-либо доказательств. При этом немаловажную роль играет выяснение отношений между лицами, участвующими в деле, свидетелями. Так, адвокатская практика выработала специальную методику подрыва доверия к показаниям свидетеля [4].

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

Похожие главы из других книг

Статья 54. Достоверность рекламы

Статья 54. Достоверность рекламы Банкам запрещается распространение рекламы в любой форме, содержащей неправдивую информацию об их деятельности в сфере банковских услуг.Национальный банк Украины имеет право применить меры воздействия к банкам и иным лицам, которые

2.2. Относимость доказательств

2.2. Относимость доказательств При рассмотрении признаков доказательств уже было сказано, что судебные доказательства должны быть относимыми. Вопрос об относимости доказательств решают как суд, так и участвующие в деле лица. Но окончательное решение вопроса за судом,

2.3. Допустимость доказательств

2.3. Допустимость доказательств Допустимость доказательств характеризует форму доказательств и означает, что обстоятельства дела, которые по закону должны быть подтверждены определенными средствами доказывания, не могут подтверждаться никакими другими

Статья 25. Ответственность за достоверность сведений, необходимых для установления и выплаты трудовой пенсии

Статья 25. Ответственность за достоверность сведений, необходимых для установления и выплаты трудовой пенсии 1. Физические и юридические лица несут ответственность за достоверность сведений, содержащихся в документах, представляемых ими для установления и выплаты

5.3. Постановление президиума Московского городского суда от 5 сентября 2002 г. об ответственности туроператора и турагенства за достоверность информации об услугах, входящих в состав реализуемого ими туристского продукта

7. Фальсификация доказательств

7. Фальсификация доказательств Объект преступления — установленный порядок представления доказательств по гражданским делам, а также порядок собирания доказательств по уголовным делам. Дополнительным объектом могут выступать права и законные интересы

Илон Маск рекомендует:  DaysBetween - Функция Delphi

§ 5 Классификация доказательств


§ 5 Классификация доказательств В юридической литературе приняты три типа доказательств:— первоначальные и производные;— прямые и косвенные;— средства доказывания.Первоначальными доказательствами являются показания очевидца, подлинный документ и спорная вещь.

52. Обеспечение доказательств

52. Обеспечение доказательств В соответствии с Основами о нотариате нотариус участвует в обеспечении доказательств. Этому должно предшествовать письменное заявление лица, обратившегося за совершением данного нотариального действия. Фиксация доказательств необходима

Вопрос 55. Роль адвоката в собирании доказательств по уголовному делу. Определение круга необходимых доказательств. Соблюдение принципов допустимости доказательств. Способы собирания доказательств адвокатом. Стратегия и тактика предъявления их на предварительном следствии и в суде.

Вопрос 55. Роль адвоката в собирании доказательств по уголовному делу. Определение круга необходимых доказательств. Соблюдение принципов допустимости доказательств. Способы собирания доказательств адвокатом. Стратегия и тактика предъявления их на предварительном

Вопрос 182. Относимость и допустимость доказательств по ГПК. Оценка доказательств в гражданском процессе.

Вопрос 182. Относимость и допустимость доказательств по ГПК. Оценка доказательств в гражданском процессе. Суд принимает только те доказательства, которые имеют значение для рассмотрения и разрешения дела (относимость доказательств) (ст. 59 ГПК).Понятие относимости

Вопрос 187. Обеспечение доказательств до и после предъявления иска (основания и порядок). Судебные поручения в гражданском процессе. Процедура нотариального обеспечения доказательств.

Вопрос 187. Обеспечение доказательств до и после предъявления иска (основания и порядок). Судебные поручения в гражданском процессе. Процедура нотариального обеспечения доказательств. Лица, участвующие в деле, имеющие основания опасаться, что представление необходимых

Вопрос 239. Обязанность доказывания в арбитражном процессе. Порядок представления и раскрытия доказательств. Полномочия арбитражного суда по собиранию доказательств, основания их применения.

Вопрос 239. Обязанность доказывания в арбитражном процессе. Порядок представления и раскрытия доказательств. Полномочия арбитражного суда по собиранию доказательств, основания их применения. Каждое лицо, участвующее в деле, должно доказать обстоятельства, на которые оно

Вопрос 374. Оценка доказательств в уголовном судопроизводстве: принцип и правила. Допустимость доказательств. Основания и последствия признания доказательств недопустимыми. Процессуальный порядок заявления и разрешения ходатайств о признании доказательств недопустимыми. Асимметрия правил о допустимо

Вопрос 374. Оценка доказательств в уголовном судопроизводстве: принцип и правила. Допустимость доказательств. Основания и последствия признания доказательств недопустимыми. Процессуальный порядок заявления и разрешения ходатайств о признании доказательств

Статья 25. Ответственность за достоверность сведений, необходимых для установления и выплаты трудовой пенсии

Статья 25. Ответственность за достоверность сведений, необходимых для установления и выплаты трудовой пенсии 1. Физические и юридические лица несут ответственность за достоверность сведений, содержащихся в документах, представляемых ими для установления и выплаты

«ЦАРИЦА ДОКАЗАТЕЛЬСТВ»

«ЦАРИЦА ДОКАЗАТЕЛЬСТВ» Наиболее древняя форма процесса и уголовного, и гражданского состояла в том, что одна сторона представляла доказательства вины обвиняемого или основания своих имущественных требований к другой стороне, а другая сторона защищалась, представляя

Книга первая. Уголовно-судебная достоверность

Книга первая. Уголовно-судебная достоверность

ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ ПРОГРАММ Программные ошибки как правило

Доказательство правильности программ.pptx

ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ ПРОГРАММ

Программные ошибки, как правило, делятся на три вида: Синтаксическая ошибка. Неправильное употребление синтаксических конструкций. Например, употребление оператора цикла for без () и <>. Семантическая ошибка. Нарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам. Логическая ошибка. Нарушение логики программы, приводящее к неверному результату.

Методы доказательства правильности программ 1) Отладка — это специальный этап в разработке программы, состоящий в выявлении и устранении программных ошибок, факт существования которых уже установлен. 2) Тестирование – процесс выполнения программы с намерением найти ошибку, а не подтвердить правильность программы. Проверяемую программу неоднократно запускают с теми входными данными, относительно которых результат известен заранее. Затем сравнивают полученный машиной результат с ожидаемым. Если во всех случаях тестирования результат одинаковы, то вероятнее всего исходная программа работает правильно. 3) Метод установления правильности программ при помощи строгих средств известен как верификация программ. В отличие от тестирования программ, где анализируются свойства отдельных процессов выполнения программы, верификация имеет дело со свойствами программ.

Верификация (подтверждение правильности) – состоит в проверке и доказательстве корректности разработанной программы по отношению к совокупности формальных утверждений, представленных в спецификации и полностью определяющей связь между входными и выходными данными этой программы. При этом отношения между переменными н входе и выходе программы анализируется не в виде значений, как при тестировании, а в виде описаний их свойств, проявляющихся при любых процессах обработок этих переменных контролируемой в программе. Верификация программы в принципе исключает необходимость её тестирования и отладки, так как при этом на более высоком уровне понятий и описаний всех переменных, устанавливается корректность процессов, их обработка и преобразования. Сущность каждой программы можно представить описаниями отношений между входными и выходными данными. Эти отношения формализуются 1 программной спецификации. В реальных разработках формализация этих взаимосвязей является неплохой, и часть отношений уточняется в процессе разработок программ. Такие не полностью определённые недостаточны для доказательства корректности программ. Только при полной и точной формализации всех условий и связей между входными и результирующими данными появляется возможность их использования для автоматической верификации.

Доказательство правильности это подтверждение того, что семантика программы соответствует предъявляемым требованиям, изложенным в спецификации этой программы.

Зачем нужна проверка правильности программ? Возрастание стоимости ущерба из-за пропущенной ошибки в программе. 4 июня 1996 года европейская космическая ракета «Ариан 5» взорвалась менее чем через сорок секунд после запуска. Комиссия, расследовавшая аварию, обнаружила, что ее причиной послужила ошибка в программе компьютера, отвечавшего за расчеты движения ракеты. В ходе запуска возникла ситуация, когда большое 64 -разрядное число с плавающей точкой было преобразовано в 16 -разрядное целое число. Это преобразование не было защищено кодом для обработки исключительных ситуаций, что и привело к сбою компьютера. Та же самая ошибка привела к сбою дублирующего компьютера. В результате на бортовой компьютер ракеты были переданы неверные данные о высоте, что вызвало уничтожение ракеты. 1.

Аппаратные и программные системы широко используются во многих приложениях, где любой отказ считается недопустимым: — энергетика; — электронная коммерция; — телекоммуникация; — системы управления воздушным и дорожным движением; — нефтегазовая промышленность; — медицинская аппаратура; — и прочие.

Зачем нужна проверка правильности программ? 2. Расширение области применения программ. Ежедневно возрастает участие программных систем в нашей жизни. В тоже время возрастает ответственность за правильность их функционирования. Мы становимся зависимыми от правильности функционирования вычислительных устройств. Изменяется само понимание задачи проверки правильности программ: программа может быть признана надежной не потому, что в ней не удалось обнаружить ошибок, а потому, что удалось убедительно доказать отсутствие ошибок.

Зачем нужна проверка правильности программ? 3. Возрастание трудоемкости проверки правильности программ. Вычислительная аппаратура становится дешевле, а производительность компьютеров возрастает. Появляются новые возможности автоматического решения все более и более сложных задач. Происходит увеличение объемов программного кода.

Основные подходы к задаче верификации Основными методами проверки правильности сложных систем (программ и микроэлектронной аппаратуры) являются имитационное моделирование и тестирование. Имитационному моделированию подвергается абстрактная схема или прототип, тестирование применяется непосредственно к самому продукту. В обоих случаях в этих методах определенные сигналы обычно вводятся в заданных точках схемы, а в других точках снимают соответствующие показания. Эти методы могут быть весьма экономичны для выявления многих ошибок. Однако проверить ВСЕ возможные взаимодействия и обойти ВСЕ «ловушки» , применяя лишь моделирование и тестирование, не удастся.

Формальные методы верификации предназначены не для доказательства того, что в проектируемой системе НЕТ ошибок определенного вида. Основные подходы к формальной проверке правильности сложных управляющих систем: 1) Проверка эквивалентности. 2) Дедуктивный анализ. 3) Верификация моделей программ.

Доказательство правильности программ

Министерство образования Российской Федерации

новосибирский государственный технический университет

доказательство правильности программ

метод индуктивных утверждений


Учебное пособие по курсу «Теория вычислительных процессов и структур»

для студентов специальности 2204

Глава 1. МАТЕМАТИЧЕСКАЯ ИНДУКЦИЯ

Математическая индукция представляет собой некоторый общий способ доказательства в математике. Он, хотя об этом не всегда явно говорят, положен в основу всех приемов доказательства правильности программ для вычислительных машин. Данная глава знакомит читателя с математической индукцией – фундаментальным способом доказательства в математике.

Обычно математическую индукцию вводят как метод доказательства утверждений о положительных числах. В данном пособии сформулированы и проиллюстрированы на примерах самые простые версии этого метода (простая индукция), необходимые для понимания сути методов доказательства правильности программ. Более строгая версия, а также обобщение этого метода на случай любых вполне упорядоченных множеств, а не только положительных чисел, будут рассмотрены в последующих пособиях.

1.1. Принцип простой ивдукции

Пусть S(N) — некоторое высказывание о целом числе N и требуется доказать, что S(N) справедливо для всех положи­тельных чисел N.

Согласно простой математической индукции, для этого необходимо

1. Доказать, что справедливо высказывание S(1).

2. Доказать, что если для любого положительного числа N справедливо высказывание S(N), то справедливо и высказы­вание S(N + 1).

Из приведенных выше двух утверждений вытекает, что S(N) справедливо для всех положительных чисел. Этот факт интуитивно очевиден, хотя при аксиоматической трактовке целых чисел сам принцип в такой формулировке следует рассматривать как аксиому. Из первого положения индукции следует, что справедливо S(1), а из второго — что справед­ливо S(2), если справедливо S(1). Но S(1) справедливо, сле­довательно, должно быть справедливо и S(2). Из второго положения индукции вытекает также, что справедливо S(3)> если справедливо S(2). Таким образом, поскольку мы знаем, что S(2) справедливо, то, следовательно, справедливо S(3) и т. д. Отсюда интуитивно видно, что эти два положения вместе доказывают справедливость S(1), S(2), S(3), . S(N).

Рассмотрим пример использования простой индукции.

ПРИМЕР 1. Мы хотим доказать, что для любого поло­жительного числа п сумма первых л положительных целых чисел равна п • (п + 1)/2, т. е.

для любого положительного числа N. Используя простую индукцию, неооходимо только доказать, что

1. «Сумма» верна для N=1, т. е. 1 = 1 (1 + 1)/2. Это очевидно.

2. Если сумма первых п положительных целых чисел равна п • (п + 1)/2, то сумма первых п+L положительных целых чисел равна (п +1) • [(п + 1)+1]/2, т. е. мы предпола­гаем, что формула 1 + 2 + . + N = п • (п + 1)/2, справедлива. Это гипотеза индукции. На ее основании мы должны по­пытаться доказать, что справедлива формула

Докажем это следующим образом:

(По гипотезе индукции)

(п + 1) • (п + 2)/2 = (п +1) • [(п + 1)+1]/2.

Что и требовалось доказать.

Поскольку мы доказали справедливость двух утвержде­ний, то по индукции формула

1 + 2 + . + п = п • (п + 1)/2

считается справедливой для любого положительного числа п.

1.2. Принцип модифицированной простой индукции

Иногда необходимо доказать, что высказывание S(N) справедливо для всех целых N³N0. Для этого можно довольно легко модифицировать принцип простой индукции. Чтобы доказать, что высказывание S(N) справедливо для всех целых N, необходимо:

1. Доказать, что справедливо S(N0)-

В частности, если требуется доказать справедливость некоторого высказывания S(N) для любых положительных целых п (т. е. для N³0), то необходимо:

1. Доказать, что справедливо S(0).

2. Доказать, что для всех неотрицательных целых п справедливо S(N+1), если справедливо S(N).

ПРИМЕР 2. Для любого неотрицательного числа п доказать, что

20 + 21 + 22 + … + 2N = 2N+1 – 1.

Используя простую индукцию, мы должны

1. Доказать, что 20 = 20+1 – 1 Это очевидно, так как

20 = 1 = 20+1 – 1 = 21 – 1= 2 – 1 = 1.

2. Доказать, что если для всех неотрицательных целых п справедлива формула

20 + 21 + 22 + … + 2N = 2N+1 – 1.

то справедлива и формула


20 + 21 + 22 + … + 2N + 2N+1 = 2(N+1)+1 – 1.

Высказывание 20 + 21 + 22 + . + 2 N = 2N+1 – 1 называется гипотезой индукции. Второе положение доказывается следующим образом:

20 + 21 + 22 + … + 2N + 2N+1 = (20 + 21 + 22 + … + 2N ) + 2N+1 =

(По гипотезе
индукции)

Иногда нужно доказать справедливость высказывания S(N) для целых п, удовлетворяющих условию пп£M0. Так как между п0 и M0 находится конечное число целых чисел, то справедливость S(N) можно доказать простым перебором всех возможных вариантов. Однако легче, а иногда и необходимо (если, например, мы не знаем конкретных значений п0 и M0) доказать S(N) по индукции. В этом случае можно воспользоваться одним из двух вариантов индукции:

Простая нисходящая индукция

1. Доказать, что справедливо S (п0)

2. Доказать, что если справедливо S (п), то для любых целых п0 £п£M0–1 справедливо и S(N + 1).

Простая восходящая индукция

1. Доказать, что справедливо S(M0).

2. Доказать, что если справедливо S(N), то для любых целых п0+1£п£M0 справедливо и S(N 1).

Интуитивно понятно, что этого достаточно для доказательства справедливости S(N) при любых N, удовлетворяющих условию п0 £п£M.

1.3. Доказательство высказываний, относящихся
к программам дня вычислительных машин

Иногда не совсем ясно, доказываем ли мы справедливость S(N) для всех N, удовлетворяющих условию п0 £п£M0 или условию п0 £п. В такой ситуации можно добиться успеха, даже и не зная, с каким из случаев имеем дело. Например, при доказательстве правильности программы иногда необхо­димо доказать справедливость некоторого высказывания S в те моменты, когда выполнение программы достигает неко­торой определенной точки. Можно попытаться доказать это методом индукции по п – числу «проходов» через данную точку программы. Однако мы можем и не знать точно, сколько раз проходим через эту точку: это зависит от данных, исполь­зуемых при выполнении программы. Мы можем проходить через нее и конечное (M0), и бесконечное число раз (если программа не заканчивается из-за ошибки). Таким образом, можно попытаться доказать справедливость S(N) для N, удовлетворяющих условию 1£п£M0 или условию 1£п. В любом случае мы можем получить результат, не зная, с каким вариантом мы имеем дело. Мы убеждаемся в справед­ливости S(N) при каждом проходе через определенную точку, если можем:

1. Доказать, что справедливо S(1), т. е. справедливо высказывание S при первом проходе через точку.

2. Доказать, что если справедливо S(N) (т. е. при N-ом проходе через точку), то справедливо и S(N+1), если мы, конечно, попадем в точку в п+1-й раз.

Если мы проходим через точку только т0 раз, то значения N, для которых второе положение, возможно, справедливо, это те значения N, при которых мы пп£M0–1. Если же мы проходим через точку бесконечное число раз, то значения N, для которых может быть справедливо второе положение, это значения, удовлетворяющие условию 1£п. Таким образом, если мы докажем оба положения, то тем самым с помощью простой восходящей или простой индукции мы докажем справедливость высказывания S(N) для всех требуемых значений п вне зависимости от того, какой вариант встречается в действительности.

Глава 2. ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ
БЛОК-СХЕМ ПРОГРАММ

При составлении программы для вычислительной машины мы стремимся к тому, чтобы программа решала некоторую определенную задачу. Однако каждый программист отчетливо и с горечью осознает, что большинство наших программ содержит ошибки. Мы тратим обычно много времени на тестирование и отладку созданных нами неправильных про­грамм. Даже закончив тестирование и отладку программы, мы не можем быть уверены, что она совершенно правильна. Все, что можно сказать о ней, это то, что программа дает правильные результаты для тех частных данных, которые использовались при ее тестировании. Позже, когда программа будет работать с новыми исходными данными, могут обна­ружиться и другие ошибки. Каждый опытный программист знает, что программа в течение долгого периода может рабо­тать без ошибок, кажется совершенно правильной, и вдруг внезапно, таинственным образом появляется очередная ошибка. Поэтому независимо от интенсивности тестиро­вания никогда нельзя поручиться за правильность программы.

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

Если бы можно было формализовать доказательство пра­вильности и проводить его абсолютно надежным образом (автоматически доказывающим устройством), то ему можно было бы полностью доверять. В будущем это, возможно, окажется реальным, но не сейчас. Мы рассмотрим лишь неформально построенные доказательства правильности. Опыт проведения таких доказательств показывает, что при этом возрастают наша уверенность в программе и ее понимание, и поэтому доказательства следует выполнять, хотя они и не приводят к полной гарантии от ошибок. Неформальное доказательство правильности можно рассма­тривать как некоторую форму систематической проверки программы за столом, без машины, т. е. того, что всегда делает хороший программист. В этой главе даны основные идеи такого доказательства правильности для программ, пред­ставленных блок-схемами.

2.2. Основные принципы доказательства
правильности для блок-схем

Если мы хотим доказать, что некоторая программа правильна или верна, то прежде всего должны уметь описать то, что по предположению делает эта программа. Назовем такое описание высказыванием о правильности или просто утверждением. В этом случае доказательство правильности состоит из доказательства того, что программа, будучи запущенной, в конце концов окончится (выполнится оператор STOP), и после окончания программы будет справедливо утверждение о правильности. Часто требуется, чтобы программа работала правильно только при определенных значениях входных данных. В этом случае доказательство правильности состоит из доказательства того, что если программа выполняется при соответствующих входных данных, то она когда-либо за­кончится, и после этого будет справедливо утверждение о правильности.

Проиллюстрируем эти идеи на примере доказательства правильности для блок-схемы очень простой программы.

ПРИМЕР 1. Предположим, что нужно вычислить произ­ведение двух любых целых чисел M, N, причем M³0 и операцию умножения использовать нельзя. Для этого можно использовать операцию сложения и вычислить сумму из M слагаемых (каждое равно N). В результате получим MN. Рассмотрим блок-схему, реализующую такое вычисление (рис. 2.1). Нужно доказать, что приведенная программа правильно вычисляет произведение двух любых целых чисел M и N при условии M³0, т. е. если программа выполняется с целыми числами M и N, где M³0, то она в конце концов окончится (достигнув точки 5) со значением J=M×N.

Рис. 1

Чтобы удостовериться в правильности работы блок-схемы, можно было бы проверить ее с некоторыми фиксированными данными. Например, давайте «вручную» промоделируем выполнение программы с числами M = 3 и N = 5. Ниже приведены значения переменных I и J в моменты достижения точки 2 на блок-схеме (вход в цикл):

Число проходов п через точку 2 Значение I Значение J

при выполнении блок-схемы

Когда мы в четвертый раз дойдем до точки 2, значение I будет равно 3, т. е. равно M, поэтому выполнение цикла закончится и мы попадем в точку 5.

При попадании в точку 5 переменная J=15=3×5. Таким образом, мы убеждаемся, что при M=3 и N=5 блок-схема работает верно. Хотя это, конечно, и укрепляет нашу уверенность в правильности работы программы, но тем не менее никак не доказывает, что программа будет работать правильно при всех возможных значениях M и N. Можно продолжать проверять программу с другими значениями M и N. Если для некоторых значений M и N будет получен неверный ответ, то надо еще узнать, что он неверен. Однако, если мы даже будем продолжать получать правильные ответы, все равно не будем уверены, что такие ответы будут полу­чаться для любых возможных значений M и N. Всегда остается бесконечное число возможных значений, для которых программа еще не проверялась. Конечно, если речь идет о неко­торой конкретной машине, то значение M и N ограничены некоторым конечным интервалом для целых чисел. В принципе в этом случае можно провести исчерпывающую про­верку с числами в этом интервале. Однако для большинства машин этот интервал настолько велик, что проводить исчер­пывающую проверку было бы не практично. Кроме того, мы составляем программу обычно таким образом, чтобы она работала верно независимо от размеров N и M. Следовательно, мы будем удовлетворены лишь тогда, когда сможем показать, что программа работает правильно независимо от размеров M и N. Методом тестирования мы этого никогда не достигнем.

Илон Маск рекомендует:  RecodeTime - Функция Delphi

Предположим, что вместо выполнения программы с конкретными значениями M и N мы начнем ее выполнять с символическими данными M и N. В этом случае мы получим следующую «трассу» для значений I и J при проходах через точку 2:

Число проходов Значение I Значение I

Видно, что при выполнении цикла M раз (т. е. при M+1-ом попадании в точку 2) I = M, a J = M×N. Так как I=M, то мы покидаем цикл и попадаем в точку 5. Таким образом, при достижении точки 5 работа программы заканчивается и мы получаем J = M×N. Это показывает, что программа правильно работает для любых значений M и N. Однако отметим, что наша трассировка предполагает, что M³0, и поэтому значение I в конце станет равным M (оно начинается с 0 и увеличивается на 1 при каждом прохождении цикла). Если M
IQ=IQ+1 NE – “¹”
IR=IRJ2

3 GO TO 2 (C – признак комментария)

4 WRITE (6,5) IQ, IR (Операторы WRITE … FORMAT производят вывод

5 FORMAT (2I10) информации по соотвнтствующему формату)


Приведенная программа на Фортране – это просто некото­рый вариант программы, блок-схема которой приведена на рис. 3. Напомним, что программа вычисляет целое частное IQ и остаток IR от деления целого J1 на целое J2. Мы уже включили в качестве комментариев в программу индуктивные утверждения, необходимые для доказательства частичной правильности. Например, комментарий, помещенный сразу после оператора с меткой 2, нужно рассматривать как коммен­тарий, связанный с точкой, расположенной перед выполня­емой в этом операторе проверкой. Таким образом, предпо­лагается, что в момент прихода в точку, находящуюся непо­средственно перед проверкой в операторе с меткой 2, спра­ведливы утверждения J1 = IQ× J2 + IR и
0 £ IR. Отметим, что в доказательствах мы используем „ = » как символ равенства, а не присваивания.

После этого доказательство частичной правильности данной программы почти идентично доказательству частич­ной правильности для блок-схемы на рис. 3. При этом необходимо рассмотреть следующие пути:

1. Путь от оператора READ до оператора с меткой 2. Предположим, что только что выполнился оператор READ и справедливо утверждение, записанное сразу после него. Теперь последовательно выполняются операторы до опера­тора с меткой 2. Нам нужно показать, что справедливо утверждение, записанное после этого оператора. Если мы дошли до этой точки, то имеем IQ = 0, IR = J1, 0 £ J1 и 1 £ J2. Таким образом,

Следовательно, наше утверждение справедливо.

2. Путь от оператора с меткой 2 до оператора с меткой 3 и опять к оператору с меткой 2 (основной цикл программы). Предположим, что мы выполняем оператор 2 (мы перестаем говорить «оператор с меткой 2» и начи­наем употреблять «оператор 2». Здесь уместно отметить, что если убрать из языка программирования метки, то идентифицировать оператор станет весьма затруднительно) и справедливо записанное после него утверждение, затем выполняем цикл и возвращаемся к метке 2. Необходимо показать, что указанное утверждение снова будет справедливо. Пусть IQ и IR до выполнения цикла принимают значения IQN и IRN. Тогда J1 =IQNJ2 + IRN и 0 £ IRN. При возврате к метке 2 после прохождения цикла значения IQ и IR будут
IQN+1 = IQN + 1 и IRN+1 = IRNJ2, а значения J1 и J2 останутся без изменений. Таким образом, после возврата к метке 2 имеем

Кроме того, известно, что если мы проходили по циклу, то проверка
IRN .LT. J2 дала отрицательный результат, т. е. J2 £ IR. Отсюда следует, что при возврате к метке 2 имеем 0 £ IRNJ2 = IRN+1.

3. Путь от оператора 2 к оператору 4. Предположим, что мы выполнили оператор 2, справедливо соответствующее утверждение и переходим к оператору 4. Нужно показать, что справедливо утверждение, записанное ниже этого опе­ратора. Оператор 2 передаст управление на оператор 4 только при положительном результате проверки IR .LT. J2. При переходе от оператора 2 к оператору4 ни одно из значении переменных не изменяется, и, следовательно, при достижении метки 4 мы имеем J1 = IQ×J2 + IR, 0£IR и, кроме того, IR N. Но так как справедливо утверждение в примечании 3, следовательно, I = N+1, и при достижении точки 4 значение XSMLST будет равно наименьшему из Х(1), . , Х(I – 1) =
= X[(N + 1) – 1] = X(N), что и требовалось доказать, т. е. доказана частичная правильность.

Конечность этого фрагмента программы очевидна: здесь есть только один цикл, и он является фортрановским. (Заметим, что конечность фортрановского цикла, если в его теле нет переходов вне цикла, очевидно, следует считать свойством, присущим самому языку).

Эти два примера показывают, что метод индуктивных утверждений можно распространить непосредственно и на дока­зательства правильности программ, написанных на Фортране. Затруднение заключается лишь в том, что управление в про­граммах на Фортране не такое явное, как в блок-схемах. Это приводит к тому, что в программах легко не заметить некоторые пути или неправильно их интерпретировать (например, можно предположить, что в операторе цикла проверка выполняется перед выполнением тела цикла). Кроме того, нужно приписывание индуктивных утверждений к некоторым точкам в программе на Фортране проводить очень внимательно и все время помнить, с какой неявной точкой связано соответ­ствующее утверждение. Например, один-единственный опера­тор Фортрана, такой, как оператор DO, фактически состоит из нескольких действий: установки счетчика, увеличения счетчика и проверки. При доказательстве правильности мы должны четко осознавать, с какой из этих точек связано индуктивное утверж­дение. Использование переходов GO TO в программах на Форт­ране тоже порождает проблемы. Если в программе много пере­ходов и при их использовании не придерживались некоторой дисциплины, то программу часто трудно понимать и трудно доказывать ее правильность. Это объясняется тем, что сложно проследить за всеми возможными путями выполнения про­граммы и указать нужные для этих путей индуктивные утверж­дения. (Однако существует и иная точка зрения Если у нас есть только переходы, то программа на фортране становится полностью аналогичной блок-схеме и доказатель­ство правильности проходит так же легко, как и для блок-схем, ибо мы «видим» все точки с утверждениями. Но переходы действительно усугуб­ляют трудности «неявных» точек, например, в операторе цикла.)

Очень важной особенностью программирования на Фортране является возможность определять и использовать подпро­граммы. Метод индуктивных утверждений мы можем распро­странить скорее на доказательство правильности самих под­программ или программ, чем на обращения к ним. Так как в предыдущих разделах, имея дело с блок-схемами, мы не ка­сались вопроса подпрограмм, то теперь приведем пример дока­зательства правильности программ, содержащих обращение к подпрограммам.

В этом примере нас прежде всего будет интересовать, как обрабатывать подпрограммы. Поэтому мы не приводим целиком основную программу, а лишь намечаем некоторую программу, содержащую обращения к подпрограммам. Подпрограмма DIV аналогична программе, приведенной в примере 1, но оформлена как подпрограмма. Она предназначена для вычи­сления целых частного и остатка от деления параметра J1 на параметр J2; полученные значения возвращаются как значения параметров IQ и IR. Доказательство того, что эта подпрограмма верна, аналогично доказательству, приведен­ному в примере 1. Поэтому будем считать, что доказательство правильности этой подпрограммы уже проведено, и докажем, что правильна основная программа. Один из этапов такого доказательства заключается в том, чтобы показать, что если, непосредственно перед обращением к подпрограмме спра­ведливо утверждение С1, а затем мы пройдем эту точку, выполним подпрограмму и вернемся из нее, то будет справед­ливо утверждение С2. Мы считаем, что A(I, J) в примечаниях С1 и С2 — некоторые утверждения, относящиеся к перемен­ным I и J. Чтобы доказать этот факт, мы поступим следую­щим образом. Так как фактические параметры I, J, К, L спомощью механизма обращения сопоставляются с соответст­вующими формальными параметрами J1, J2, IQ, IR, то сначала следует доказать, что из утверждения С1 следует утверждение СЗ в начале подпрограммы; для этого имена параметров J1, J2, IQ и IR в этом утверждении заменяются на имена соответствующих фактических параметров I, J, К, L. Другими словами, нужно доказать, что С1 подразумевает С3′, где С3′ – утверждение, полученное путем замены в С3 J1 на I, J2 на J, IQ на К и IR на L. Таким образом, нужно показать, что из 0.LE. I, 1.LE. J и A(I, J) следует 0.LE. I и 1.LE. J. Это очевидно. Кроме того, известно, что справедливо и на­чальное допущение о правильности параметров подпро­граммы. Так как мы считаем, что правильность подпрограммы уже доказана, то нам не надо обращать внимание на детали строения этой программы. Мы знаем, что утверждение С5, связанное с точкой, непосредственно предшествующей опера­тору RETURN, будет справедливо и после того, как мы вернемся в основную программу. Конечно, это утверждение относится к формальным параметрам, но оно будет справед­ливо и для фактических параметров после того, как мы вернемся и попадем в точку, с которой связано утверждение С2. Таким образом, для того чтобы убедиться в справедли­вости утверждения С2 при достижении соответствующей точки программы, следует лишь показать, что из С5′ следует С2. Утверждение С5′ получается из С5 заменой J1 на I, J2 на J, IQ на К и IR на L. Другими словами, из 1 .EQ. К * J + L AND 0 .LE. L AND L .LT. J следует
0 .LT. I AND 1 .LE. J AND A(I, J) AND I .EQ. K*J + L AND 0 .LE. L
AND L.LT. J. легко убедиться, что из С5′ не следует целиком все утверждение С2, а следует лишь под­черкнутая часть С2. Как же убедиться, что оставшаяся (невыделенная) часть также справедлива, если мы попадаем в точку, соответствующую С2? Отметим, что эта часть утверж­дения идентична утверждению С2. Следовательно, если мы будем знать, что переменные I и J (в С1 упоминаются только они) в подпрограмме не изменяются, то можно сделать вывод, что из справедливости С1 перед обращением к под­программе следует справедливость соответствующей части С2 после обращения. Так как фактические параметры I, J сопоставляются с формальными параметрами подпрограммы J1, J2, то теперь следует просмотреть подпрограмму: не изменяются ли значения J1 или J2. Студент может легко проверить, что ни J1, ни J2 не изменяются. Отсюда мы делаем вывод, что утверждение 0 .LE. I AND 1 .LE. J AND A(I, J) продолжает оставаться справедливым и в момент достижения точки, связанной с утверждением С2.

Приведенное доказательство иллюстрирует общий метод доказательства для случаев с подпрограммами. Сначала выясняется, что делается в подпрограмме по предположению, и это доказывается обычным методом индуктивных утвержде­ний. Далее при доказательстве правильности программы, обращающейся к этой или еще и другим подпрограммам (если некоторый путь содержит такое обращение), поступаем следующим образом. Сначала доказываем, что при обращении к подпрограмме справедливо утверждение, относящееся к ее началу (здесь описываются допущения, касающиеся значений параметров). В примере мы показывали, что из С1 следует С3′. Затем доказываем, что из утверждения, связанного с оператором возврата (это утверждение о правильности под­программы), следует справедливость всего (или части) утверждения, относящегося к точке (в вызывающей про­грамме), непосредственно следующей за обращением. В примере мы показали, что из С5 следует часть С2. Кроме этого, можно использовать и тот факт, что утвержде­ния, относящиеся к переменным, значения которых не изме­няются в подпрограмме, продолжают оставаться справедли­выми и после возврата из подпрограммы. В примере показано, что из С1 следует оставшаяся часть С2 (С1 – утверждение в вызывающей программе, включающее лишь переменные, значения которых в подпрограмме не изменились).

33. Примеры доказательства правильности программ на пл/1

Как для программ на Фортране, так и для программ на языке ПЛ/1 метод доказательства правильности в принципе один и тот же, однако мы хотели бы показать, как на этом методе отражаются механизмы управления, присущие ПЛ/1.

/* Х(1: N) МАССИВ ВЕЩЕСТВЕННЫХ ЗНАЧЕ­НИЙ РАЗМЕРОМ 1£N */

Предполагается, что приведенный фрагмент программы вычисляет
SUM = Х(1) +. + X(N). Вычисления организуются на основе цикла
DO WHILE. Эта конструкция означает, что повторяется нуль или более раз выполнение всех операторов, расположенных между оператором DO WHILE и соответству­ющим ему оператором END, до тех пор, пока условие в операторе DO WHILE истинно. Утверждение, записанное в форме примечания сразу же за оператором DO WHILE, следует считать связанным с точкой, непосредственно пред­шествующей проверке в этом операторе, т. е. считается, что оно должно быть справедливым каждый раз, когда мы попадаем в эту точку.

Доказательство частичной правильности для этой простой программы довольно очевидно. Для этого нужно просмотреть все пути в программе.

1. Путь от начала фрагмента программы до точки, непосред­ственно предшествующей проверке в операторе DO WHILE. Когда мы попадем в эту точку, будем иметь SUM = 0.0 и I=1. Утверждение, что SUM =Х(1)+. + Х(I–1), очевидно спра­ведливо, так как I – 1 = 0, и мы считаем, что «пустая» сумма равна нулю. Утверждение 1 £ I 0. Таким образом, утверждение, относящееся к внутреннему оператору DO WHILE, в момент возврата к нему должно быть справедливо.

4. Путь от проверки во внутреннем операторе DO WHILE к окончанию внешнего цикла и возврат к проверке во внешнем операторе DO WHILE. Предположим, что мы находимся во внутреннем операторе DO WHILE,
I = IN, J = JN и К = КN. В этот момент справедливы утверждения IN*(JN**KN) = = M**N и 0

Достаточность доказательств

Определение достаточности фактических данных для принятия окончательного решения по делу — самостоятельная задача оценки доказательств, ее завершающая фаза.

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

Может создаться и такое положение, когда доказательства будут признаны достаточными лишь в отношении некоторых входящих в предмет доказывания обстоятельств и недостаточными, чтобы дать достоверное знание о наличии других искомых фактов.

Вывод о недостаточности доказательств для категорического суждения — такой же объективно возможный результат судебного познания, как и твердое убеждение в виновности или невиновности обвиняемого. Связывать его во всех случаях с ошибками, допущенными при исследовании и оценке доказательств, было бы неправильно. Предварительное и судебное следствие по делу могут быть проведены с исчерпывающей полнотой и объективностью и, тем не менее, не завершиться достоверными выводами См.: Уголовный процесс. Учебник / Под ред. Гуценко К.Ф. — М.: Проспект, 2010.С. 329..

Закон предусмотрел такие ситуации, регламентировав оправдание или прекращение дела, при недоказанности участия обвиняемого в совершении преступления, если исчерпаны все возможности для собирания дополнительных доказательств. Поэтому нельзя определять достаточность доказательств как «убеждение в том, что осуществлено всестороннее, полное и объективное исследование обстоятельств дела». Такое убеждение может в ряде случаев сочетаться и с выводом о недостаточности доказательств.

Закон не раскрывает понятия «достаточность доказательств», не дает каких-либо формализованных критериев достаточности. Так, привлечение в качестве обвиняемого может иметь место «при наличии достаточных доказательств, дающих основание для предъявления обвинения в совершении преступления». Окончание предварительного расследования с направлением материалов дела в суд допустимо, если «собранные доказательства достаточны» для составления обвинительного заключения.

«Формулировки «в деле нет достаточных доказательств, подтверждающих вину» или «суд без достаточных оснований признал. виновным» или, наоборот, «по делу собрано достаточно доказательств. виновности» используются в судебной практике. В руководящих разъяснениях Пленума Верховного Суда России, в решениях по конкретным делам раскрывается смысл закона и содержащиеся в нем требования — принимать решения при наличии достаточности доказательств. Во всех указанных. случаях, вывод о достаточности или недостаточности доказательств основан на оценке совокупности доказательств» См.: Громов Н., Комиссаров С., Царева Н. О процессуальном статусе кино-, фотосъемки, видео-, аудиозаписи, получаемых оперативным путем // Закон и право, 2008, № 8, с. 23..

УПК РФ прямо говорит о том, что оценке по внутреннему убеждению подлежит каждое доказательство и вся совокупность доказательств. В этой связи важно проследить, как понимается «совокупность доказательств» и «достаточность доказательств». Каждое доказательство должно быть оценено не само по себе, а всегда в совокупности (это правило специально подчеркнуто законодателем применительно к показаниям обвиняемого).

Точное выполнение требований УПК обуславливает наличие такой совокупности доказательств, которая позволяет правильно оценить каждое из них и сделать правильный вывод о достаточности (недостаточности) доказательств для того или иного решения по делу. Оставление каких-либо из собранных доказательств вне внимания, обоснование вывода на одних доказательствах, без учета всех собранных доказательств, приводит к необоснованности вывода и односторонности оценки по делу.

Заметим, что в оцениваемую совокупность доказательств могут входить как достоверные, так и недостоверные доказательства. До того как не произведена оценка всех доказательств в совокупности, нельзя сказать о том, какое из них достоверно или недостоверно. Именно оценка всей совокупности дает возможность сделать правильный вывод о достоверности и значении каждого из доказательств, входящих в нее. Поэтому в мотивировочной части приговора судьи должны приводить не только доказательства, которые признаны ими достоверными и положены в основу решения, но и те, которые суд отверг, как не нашедшие подтверждение, недостоверные. Тем самым суд раскрывает мотивы своих оценок и выводов.

В Постановлении Пленума Верховного Суда РФ № 1 от 29.04.96 «О судебном приговоре» подчеркивается, что в приговоре необходимо привести всесторонний анализ доказательств, на которых суд основал выводы; при этом должны получить оценку все доказательства, как уличающие, так и оправдывающие подсудимого.

Таким образом, определение «достаточности доказательств» является результатом оценки «совокупности доказательств». Отражая закономерности процесса познания как перехода от незнания к знанию, в «совокупность доказательств» на различных этапах расследования входят доказательства, достоверность которых еще предстоит установить.

Поэтому не любая совокупность доказательств может характеризоваться как взаимно согласованная и внутренне связанная система доказательств, правильно отражающая объективную действительность. Такими свойствами должна обладать совокупность доказательства, лежащая в основе решения, принятого в результате всестороннего и полного исследования обстоятельств; когда по делу исследованы все возможные версии, а имеющиеся противоречия выяснены и оценены. Такая совокупность доказательств обеспечивает доказанность выводов по делу и должна лежать в основе обвинительного приговора.

Доказательство пpавильности декодиpования

Название: Доказательство правильности программ — Конспект лекций (Веретельникова Е.Л.)

3.3. примеры доказательства правильности программ

Как для программ на Фортране, так и для программ на языке ПЛ/1 метод доказательства правильности в принципе один и тот же, однако мы хотели бы показать, как на этом методе отражаются механизмы управления, присущие ПЛ/1.

/* Х(1: N) МАССИВ ВЕЩЕСТВЕННЫХ ЗНАЧЕНИЙ

/* SUM = X(L) + . + X(I – 1) AND 1 £ I £ N + 1*/

Предполагается, что приведенный фрагмент программы вычисляет SUM = Х(1) + . + X(N). Вычисления организуются на основе цикла DO WHILE. Эта конструкция означает, что повторяется нуль или более раз выполнение всех операторов, расположенных между оператором DO WHILE и соответствующим ему оператором END, до тех пор, пока условие в операторе DO WHILE истинно. Утверждение, записанное в форме примечания сразу же за оператором DO WHILE, следует считать связанным с точкой, непосредственно предшествующей проверке в этом операторе, т.е. считается, что оно должно быть справедливым каждый раз, когда мы попадаем в эту точку.

Для доказательства конечности программы нужно только показать, что заканчивается сам цикл. Это, однако, очевидно, так как I увеличивается на 1 каждый раз при прохождении цикла, а значение N не изменяется. Следовательно, I в некоторый момент станет больше N, и проверка I £ N даст отрицательный результат.

Доказательство правильности для этой простой программы также довольно очевидно. Для этого нужно просмотреть все пути в программе.

1. Путь от начала фрагмента программы до точки, непосредственно предшествующей проверке в операторе DO WHILE. Когда мы попадем в эту точку, будем иметь SUM = 0.0 и I = 1. Утверждение, что SUM = Х(1) + . + Х(I–1), очевидно, справедливо, так как I – 1 = 0, и мы считаем, что «пустая» сумма равна нулю. Утверждение 1 £ I 0. Таким образом, утверждение, относящееся к внутреннему оператору DO WHILE, в момент возврата к нему должно быть справедливо.

4. Путь от проверки во внутреннем операторе DO WHILE

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL