Построение таблиц истинности для логических выражений
Цель урока: сформировать умения строить и заполнять таблицы истинности
Задачи:
- Обучающие: изучить последовательность действий построения таблиц истинности, сформировать умение применять алгоритм заполнения таблиц истинности, научить находить значение логических выражений посредством построения таблиц истинности.
- Развивающие: развивать логическое мышление и познавательный интерес к предмету, развивать внимание, память, речь учащихся.
- Воспитательные: воспитывать культуру общения, взаимопомощь учащихся, формировать интеллектуальную и эмоциональную активность учащихся, воспитывать чувства ответственности за результаты своего труда, учитывать разные мнения и стремиться к координации различных позиций в сотрудничестве.
Тип урока: урок изучения и первичного закрепления новых знаний.
Формы работы учащихся:фронтальная, групповая, индивидуальная.
План урока:
- Организационный момент (2 мин.)
- Повторение материала предыдущего урока (8 мин.)
- Объяснение нового материала (12 мин.)
- Закрепление разбор примера (5 мин.)
- задания для самостоятельной работы (15 мин.)
- Обобщение урока, домашнее задание (3 мин.)
Оборудование и программный материал:
- белая доска;
- мультимедийный проектор;
- демонстрация презентации. Приложение 1
- карточки с заданиями.
ХОД УРОКА
I. Организационный момент
Мы продолжаем изучение темы «Основы логики». На предыдущем уроке мы увидели, что логика достаточно крепко связана с нашей повседневной жизнью, а также увидели, что почти любое высказывание можно записать в виде формулы. Познакомились с тремя основными логическими операциями.
II. Повторение материала предыдущего урока
Давайте вспомним основные определения и понятия:
Вопрос | Ответ |
1. Что называется высказыванием? (Пример) | Повествовательное предложение, в котором что-либо утверждается или отрицается |
2. На какие виды делятся высказывания по своей структуре? (примеры) | Простые и сложные |
3. Что связывает переменные в формулах алгебры высказываний? | Логические операции |
4. На слайдах (2, 3, 4) представлены логические операции. Назовите их и дайте определение. | Дизъюнкция (сложение) |
5. Придумать составное высказывание с логическими связками: 1 ряд – инверсия | Ответы |
6. Запишите формулы для следующих суждений: *«Прозрачный лес один чернеет, и ель сквозь иней зеленеет, и речка подо льдом блестит». |
F= A/\B/\C F= ¬A/\¬B |
III. Объяснение нового материала
Хорошо, повторили пройденный материал, переходим к новой теме.
Понятие таблицы истинности (слайд 5): таблица истинности — это таблица, в которой перечислены все возможные значения входящих логических переменных и соответствующие им значения функции.
При построении таблиц истинности есть определенная последовательность действий. У вас на столах находится памятка с этими правилами (Приложение 2), вклейте ее в тетрадь. На доске я продемонстрирую вам, как благодаря этим действиям строится таблица истинности для логической функции
IV. Закрепление разбор примера
Построить таблицу истинности для составного высказывания:
F = (AvB)/\(¬Av¬B) (слайд 7)
Теперь мы можем определить значение логической функции для любого набора значений логических переменных.
V. Задания для самостоятельной работы
1. Работа по карточкам в парах. Кто быстрее заполнит таблицу истинности. (Приложение 3).
2. Индивидуальные задания (Приложение 4). Задания разного уровня сложности распечатаны на листах разного цвета (красный – простой уровень, желтый – средний, зеленый – сложный). Ребята сами выбирают задания.
VI. Обобщение урока, домашнее задание
Сегодня на уроке мы научились определять истинность составных высказываний, но больше с математической точки зрения, так как вам были даны не сами высказывания, а формулы, отображающие их. На следующих уроках мы закрепим эти умения и постараемся их применить к решению логических задач.
Домашнее задание: §1.3, стр. 39 задание 8 примеры 2, 3, 4. (учебник Л.Л. Босовой Информатика 8 класс. ФГОС).
Составление таблиц истинности для сложных высказываний
Цели занятия:обобщить основные понятия
создать условия для
формирования знаний по
построению таблиц истинности;
закрепить алгоритм составления
таблиц истинности на практике
развивать логическое мышление.
Что такое высказывание?
Под высказыванием
понимается такое
предположение, которое чтолибо утверждает или
отрицает, и о котором можно
судить истинно оно или
ложно.
Какие из следующих предложений
являются высказываниями?
А. Москва – столица России;
Б. Студент физико-математического факультета;
В. Луна – спутник Марса;
Г. 2+2-5;
Д. В группе 2 ПКС обучаются 15 студентов;
Е. Кислород – газ;
З. 2+7=9;
И. Треугольник является прямоугольным;
К. Сегодня плохая погода;
Л. Река Ангара впадает в озеро Байкал.
Установите соответствие:
→
ʌ или &
↔
¬ или
ᴠ
КОНЬЮНКЦИЯ
ИЛИ
ДИЗЪЮНКЦИЯ
ЕСЛИ ТО
ОТРИЦАНИЕ
И
ИМПЛИКАЦИЯ
НЕ
ЭКВИВАЛЕНТНОСТЬ
ТОГДА И ТОЛЬКО
ТОГДА
А
В
АᴠВ
0
0
0
0
1
1
1
0
1
1
1
1
А
В
А↔В
0
0
1
0
1
0
1
0
0
1
1
1
А
В
АʌВ
0
0
0
0
1
0
1
0
0
1
1
А→В
А
В
0
0
1
0
1
1
1
0
0
1
1
1
Определите логическое
значение следующих
высказываний:
7 – простое число и 9 — простое число ЛОЖЬ
Число 2 четное или это число простое ИСТИНА
Если белые медведи живут в Африке, то
2*2=4 ИСТИНА
Санкт-Петербург расположен на Неве и
2+3=5 ИСТИНА
Запишите символически
следующее сложное
высказывание:
«Если посылка истинна и заключение
ложно, то импликация ложна».
АʌВ→С
«Если число делится на 2 и не делится
на 3, то оно не делится на 6».
(Аʌ¬В)→¬С
Формулы алгебры
высказываний :
выполнимые;
тождественно истинные или тавтологии;
тождественно ложные или
противоречия.
Порядок выполнения
логических операций
1.
2.
3.
4.
5.
Отрицание
Конъюнкция
Дизъюнкция
Импликация
Эквивалентность
Определите порядок
выполнения логических
операций в данном
высказывании:
(Аᴠ¬В→¬С)↔А
Алгоритм построения
таблиц истинности:
1.Определить количество строк в таблице
2.Определить количество столбцов
3.Определить последовательность выполнения
логических операций
4. Заполнить столбцы результатами выполнения
логических операций в обозначенной
последовательности с учетом таблиц
истинности основных логических операций.
2.F= X ᴠ Y ʌ ¬ Z
3.F=XʌYᴠ¬(XᴠY)ᴠX
4.F = А ʌ(В → С)
5.F=(Вʌ¬В)↔(AᴠD)
Домашнее задание:
1) Материал занятия
2) Построение таблиц истинности
для более сложных
высказываний
SQL составление плана и таблицы истинности
Если у меня есть NOT ( 1 <> 1 AND NULL <> 1 )
Я вижу, как SQL превращает это в план выполнения XML: ( 1 = 1 OR NULL = 1)
Если бы вы буквально оценили первое выражение, то True AND Null
было бы Null и исключило бы строку. Однако скомпилированное выражение может возвращать строку из-за OR.
Могу ли я предположить, что этот тип компиляции гарантированно будет происходить всегда? SQL Server никогда не попытается внести запутанную логику в составленный план? Есть ли какая-то документация по этому поводу?
Эта статья была довольно полезной, но мне просто не хватает части головоломки: https://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued-logic/
Вот пример SQL
SELECT 1
FROM T T
LEFT JOIN T2 T2 --t2 has zero rows
ON T.id = t2.t_id
WHERE NOT ( T.id <> 99 AND T2.id <> 99 )
Из моего опыта работы с SQL я знаю, что при нормальных обстоятельствах (без оценки короткого замыкания) T2.id <> 99 эффективно превращает left join во внутреннее соединение. Именно такого поведения я изначально и ожидал. Я был удивлен, когда этот фильтр действительно сработал.
sql sql-server null left-joinПоделиться Источник J.T. 16 декабря 2015 в 18:24
2 ответа
- Экспорт таблицы истинности из пакета QCA в пакет R
Это почти свело меня с ума сегодня, поэтому я решил, что разделяю его: Если вы работаете с пакетом QCA (качественный сравнительный анализ) в R, вы можете создать так называемые таблицы истинности. Они являются неотъемлемой частью процесса анализа данных, поэтому, если вы хотите сообщить о своих…
- Цифровая логика-таблицы истинности
Я пытаюсь решить эти проблемы с помощью таблиц истинности, используя приведенные ниже формулы. У меня возникли проблемы с NOT по NAND Я думаю, что получил первые 2 проблемы правильно, используя: AND эквивалентно NOR, AND эквивалентно NAND Уравнения для AND, OR и NOT с использованием оператора NAND…
4
TL;DR «compiled result» не является полезной концепцией. Что имеет значение, так это «заданный результат», заданный определением языка. СУБД должна заставить оператор действовать так, как вы его написали.
Таблица истинности [sic] для AND в вашей ссылке неверна . AND с Ложным всегда ложно, а OR с Истинным всегда истинно в SQL.
Сравнения в SQL возвращают True, False или Unknown. Неизвестное может возникнуть из сравнения с NULL или логической связью 3VL (AND/OR/NOT и т. Д.) На неизвестном. «NULL» не является литералом. True, False & Unknown-это значения с (разными) литералами в стандарте SQL, но не в большинстве DBMSs. (И неизвестный может быть возвращен как NULL.) IS не является сравнением; IS NULL и IS NOT NULL являются унарными логическими связями 3Vl, а также аналогичными связями с именами TRUE, FALSE & UNKNOWN. Они всегда возвращают Истину или Ложь.
True AND Null
будет Null и устранит строку. Однако скомпилированное выражение может возвращать строку из-за OR.
Нет. Таблица истины [sic] для AND в вашей ссылке неверна . AND с Ложным всегда Ложно, а OR с Истинным всегда истинно в SQL. Таким образом, ваш AND всегда ложен из NOT Ложных из AND Ложных из 1 <> 1, а ваш OR всегда истинен из 1 = 1. Независимо от того, что возвращают другие сравнения (Истинно, Ложно или Неизвестно). Если вы работаете с этими двумя выражениями , используя (правильные) таблицы истинности SQL), они оба всегда дают один и тот же результат, True.
Нужно быть очень осторожным с переписыванием условий в SQL. Можно поменять NOT (E1 *comparison* E2)
на E1 *NOT-comparison* E2
или NOT (E IS ?)
и E IS NOT ?
. Можно безопасно переписать выражение, используя стандартные логические идентификаторы/правила, если значение никогда не будет NULL. Можно также безопасно применять правила перезаписи к
(E1 *comparison* E2)
AND E1 IS NOT NULL AND E2 IS NOT NULL
Также имейте в виду, что вы должны правильно использовать Неизвестный конечный результат, который включает в себя не совпадение для WHERE, но не сбой для ограничения.
SELECT 1 FROM T T LEFT JOIN T2 T2 --t2 has zero rows ON T.id = t2.t_id WHERE NOT ( T.id <> 99 AND T2.id <> 99 )
LEFT JOIN возвращает строки ВНУТРЕННЕГО СОЕДИНЕНИЯ плюс несопоставимые строки T, расширенные столбцами T2 NULL. (При пустом T2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ пусто, и все строки T не имеют аналогов.) Все расширенные строки имеют T2.id <> 99 неизвестных, так как T2.id-это NULL. Для T.id = 99 AND является ложным, а NOT-истинным; WHERE возвращает все строки. Для T1.id любого другого целого числа или NULL AND будет неизвестно, NOT будет неизвестно; WHERE не возвращает строк.
(В SQL нет «short ciruit» оценки условий. Каждый аргумент связки должен быть определен.)
Поделиться philipxy 16 декабря 2015 в 18:55
3
Если бы вы буквально оценили предыдущее выражение, True И Null были бы Null и исключили бы строку.
Нет, вы оцениваете выражение. NOT ( 1 <> 1 AND NULL <> 1 )
— это NOT (FALSE AND UNKNOWN)
— это NOT FALSE
-это TRUE
.
( 1 = 1 OR NULL = 1)
— это TRUE OR UNKNOWN
-это TRUE
. Они оба эквивалентны.
NOT ( 1 <> 1 AND NULL <> 1 )
можно переписать как NOT ((NOT (1=1)) AND (NOT (NULL = 1)))
. В обычной логике двух значений, по законам Де Моргана , которые могут быть переписаны как NOT (NOT ((1 = 1) OR (NULL = 1)))
, а затем (1=1) OR (NULL = 1)
. Как оказалось, законы Де Моргана также справедливы в логике трех значений SQL. Это можно продемонстрировать, создав исчерпывающие таблицы истинности для двух законов.
Таблица истинности, показывающая, что один из законов Де Моргана, (NOT A) OR (NOT B)
эквивалентен NOT (A AND B)
, соответствует логике трех значений SQL:
A B | (NOT A) OR (NOT B) | equiv? | NOT (A AND B)
========================================================
T T | F T F F T | T | F T T T
T F | F T T T F | T | T T F F
T U | F T U U U | T | U T U U
-------------------------------------------------------
F T | T F T F T | T | T F F T
F F | T F T T F | T | T F F F
F U | T F T U U | T | T F F U
-------------------------------------------------------
U T | U U U F T | T | U U U T
U F | U U T T F | T | T U F F
U U | U U U U U | T | U U U U
Другой закон, (NOT A) AND (NOT B)
эквивалентен NOT (A OR B)
, может быть также продемонстрирован.
Могу ли я предположить, что этот тип компиляции гарантированно будет происходить всегда?
Нет, конкретные компиляции никогда (почти никогда) не гарантируются. За исключением ошибок в SQL Server, выбранные планы запросов, примененные преобразования вернут результаты, указанные в запросе.
Отредактировано, чтобы добавить: Пусть T.id
будет 99
, а T2.id
— NULL
. Затем:
WHERE NOT ( T.id <> 99 AND T2.id <> 99 )
WHERE NOT (99 <> 99 AND NULL <> 99)
WHERE NOT (FALSE AND UNKNOWN)
WHERE NOT (FALSE)
WHERE TRUE
Поделиться Shannon Severance 16 декабря 2015 в 22:34
Похожие вопросы:
Haskell, генерация значений для таблицы истинности
Как вы можете сгенерировать значения истинности таблицы для ввода символов? Input : [A, B] Output: [(A, True), (B, False)], [(A, True), (B, True)], [(A, False), (B, True)], [(A, False), (B, False)]…
Создание таблицы истинности
Если у меня есть некоторые значения A B C, можно ли сгенерировать список всех их возможных истинностных значений: входные данные [X, Y, Z] , например, список содержит 8 списков (строк таблицы) [ […
Построение таблицы истинности в SQL
У меня есть следующая примерная таблица User | Event ============= Bob EventX Steve EventA Bob EventC Jane EventB Jane EventA Bob EventC Я хочу построить таблицу истинности, которая просто сообщает…
Экспорт таблицы истинности из пакета QCA в пакет R
Это почти свело меня с ума сегодня, поэтому я решил, что разделяю его: Если вы работаете с пакетом QCA (качественный сравнительный анализ) в R, вы можете создать так называемые таблицы истинности….
Цифровая логика-таблицы истинности
Я пытаюсь решить эти проблемы с помощью таблиц истинности, используя приведенные ниже формулы. У меня возникли проблемы с NOT по NAND Я думаю, что получил первые 2 проблемы правильно, используя: AND.з)…
Составление Таблиц Истинности? A && (B || D)
У меня возникли проблемы с запуском этой таблицы истинности и рисованием ее на моем уроке информатики AP. A && (B || D) — это то, что я должен нарисовать.
sql несоответствие плана в DBMS_XPLAN.DISPLAY_CURSOR
Бегая по Oracle 12.1 я ищу SQL с полным сканированием таблицы в своих планах. Когда я заглядываю внутрь: select * from V$SQL_PLAN where sql_id = ’89p47f9wnnwg9′ Я получаю 21 строку назад, одна из…
Истинность составных высказываний, образованных в результате выполнения каких-либо логических операций над простыми высказываниями, зависит только от истинности исходных высказываний. Чаще всего для установления значений сложных высказываний используют таблицы истинности.
Таблица истинности — это таблица, устанавливающая соответствие между всеми возможными наборами логических переменных, входящих в логическую функцию, и значениями функции. |
Рассмотрим построение таблиц истинности на примере операций, рассмотренных в предыдущем разделе. Начнем с унарной операции отрицания Ā. Поскольку операция выполняется над одним операндом (A), принимающим всего два значения ( 1-истина; 0-ложь), таблица будет иметь три строки и два столбца. В заголовке таблицы укажем высказывание A и результат отрицания Ā, как показано на рисунке.
Далее в первом столбце разместим все возможные значения высказывания A, а во втором — значения логической функции Ā, как показано на рисунке.
Приведем таблицу истинности логического умножения (конъюнкции).
A | B | A Λ B |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Заметим, что составное высказывание A Λ B истинно только в том случае, когда истинны ода высказывания и A, и B.
Таблица истинности логического сложения приведена на следующем рисунке.
A | B | A V B |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Составное высказывание A V B ложно лишь в случае, когда оба операнда ложны.
Таблица истинности импликации, выглядит следующим образом.
A | B | A - B |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
Составное высказывание A - B ложно лишь в случае, когда ложь имплицируется истиной. Таблица истинности эквивалентности представлена на следующем рисунке.
A | B | A ~ B |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Составное высказывание A ~ B истинно в том случае, когда значения операндов совпадают. Полезно иметь под рукой сводную таблицу истинности.
Сводная таблица истинности | |||||||||||||||||||||||||||||||
|
Заметим, что таблицы истинности находят широкое применение для
Два сложных высказывания называют эквивалентными , если совпадают их таблицы истинности. |
Высказывания, истинность которых постоянна и не зависит от истинности входящих в них простых высказываний, а определяется только их структурой, называются тождественными или тавтологиями. Различают тождественно-истинные и тождественно-ложные высказывания. |
Разбор задания 2 ЕГЭ. Построение таблиц истинности логических выражений. Часть 1. | Учи Урок информатики
Основано на: демонстрационных вариантах ЕГЭ по информатике за 2015 год, на учебнике Босовой Людмилы Леонидовны
Задание:
Александра заполняла таблицу истинности для выражения F. Она успела заполнить лишь небольшой фрагмент таблицы:
x1 x2 x3 x4 x5 x6 x7 x8 F 0 1 0 1 0 1 1 1 1 Каким выражением может быть F?
1) x1 /\ ¬x2 /\ x3 /\ ¬x4 /\ x5 /\ x6 /\ ¬x7 /\ ¬x8
2) x1 \/ x2 \/ x3 \/ ¬x4 \/ ¬x5 \/ ¬x6 \/ ¬x7 \/ ¬x8
3) ¬x1 /\ x2 /\ ¬x3 /\ x4 /\ x5 /\ ¬x6 /\ x7 /\ x8
4) x1 \/ ¬x2 \/ x3 \/ ¬x4 \/ ¬x5 \/ ¬x6 \/ ¬x7 \/ ¬x8
В решении заданий ЕГЭ по информатике № 2 согласно Спецификации КИМ 2015 года к ЕГЭ по ифнорматике тестируются знания по пунктам:
- Высказывания, логические операции, кванторы, истинность высказывания.
- Умения строить модели объектов, систем и процессов в виде таблицы истинности для логического высказывания
На выполнение задания №2 ЕГЭ по информатике отводится 3 минуты.
Для решения этого задания нам необходимо вспомнить теорию в области Высказываний и логических операций (тема 9-го класа).
Высказывание — это предложение на любом языке, содержание которого можно однозначно определить как истинное или ложное.
Примеры:
- Солнце вращается вокруг земли (НЕТ, ложное высказывание)
- Земля круглая (ДА, истинное высказывание)
- 2+2=4 (ДА)
- 2>6 (НЕТ)
Побудительные и вопросительные предложения высказываниями не являются. Например, не являются высказываниями такие предложения, как: «Запишите задание на каникулы», «Как пройти в магазин?», «Кто там?».
В алгебре логики высказывания обозначают буквами (например X1, x2, C, A, B) и называют логическими переменными. При этом если высказывание истинно, то значение соответствующей ему логической переменной обозначают единицей (А = 1), а если ложно — нулём (В = 0). 0 и 1, обозначающие значения логических переменных, называются логическими значениями.
Высказывания бывают простые и сложные. Высказывание называется простым, если никакая его часть сама не является высказыванием. Сложные (составные) высказывания строятся из простых с помощью логических операций. Рассмотрим основные логические операции, определённые над высказываниями. Все они соответствуют связкам, употребляемым в естественном языке.
КонъюнкцияРассмотрим два высказывания: А = «Основоположником алгебры логики является Джордж Буль», В = «Исследования Клода Шеннона позволили применить алгебру логики в вычислительной технике». Очевидно, новое высказывание «Основоположником алгебры логики является Джордж Буль, и исследования Клода Шеннона позволили применить алгебру логики в вычислительной технике» истинно только в том случае, когда одновременно истинны оба исходных высказывания. Самостоятельно установите истинность или ложность трёх рассмотренных высказываний.
Конъюнкция — логическая операция, ставящая в соответствие каждым двум высказываниям новое высказывание, являющееся истинным тогда и только тогда, когда оба исходных высказывания истинны.
Для записи конъюнкции используются следующие знаки: /\ , `*`, И, &, Например: А/\В, А*В, А И В, А&В. Конъюнкцию можно описать в виде таблицы, которую называют таблицей истинности:
В таблице истинности перечисляются все возможные значения исходных высказываний (столбцы А и В), причём соответствующие им двоичные числа, как правило, располагают в порядке возрастания: 00, 01, 10, 11. В последнем столбце записан результат выполнения логической операции для соответствующих операндов.
Иначе конъюнкцию называют логическим умножением. Подумайте почему.
Дизъюнкция
Рассмотрим два высказывания: А = «Идея использования в логике математической символики принадлежит Готфриду Вильгельму Лейбницу», В = «Лейбниц является основоположником бинарной арифметики». Очевидно, новое высказывание «Идея использования в логике математической символики принадлежит Готфриду Вильгельму Лейбницу или Лейбниц является основоположником бинарной арифметики» ложно только в том случае, когда одновременно ложны оба исходных высказывания.
Самостоятельно установите истинность или ложность трёх рассмотренных высказываний.
Дизъюнкция — логическая операция, которая каждым двум высказываниям ставит в соответствие новое высказывание, являющееся ложным тогда и только тогда, когда оба исходных высказывания ложны.
Для записи дизъюнкции используются следующие знаки: V, |, ИЛИ, +. Например: АVВ, А|В, А ИЛИ В, А+В. Дизъюнкция определяется следующей таблицей истинности:
Иначе дизъюнкцию называют логическим сложением.
Проболжение читайте в части Номер два. Разбор задания 2 ЕГЭ. Построение таблиц истинности логических выражений. Часть 2.
Пожалуйста, оцените статью
4.16 из 5. (Всего голосов:262)
Все статьи раздела
Презентация «Построение таблиц истинности» | Презентация к уроку по информатике и икт (8 класс) на тему:
Слайд 1
Построение таблиц истинностиСлайд 2
Алгоритм построения таблицы истинности 1 . подсчитать количество переменных n в логическом выражении; 2 . определить число строк в таблице по формуле m =2 n , где n — количество переменных; 3 . подсчитать количество логических операций в формуле; 4 . установить последовательность выполнения логических операций с учетом скобок и приоритетов; 5 . определить количество столбцов: число переменных + число операций; 6 . выписать наборы входных переменных; 7 . провести заполнение таблицы истинности по столбцам, выполняя логические операции в соответствии с установленной в пункте 4 последовательностью.
Слайд 3
За окном светит солнце и нет дождя. А = { За окном светит солнце } А В= { За окном дождь } В Задача 1 A и не В = F(A,B) =
Слайд 4
Таблица истинности функции F(A,B) = A и не В Количество строк = Количество столбцов = 3 . Приоритет операций: 1 ) 2) A B В А /\ B 0 0 1 0 0 1 0 0 1 0 1 1 1 1 0 0 4 2 + 2 = 4 Таблица истинности:
Слайд 5
Задача 2 Не является истиной то, что муравьи ленивы или трусливы. А В F(A,B) = не ( A или В) = ( A v В) = A v В
Слайд 6
Таблица истинности функции F(A,B) =A v В 1. Количество строк = 2. Количество столбцов = 4 4 3. Приоритет операций: (A v В ) 1) 2) A B A v В (A v В ) 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 Таблица истинности:
Слайд 7
Задача 3 Гости смеялись, шутили и не расходились. А Б С F(A,B ,С ) = А и В и не С= A л В л С
Слайд 8
Таблица истинности функции F(A,B,C) = A л В л С 1. Кол . строк = 2. Кол .c толбцов = 8 3+3=6 3 . Приоритет операций: A л В л С 1) 2) 3) A B C С A В A В С 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0
Слайд 9
Задание 1. /А13, 2004/. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X , Y , Z . Дан фрагмент таблицы истинности выражения F : Какое выражение соответствует F ? 1)¬ X /\¬ Y / \Z 2)¬X\/¬Y\/Z 3)X\/Y\/¬Z 4)X\/Y\/Z тестовые задания по логике из ЕГЭ X Y Z F 0 0 0 1 0 0 1 0 0 1 0 1 Ответ: 3
Слайд 10
тестовые задания по логике из ЕГЭ Задание 2 . /А11, 2007/. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X , Y , Z . Дан фрагмент таблицы истинности выражения F : Какое выражение соответствует F ? 1 )¬ X \/ Y \/ ¬Z 2 )X /\ Y /\ ¬Z 3 )¬X /\ ¬Y /\ Z 4) X \/ ¬Y \/ Z X Y Z F 0 1 0 0 1 1 0 1 1 0 1 0 Ответ: 3
Слайд 11
Конец …
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике. | Самостоятельная учеба. САМ
Всем привет! Сегодня пришло время практики. Будем решать второе задание из ЕГЭ по информатике. Задания возьмем из Яндекс Репетитора. Мне этот ресурс очень нравится, потому что на нем подобранны задания разной сложности. В третьем задании мы рассмотрим непростое задание. Это задание составили эксперты «СтатГрада» для Яндекса и с ним справились всего 56% пользователей Яндекс Репетитора.
- Разбор задания №2 по информатике.из демоверсии ЕГЭ 2021.
Задание #T9285
Логическая функция F задается выражением (z → x ∨ y ) → x ∧ z ∧ ¬w. Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F. Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
В ответ напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.) Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.
Для начала, мы с вами можем условно разделить выражение на три множителя:
- (z → x ∨ y ) → x
- z
- ¬w
Каждый множитель должен быть истинным, потому что вся функция F , в тех строчках которые нам нужны истинна. И мы с вами можем уже сразу определить, где в таблице будет z и w.
Листай галереюЗадание №2. Построение таблиц истинности логических выражений. Практика по информатике.Листай галерею
Дальше рассмотрим первый множитель, чтобы определить когда он будет истинным.
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.На самом деле, если посмотреть внимательно, то варианта когда (z → x ∨ y ) = 0, а x =1, у нас быть не может. Но зато у нас есть два вариана когда (z → x ∨ y ) = 1 и x = 1. Когда у = 0 и у = 1.
Составив таблицу истинности для первого множителя, уже совсем не сложно сопоставить, где будет x, а где будет y.
Заполненный фрагмент таблицы истинности на втором слайдеЗадание №2. Построение таблиц истинности логических выражений. Практика по информатике.Заполненный фрагмент таблицы истинности на втором слайде
Запишем ответ: zxyw
Задание#T9783
Миша заполнял таблицу истинности функции (x ∧ ¬y)∨ (x ↔ z)∨ ¬w, но успел заполнить лишь фрагмент из трех различных ее строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.Определите какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
В ответ напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.) Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.
Функция у нас представляет дизъюнкцию выражений, и во всех трех строчках равна нулю. А дизъюнкция равна нулю только в одном случае, когда каждое выражение равно нулю. Мы с вами можем сразу найти в таблице w. Если ¬w = 0, то w = 1, во всех трех случаях. У нас в таблице истинности есть только один столбец, где могут быть все единицы.
Таблица истинности на втором фотоЗадание №2. Построение таблиц истинности логических выражений. Практика по информатике.Таблица истинности на втором фото
Дальше рассмотрим выражение с эквиваленцией, оно будет ложным, только если x и z — отличаются.
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.А вот x ∧ ¬y, представляет собой конъюнкцию, и поэтому будет истинным только в одном случае. Когда x = 1 и ¬y = 1, т.е у = 0. Давайте распишем таблицу истинности для этого выражения, в тех строках, где оно будет ложно. А потом уже к этой таблице добавим z, учитывая, что z и x должны отличаться.
На второй картинке добавляем zЗадание №2. Построение таблиц истинности логических выражений. Практика по информатике.На второй картинке добавляем z
Теперь с теми данными которые у нас есть возвращаемся к таблице истинности. В первом столбце нашей таблицы уже есть два нуля. И мы можем смело сказать, что там x. Соответственно z будет в третьем столбце, потому что он должен отличаться от x. Ну и последний столбик — y.
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.Ответ: xwzy
Задание#T4840
Логическая функция F задается выражением ((y → x) ↔ (x → w)) ∧ (z∨ x). Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F. Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
В ответ напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.) Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.
Сложность этого задания в том, что ни от какой переменной мы не можем сразу избавится. Этого просто не стоит пугаться и действовать будем так же. Постепенно по шагам.
У нас с вами конъюнкция, поэтому оба выражения должны быть истинными.
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.Давайте сразу составим фрагмент таблицы истинности для первого выражения. Нам нужен фрагмент, где это выражение будет истинно.
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.Эквиваленция у нас истинна в том случае, если первое и второе высказывание одинаковые. Либо оба лож, либо оба истинна. В нашем случае в обоих случаях ложь просто быть не может. Так как оба высказывания представляют собой импликацию. А импликация ложна в одном случае, когда из истины, следует ложь. Если:
- (y → x) = 0, то y = 1, x = 0
- (x → w) не может равняться нулю, потому что x = 0
На второй картинке добавляем Z
Дальше остается сопоставить наши данные и фрагмент таблицы истинности. Листайте галерею, в ней я пошагово определяю каждую переменную.
Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.Задание №2. Построение таблиц истинности логических выражений. Практика по информатике.Ответ: ywxz
Другие статьи по теме:
Задание №2 по информатике. Демоверсия ЕГЭ 2021.
Алгебра логики. Таблицы истинности. Круги Эйлера.
Закон де Моргана. Преобразование импликации.И другие законы алгебры логики. Порядок выполнения операций в логическом выражении.
Если хотите не пропускать статьи моего канала, то подписывайтесь! В комментариях задавайте вопросы, я всегда на них отвечаю!
sql server — компиляция плана SQL и таблицы истинности
TL; DR «Скомпилированный результат» не является полезным понятием. Имеет значение «указанный результат» — указанный в определении языка. СУБД должна заставить оператор действовать так, как вы его написали.
Таблица истинности [sic] для AND в вашей ссылке: неверно . AND с False всегда False, а OR с True всегда True в SQL.
Сравнения в SQL возвращают True, False или Unknown. Неизвестное может возникнуть в результате сравнения с NULL или логической связью 3VL (И / ИЛИ / НЕ и т. Д.) С Неизвестным.«NULL» не является буквальным. True, False и Unknown — это значения с (сортированными) литералами в стандарте SQL, но не в большинстве СУБД. (А Unknown может быть возвращен как NULL.) IS не является сравнением; IS NULL и IS NOT NULL — это унарные логические связки 3Vl, а также аналогичные связки с именами TRUE, FALSE и UNKNOWN. Они всегда возвращают True или False.
ИСТИНА И НУЛЬ
будет пустым и исключает строку. Тем не менее скомпилированное выражение может возвращать строку из-за ИЛИ.
Нет. Таблица истинности [sic] для AND в вашей ссылке неверно . AND с False всегда False, а OR с True всегда True в SQL. Таким образом, ваше И всегда ложно из НЕ из Ложь из И из Ложь из 1 <> 1, а ваше И всегда истинно из 1 = 1. Независимо от того, что возвращают другие сравнения (Истина, Ложь или Неизвестно). Если вы проработаете эти два выражения, используя (правильные) таблицы истинности SQL), они оба всегда дают один и тот же результат, True.
При переписывании условий в SQL нужно быть очень осторожным.Можно заменить НЕ (E1 * сравнение * E2)
на E1 * НЕ-сравнение * E2
или НЕ (E IS?)
и E НЕ?
. Можно безопасно переписать выражение, используя стандартные логические идентификаторы / правила, если никакое значение никогда не равно NULL. Также можно смело применять правила перезаписи к
(E1 * сравнение * E2)
И E1 НЕ НУЛЕВО И E2 НЕ НУЛЕВО
Также помните, что вы должны правильно использовать неизвестный конечный результат, который включает несоответствие для WHERE, но не сбой для ограничения.
ВЫБРАТЬ 1 ОТ Т Т LEFT JOIN T2 T2 --t2 имеет нулевые строки ВКЛ T.id = t2.t_id ГДЕ НЕТ (T.id <> 99 И T2.id <> 99)
LEFT JOIN возвращает строки INNER JOIN плюс несовпадающие строки T, расширенные столбцами T2 NULL. (Если T2 пуст, INNER JOIN пуст и все строки T не совпадают.) Все расширенные строки имеют T2.id <> 99 Unknown, поскольку T2.id имеет значение NULL. Для T.id = 99 И — Ложь, а НЕ — Истина; WHERE возвращает все строки.Для T1.id любое другое целое число или NULL, AND будет Unknown, NOT будет Unknown; WHERE не возвращает строк.
(В SQL нет «короткого замыкания» оценки условий. Каждый аргумент связки должен быть определен.)
таблиц истинности и анализ аргументов: примеры
Таблицы истинности
Поскольку сложные логические утверждения могут быть сложными для размышления, мы можем создать таблицу истинности , чтобы отслеживать, какие значения истинности для простых утверждений делают сложное утверждение истинным, а какое ложным
Таблица истинности
Таблица, показывающая, каково результирующее значение истинности сложного утверждения для всех возможных значений истинности для простых утверждений.
Пример 1
Предположим, вы выбираете новую кушетку, и ваша вторая половинка говорит: «Купите секционную или что-нибудь с шезлонгом».
Это сложное утверждение, состоящее из двух более простых условий: «является секционным» и «имеет шезлонг». Для простоты давайте использовать S для обозначения «является секционным» и C для обозначения «имеет шезлонг». Условие S выполняется, если кушетка секционная.
Таблица истинности для этого будет выглядеть так:
S | К | S или C |
---|---|---|
т | т | т |
т | F | т |
ф. | т | т |
ф. | F | F |
В таблице T означает истину, а F — ложь.В первой строке, если S истинно и C также истинно, то комплексное утверждение « S или C » истинно. Это будет секция, у которой тоже есть шезлонг, что соответствует нашему желанию.
Помните также, что или в логике не исключают; если диван имеет обе функции, он соответствует условию.
Для дальнейшего сокращения наших обозначений мы собираемся ввести некоторые символы, которые обычно используются для и , или , а также , а не .
Обозначения
Символ ⋀ используется для и : A и B Обозначение A ⋀ B .
Символ ⋁ используется для или : A или B обозначается A ⋁ B
Символ ~ используется для , а не : не A обозначается ~ A
Вы можете запомнить первые два символа, связав их с формами объединения и пересечения. A ⋀ B — это элементы, которые существуют в обоих наборах, в A ⋂ B.Аналогично, A B будет элементами, которые существуют в любом наборе, в A ⋃ B.
В предыдущем примере таблица истинности на самом деле просто суммировала то, что мы уже знаем о работе операторов или . Таблицы истинности для базовых утверждений и , или , а также , а не показаны ниже.
Основные таблицы истинности
А | B | A ⋀ B |
---|---|---|
т | т | т |
т | F | F |
ф. | т | F |
ф. | F | F |
А | B | A ⋁ B |
---|---|---|
т | т | т |
т | F | т |
ф. | т | т |
ф. | F | F |
Таблицы истинности действительно становятся полезными при анализе более сложных логических операторов.
Пример 2
Создайте таблицу истинности для утверждения A ⋀ ~ ( B C )
Это помогает работать изнутри при создании таблиц истинности и создавать таблицы для промежуточных операций. Начнем с перечисления всех возможных комбинаций значений истинности для A , B и C . Обратите внимание, что первый столбец содержит 4 Ts, за которыми следуют 4 F, второй столбец содержит 2 Ts, 2 F, затем повторяется, а последний столбец чередуется.Этот шаблон обеспечивает учет всех комбинаций. Наряду с этими начальными значениями мы перечислим значения истинности для самого внутреннего выражения: B ⋁ C .
А | Б | К | B ⋁ C |
т | т | т | т |
т | т | F | т |
т | F | т | т |
т | F | F | F |
ф. | т | т | т |
ф. | т | F | т |
ф. | F | т | т |
ф. | F | F | F |
Затем мы можем найти отрицание B ⋁ C , отработав только что созданный столбец B ⋁ C .
А | Б | К | B ⋁ C | ~ ( B C ) |
т | т | т | т | F |
т | т | F | т | F |
т | F | т | т | F |
т | F | F | F | т |
ф. | т | т | т | F |
ф. | т | F | т | F |
ф. | F | т | т | F |
ф. | F | F | F | т |
Наконец, находим значения A и ~ ( B ⋁ C )
А | Б | К | B ⋁ C | ~ ( B C ) | A ~ ( B C ) |
т | т | т | т | F | F |
т | т | F | т | F | F |
т | F | т | т | F | F |
т | F | F | F | т | т |
ф. | т | т | т | F | F |
ф. | т | F | т | F | F |
ф. | F | т | т | F | F |
ф. | F | F | F | т | F |
Оказывается, это сложное выражение истинно только в одном случае: если A истинно, B ложно, а C ложно.
Когда мы обсуждали условия ранее, мы обсуждали тип, при котором мы предпринимаем действие, основанное на значении условия. Теперь мы поговорим о более общей версии условного выражения, которое иногда называют импликацией .
Последствия
Последствия — это логические условные предложения, в которых говорится, что утверждение p , называемое антецедентом, подразумевает следствие q .
Последствия обычно записываются как p → q
Последствия аналогичны условным операторам, которые мы рассматривали ранее; p → q обычно записывается как «если p, то q» или «p, следовательно, q.«Разница между импликациями и условными предложениями заключается в том, что условные выражения, которые мы обсуждали ранее, предполагают действие — если условие истинно, то в результате мы предпринимаем какое-то действие. Последствия — это логическое утверждение, которое предполагает, что следствие должно логически следовать, если антецедент верен.
Пример 3
Английское высказывание «Если идет дождь, то в небе облака» является логическим следствием. Это веский аргумент, потому что если предыдущее утверждение «идет дождь» верно, то следствие «в небе облака» также должно быть верным.
Обратите внимание, что это утверждение ничего не говорит нам о том, чего ожидать, если не будет дождя. Если антецедент ложен, то импликация становится неактуальной.
Пример 4
Друг говорит вам, что «если вы загрузите эту фотографию в Facebook, вы потеряете работу». Есть четыре возможных исхода:
- Вы загружаете картинку и сохраняете свою работу
- Вы загружаете фотографию и теряете работу
- Вы не загружаете картинку и сохраняете свою работу
- Вы не загружаете картинку и теряете работу
Есть только один возможный случай, когда ваш друг лгал — первый вариант, когда вы загружаете изображение и сохраняете свою работу.В последних двух случаях ваш друг ничего не сказал о том, что произойдет, если вы не загрузите изображение, поэтому вы не можете сделать вывод, что его утверждение недействительно, даже если вы не загрузили изображение и все равно потеряли свое работа.
В традиционной логике импликация считается действительной (истинной) до тех пор, пока нет случаев, в которых антецедент истинен, а следствие ложно. Важно помнить, что символическая логика не может охватить все тонкости английского языка.
Истинные ценности для последствий
p | кв | p → q |
т | т | т |
т | F | F |
ф. | т | т |
ф. | F | т |
Пример 5
Постройте таблицу истинности для утверждения ( m ⋀ ~ p ) → r
Начнем с построения таблицы истинности для антецедента.
м | п. | ~ p | м ⋀ ~ p |
т | т | F | F |
т | F | т | т |
ф. | т | F | F |
ф. | F | т | F |
Теперь мы можем построить таблицу истинности для импликации
м | п. | ~ p | м ⋀ ~ p | г | ( м ⋀ ~ p ) → r |
т | т | F | F | т | т |
т | F | т | т | т | т |
ф. | т | F | F | т | т |
ф. | F | т | F | т | т |
т | т | F | F | F | т |
т | F | т | т | F | F |
ф. | т | F | F | F | т |
ф. | F | т | F | F | т |
В этом случае, когда m истинно, p ложно и r ложно, тогда антецедент m ⋀ ~ p будет истинным, но последствие будет ложным, что приведет к недействительное следствие; любой другой случай дает верное значение.
Для любого импликации есть три связанных утверждения: обратное, обратное и противозаконное.
Связанные заявления
Исходное значение: «если p , то q »: p → q
Обратное: «если q , то p »: q → p
Обратное значение: «если не p , то не q »: ~ p → ~ q
Контрапозитив: «если не q , то не p »: ~ q → ~ p
Пример 6
Снова рассмотрим действительный вывод: «Если идет дождь, то в небе облака.”
Обратное выражение: «Если на небе облака, значит, идет дождь». Это, конечно, не всегда так.
Обратное будет: «Если не идет дождь, то на небе нет облаков». Точно так же это не всегда так.
Противоположный ответ: «Если на небе нет облаков, значит, не идет дождь». Это утверждение верно и эквивалентно исходному выводу.
Глядя на таблицы истинности, мы можем видеть, что исходное условное и контрпозитивное логически эквивалентны, а обратное и обратное логически эквивалентны.
Последствия | Converse | обратный | Контрапозитив | ||
---|---|---|---|---|---|
p | кв | p → q | q → p | ~ p → ~ q | ~ q → ~ p |
т | т | т | т | т | т |
т | F | F | т | т | F |
ф. | т | т | F | F | т |
ф. | F | т | т | т | т |
Эквивалентность
Условное утверждение и его контрпозитив логически эквивалентны.
Обратное и обратное утверждения логически эквивалентны.
Аргументы
Логический аргумент — это утверждение, что набор предпосылок поддерживает заключение. Есть два основных типа аргументов: индуктивные и дедуктивные.
Типы аргументов
Индуктивный аргумент использует набор конкретных примеров в качестве предпосылок и использует их, чтобы предложить общий вывод.
Дедуктивный аргумент использует набор общих утверждений в качестве предпосылок и использует их, чтобы предложить конкретную ситуацию в качестве заключения.
Пример 7
Аргумент «когда я ходил в магазин на прошлой неделе, я забыл свой кошелек, а когда я пошел сегодня, я забыл свой кошелек. Я всегда забываю свой кошелек, когда иду в магазин », — это индуктивный аргумент.
Помещения:
Я забыл свой кошелек на прошлой неделе
Я забыл свой кошелек сегодня
Вывод:
Я всегда забываю свой кошелек
Обратите внимание, что посылки — это конкретные ситуации, а заключение — это общее утверждение.В данном случае это довольно слабый аргумент, поскольку он основан всего на двух примерах.
Пример 8
Аргумент «каждый день в течение последнего года над моим домом в 14:00 пролетает самолет. Самолет будет пролетать над моим домом каждый день в 14:00 »- более сильный индуктивный аргумент, поскольку он основан на большем количестве доказательств.
Оценка индуктивных аргументов
Индуктивный аргумент никогда не может доказать истинность вывода, но он может предоставить либо слабые, либо убедительные доказательства того, что это может быть правдой.
Многие научные теории, такие как теория большого взрыва, никогда не могут быть доказаны. Напротив, это индуктивные аргументы, подкрепленные множеством свидетельств. Обычно в науке идея считается гипотезой до тех пор, пока она не будет хорошо проверена, после чего она становится теорией. Все общеизвестные научные теории, такие как теория гравитации Ньютона, выдержали годы испытаний и доказательств, хотя иногда их нужно корректировать на основе новых данных.Что касается гравитации, это произошло, когда Эйнштейн предложил общую теорию относительности.
Дедуктивный аргумент является более достоверным или нет, что упрощает их оценку.
Оценка дедуктивных аргументов
Дедуктивный аргумент считается действительным, если все посылки верны, и вывод логически следует из этих посылок. Другими словами, посылки верны, и вывод обязательно следует из этих посылок.
Пример 9
Аргумент «Все кошки — млекопитающие, а тигр — это кошка, значит, тигр — это млекопитающее» — действенный дедуктивный аргумент.
Помещения:
Все кошки — млекопитающие
Тигр — это кошка
Вывод:
Тигр — млекопитающее
Оба предположения верны. Чтобы увидеть, что посылки должны логически вести к заключению, можно использовать диаграмму Венна. Исходя из первой предпосылки, мы можем заключить, что набор кошек — это подмножество множества млекопитающих. Из второй посылки нам говорят, что тигр находится внутри множества кошек. Исходя из этого, мы можем видеть на диаграмме Венна, что тигр также находится внутри группы млекопитающих, так что вывод верен.
Анализ аргументов с помощью диаграмм Венна
Анализ аргумента с помощью диаграммы Венна
- Нарисуйте диаграмму Венна на основе посылок аргумента
- Если помещения недостаточно, чтобы определить, что определяет расположение элемента, укажите это.
- Аргумент действителен, если ясно, что заключение должно быть верным
Пример 10
Предпосылка: все пожарные знают CPR
Предпосылка: Джилл знает CPR
Заключение: Джилл — пожарный
Из первой предпосылки мы знаем, что все пожарные находятся в группе тех, кто знает СЛР.Из второй посылки мы знаем, что Джилл является членом этого большего набора, но у нас недостаточно информации, чтобы знать, является ли она также членом меньшего подмножества, то есть пожарных.
Поскольку вывод не обязательно следует из предпосылок, это неверный аргумент, независимо от того, действительно ли Джилл является пожарным.
Важно отметить, что то, действительно ли Джилл является пожарным, не имеет значения для оценки обоснованности аргумента; нас интересует только то, достаточно ли предпосылок, чтобы доказать вывод.
В дополнение к этим предпосылкам категориального стиля в форме «все ___», «некоторые ____» и «нет ____» также часто можно увидеть имплицитные посылки.
Пример 11
Предпосылка: Если вы живете в Сиэтле, вы живете в Вашингтоне.
Предпосылка: Маркус не живет в Сиэтле
Заключение: Маркус не живет в Вашингтоне
Из первой предпосылки мы знаем, что множество людей, живущих в Сиэтле, находится внутри множества тех, кто живет в Вашингтоне.Из второй посылки мы знаем, что Маркус не находится в множестве Сиэтла, но у нас недостаточно информации, чтобы знать, живет ли Маркус в Вашингтоне или нет. Это недопустимый аргумент.
Пример 12
Рассмотрим аргумент «Вы женатый мужчина, значит, у вас должна быть жена».
Это неверный аргумент, поскольку есть, по крайней мере, в некоторых частях мира, мужчины, состоящие в браке с другими мужчинами, поэтому посылка не является недостаточной, чтобы сделать вывод.
Некоторые аргументы лучше анализировать с помощью таблиц истинности.
Пример 13
Рассмотрим аргумент:
Помещение: Если вы купили хлеб, то вы пошли в магазин
Помещение: вы купили хлеб
Вывод: вы пошли в магазин
Хотя мы надеемся, что этот пример является довольно очевидным аргументом, мы можем проанализировать его с помощью таблицы истинности, представив каждую из посылок символически. Затем мы можем взглянуть на импликацию, что все предпосылки вместе подразумевают заключение. Если таблица истинности является тавтологией (всегда верно), то аргумент действителен.
Мы получим, что B означает «вы купили хлеб», а S — «вы пошли в магазин». Тогда аргумент принимает вид:
Помещение: B → S
Помещение: B
Заключение: S
Чтобы проверить достоверность, мы смотрим, подразумевает ли комбинация обоих посылов заключение; правда ли, что [( B → S ) ⋀ B ] → S ?
Б | S | В → Ю | ( B → S ) ⋀ B | [( B → S ) ⋀ B ] → S |
т | т | т | т | т |
т | F | F | F | т |
ф. | т | т | F | т |
ф. | F | т | F | т |
Поскольку таблица истинности для [( B → S ) ⋀ B ] → S всегда истинна, это допустимый аргумент.
Анализ аргументов с использованием таблиц истинности
Чтобы проанализировать аргумент с помощью таблицы истинности:
- Изобразите каждое из помещений символически
- Создайте условное утверждение, соединив все посылки с антецедентом и образуя его, и используя заключение как следствие.
- Создайте таблицу истинности для этого утверждения. Если это всегда правда, то аргумент действителен.
Пример 14
Предпосылка: если я пойду в торговый центр, то куплю новые джинсы
Предпосылка: если я куплю новые джинсы, я куплю к ним рубашку
Вывод: если я приду в торговый центр, я куплю Футболка.
Пусть M = я иду в торговый центр, J = я покупаю джинсы и S = я покупаю рубашку.
Предпосылки и заключение можно изложить как:
Помещение: M → J
Помещение: J → S
Заключение: M → S
Мы можем построить таблицу истинности для [( M → J ) ⋀ ( J → S )] → ( M → S )
М | Дж | S | М → Дж | Дж → Ю | ( M → J ) ⋀ ( J → S ) | М → Ю | [( M → J ) ⋀ ( J → S )] → ( M → S ) |
т | т | т | т | т | т | т | т |
т | т | F | т | F | F | F | т |
т | F | т | F | т | F | т | т |
т | F | F | F | т | F | F | т |
ф. | т | т | т | т | т | т | т |
ф. | т | F | т | F | F | т | т |
ф. | F | т | т | т | т | т | т |
ф. | F | F | т | т | т | т | т |
Из таблицы истинности мы видим, что это действительный аргумент.
Комбинационная логика
- Изучив этот раздел, вы сможете:
- Опишите сложные логические функции.
- • Использование таблиц истинности.
- • Использование логических выражений.
- Поймите взаимосвязь между таблицами истинности и логическими схемами.
- • Анализируйте простые цифровые схемы с помощью таблиц истинности.
- • Формулируйте булевы уравнения на основе таблиц истинности.
- • Используйте таблицы истинности для упрощения логических схем.
Комбинационная логика
Объединение ряда базовых логических вентилей в более крупную схему для создания более сложных логических операций называется комбинационной логикой. Используя такие схемы, логические операции могут выполняться на любом количестве входов, логическое состояние которых равно 1 или 0, и этот метод является основой всей цифровой электроники.
Комбинационные логические схемы могут различаться по сложности от простых комбинаций двух или трех стандартных вентилей до схем, содержащих сотни тысяч или даже миллионы вентилей. Именно эта способность комбинировать всего несколько простых схем затвора, которые могут быть изготовлены до микроскопических размеров, но в практически неограниченных комбинациях, делает цифровую электронику такой мощной.
Чтобы понять работу комбинационной логической схемы и какое логическое состояние должно присутствовать в любой конкретной точке схемы, необходимо точно проанализировать работу схемы.Для этого можно использовать несколько методов, в зависимости от сложности схемы. К ним относятся таблицы истинности, логическая алгебра, карты Карно и методы компьютерного программного обеспечения.
Таблицы истинности
Рис. 2.2.1 Комбинационная логика
Таблица истинности может использоваться для анализа работы логических схем. Простой пример комбинационной логической схемы показан на рис. 2.2.1. Для анализа его работы можно составить таблицу истинности, как показано в Таблице 2.2.1. Сначала записывается ряд столбцов, в которых с использованием единиц и нулей описываются все возможные состояния, которые могут возникнуть на входах и выходах схемы.Для схемы на рис. 2.2.1 используются три входа A, B и C.
Шаг 1
Требуются три столбца, помеченные A, B и C, заполненные двоичным числом от 000 до 111. Эти столбцы теперь содержат ВСЕ возможные входные условия, потому что три входа могут иметь только 2 3 (восемь) комбинаций 1 и 0. Подробнее входы, конечно, будут иметь больше возможных комбинаций, но пока используется двоичный счет с одним столбцом на вход, все возможные входные условия покрываются.
Шаг 2
Таблица 2.2.1 Создание таблицы истинности
Затем добавляются еще два столбца для промежуточных точек D и E в цепи, показывающие в столбце D результат «И» столбцов A и B, а в столбце E — результаты «И» столбцов A и C. Каждый столбец помечен логическим выражением для этого конкретного выхода вентиля. Каждая ячейка в столбцах D и E заполняется соответствующими 1 или 0 путем определения логического состояния, которое могло бы возникнуть на выходе этого вентиля для данных входов.В этом случае каждый столбец подчиняется правилу логического элемента И, как показано в модуле цифровой электроники 2, таблица 2.1.1.
Шаг 3
Затем последний столбец X дополняется операцией «ИЛИ» промежуточных столбцов D и E. Этот последний столбец теперь показывает все логические состояния на выходе X для любой комбинации логических состояний на входах A, B и C. Таблица истинности произведенный таким образом, также очень полезен при поиске неисправностей в комбинационных логических схемах, поскольку он показывает логические состояния в любой точке схемы для данной комбинации входов.Их можно сравнить с реальной работой схемы, чтобы выявить неисправности.
Рис. 2.2.2 Трехвходовая комбинационная логическая схема
Упрощение схемы с использованием таблиц истинности
Создание схемы из таблицы истинности обращается к процессу, описанному выше, и, глядя на таблицу 2.2.1, можно увидеть, что логическая 1 создается на выходе X всякий раз, когда входы схемы A, B и C находятся на уровне логической 1. Это можно описать путем составления соответствующего логического уравнения из таблицы истинности, которая показывает, что X равно 1, когда A и B равны 1, или когда A и C равны 1, или когда A и B и C равны 1.Это можно записать как:
X = (A • B) + (A • C) + (A • B • C)
Таким образом, схема обеспечивает выход логической 1 на X для любой комбинации входов, где двоичное значение входов больше 100 2 (4 10 ). Построение схемы для реализации булевого уравнения даст результат, показанный на рис. 2.2.2. Обратите внимание, однако, что эта схема дает тот же выходной сигнал, что и исходная схема на рис. 2.2.1, поэтому может ли более простая схема на рис. 2.2.1 справиться с этой задачей так же хорошо?
Логическое уравнение, полученное из таблицы 2.2.1 предполагает, что потребуется более сложная схема, как показано на рис. 2.2.2, для которой требуются два логических элемента И с 2 входами для столбцов D и E и логические элементы И с тремя входами для столбца F. Затем они объединяются с помощью логической операции ИЛИ. 3 входных элемента ИЛИ для обеспечения единственного выхода X.
Составление таблицы истинности для рис. 2.2.2 для проверки ее работы дает таблицу 2.2.2. Столбец выходных данных X показывает, что схема на рис. 2.2.2 действительно дает те же выходные данные, что и на рис. 2.2.1. Однако, хотя логическая 1 в X создается в нижней строке, где все три входа (A • B • C) являются логической 1, третья строка вверх от нижней части таблицы, где A • C (заштрихованные ячейки) также предоставляет логическая 1 в столбце E и на выходе X.
Следовательно, не имеет значения, имеют ли столбцы D, E или F в нижней строке логическую единицу или нет. На входах 111 логические единицы на входах A и C по-прежнему будут создавать логическую 1 на E и, следовательно, логическую 1 на выходе X. Таким образом, нижняя строка для столбцов D, E и F может быть помечена marked, чтобы указать «Don ‘t Care «, неважно, равны ли эти ячейки 1 или 0, столбец X по-прежнему будет иметь значение логической 1.
Это означает, что столбец F (и три входных элемента И) не нужны, также три входных элемента ИЛИ могут быть заменены логическим элементом ИЛИ с двумя входами.
Хотя схема, показанная на рис. 2.2.2, спроектированная на основе булевого уравнения, полученного непосредственно из таблицы истинности, действительно дает требуемый результат, более простая (и дешевая) схема, показанная на рис. 2.2.1, выполняет свою работу точно так же. . Использование таблицы истинности таким образом, безусловно, даст работоспособные результаты и создаст рабочую схему, однако, возможно, это не лучшая схема. В этом случае логическое уравнение можно сократить и упростить, избавившись от избыточных A • B • C. Полученная упрощенная схема адекватно описывается более коротким булевым уравнением:
X = (A • B) + (A • C)
Это показывает, что, хотя таблицы истинности являются отличным методом для анализа работы цифровой схемы, они могут быть не лучшим инструментом проектирования, когда используются сами по себе, для достижения простейшего проекта.Упрощение схемотехники с использованием таблиц истинности требует некоторой практики в чтении таблицы истинности, хотя возможные упрощения по-прежнему намного легче увидеть в таблице истинности, чем при попытке визуального анализа принципиальной схемы. Однако с более сложными схемами и более чем двумя или тремя входами упрощение с использованием таблиц истинности становится очень трудоемким процессом и, следовательно, более подверженным ошибкам. Для схем, использующих до трех или четырех входов, лучшие результаты могут быть получены путем прямого управления уравнениями булевой алгебры, полученными из таблицы истинности.
Математика | Введение в логику высказываний | Набор 1
Что такое логика?Логика — основа всех математических рассуждений и всех автоматизированных рассуждений. Правила логики определяют значение математических утверждений. Эти правила помогают нам понять и обосновать такие утверждения, как —
так что where
Что на простом английском языке означает «Существует целое число, не являющееся суммой двух квадратов».
Важность математической логики
Правила логики придают точный смысл математическим утверждениям.Эти правила используются, чтобы различать допустимые и недопустимые математические аргументы.
Помимо важности для понимания математических рассуждений, логика имеет множество приложений в компьютерных науках, начиная от проектирования цифровых схем и заканчивая построением компьютерных программ и проверкой правильности программ.
Что такое суждение?
Предложение — это основной строительный блок логики. Он определяется как декларативное предложение, которое является либо истинным, либо ложным, но не обоими сразу.
Истинное значение предложения — Истина (обозначается T), если это истинное утверждение, и Ложь (обозначается F), если это ложное утверждение.
Например,
1. Солнце встает на Востоке и заходит на Западе. 2. 1 + 1 = 2 3. «b» - гласная.
Все вышеперечисленные предложения являются предложениями, где первые два являются действительными (истинными), а третье — недействительными (ложными).
Некоторые предложения, которые не имеют значения истинности или могут иметь более одного значения истинности, не являются предложениями.
Например,
1. Который час? 2. Выходи и играй. 3. х + 1 = 2.
Приведенные выше предложения не являются предложениями, поскольку первые два не имеют значения истинности, а третье может быть истинным или ложным.
Для представления предложений используются пропозициональных переменных . По соглашению эти переменные представлены маленькими алфавитами, такими как.
Область логики, которая имеет дело с предложениями, называется исчислением высказываний или логикой высказываний .
Он также включает создание новых предложений с использованием существующих. Предложения, построенные с использованием одного или нескольких предложений, называются составными предложениями . Предложения объединяются с помощью Logical Connectives или Logical Operators .
Поскольку нам нужно знать значение истинности предложения во всех возможных сценариях, мы рассматриваем все возможные комбинации предложений, которые объединяются логическими связями, чтобы сформировать данное сложное предложение.Эта компиляция всех возможных сценариев в табличном формате называется таблицей истинности .
Наиболее распространенные логические связки —
1. Отрицание — Если это предложение, то отрицание обозначается как, что в переводе на простой английский означает —
«Это не так» или просто «не» .
Значение истинности противоположно значению истинности.
Таблица истинности is-
Пример:
Отрицание «Сегодня идет дождь»: «Это не тот случай, когда сегодня идет дождь» или просто «Сегодня дождь не идет».
2. Конъюнкция — Для любых двух предложений и их конъюнкция обозначается как, что означает «и». Соединение истинно, когда оба и истинны, в противном случае — ложно.
Таблица истинности is-
Пример:
Объединение предложений — «Сегодня пятница» и — «Сегодня идет дождь» — это «Сегодня пятница, сегодня идет дождь». Это утверждение верно только в дождливые пятницы и неверно в любой другой дождливый день или в пятницу, когда нет дождя.
3. Дизъюнкция — Для любых двух предложений и их дизъюнкция обозначается значком «или». Дизъекция истинна, когда либо либо истинно, либо ложно.
Таблица истинности is-
Пример:
Разъединение предложений — «Сегодня пятница» и — «Сегодня идет дождь», — «Сегодня пятница или сегодня идет дождь». Это утверждение верно в любой день, который является пятницей или дождливым днем (включая дождливые пятницы), и неверно в любой день, кроме пятницы, когда также не идет дождь.
4. Исключающее ИЛИ — Для любых двух предложений и, их исключающее ИЛИ обозначается значком, что означает «либо, либо, но не оба». Исключающее или имеет значение Истина, когда одно из или равно Истина, и Ложь, когда оба значения истинны или оба ложны.
Таблица истинности is-
Пример,
Исключение или предложений — «Сегодня пятница» и — «Сегодня идет дождь»: «Либо сегодня пятница, либо сегодня идет дождь, но не то и другое одновременно». Это утверждение верно в любой день, являющийся пятницей или дождливым днем (не считая дождливых пятниц), и неверно в любой день, кроме пятницы, когда нет дождя или дождливой пятницы.
5. Импликация — Для любых двух предложений и утверждение «если, то» называется импликацией и обозначается значком.
В импликации называется гипотезой или предшествующим или посылкой и называется выводом или следствием .
Смысл также называется условным оператором .
Импликация ложна, когда истинна, и ложна в противном случае — истина.Таблица истинности is-
Вы можете спросить, почему истинно, когда ложно. Это потому, что импликация гарантирует, что когда и верны, то импликация верна. Но импликация ничего не гарантирует, когда посылка ложна. Невозможно узнать, ложен ли этот вывод, поскольку этого не произошло.
Эта ситуация аналогична позиции «невиновен, пока не доказана вина», что означает, что импликация считается истинной, пока не будет доказана ложность.Поскольку мы не можем назвать импликацию ложной, когда она ложна, наша единственная альтернатива — назвать ее истинной.
Это следует из принципа взрыва , который гласит:
«Ложное утверждение подразумевает что-либо».
Условные утверждения играют очень важную роль в математических рассуждениях, поэтому для их выражения используется разнообразная терминология, некоторые из которых перечислены ниже.
"если, то" "достаточно для" " когда " «необходимое условие для есть» " только если " " пока не " "следует из"
Пример:
«Если сегодня пятница, значит, сегодня идет дождь» — это предложение, имеющее форму.Вышеупомянутое утверждение верно, если сейчас не пятница (предпосылка неверна), или если сейчас пятница и идет дождь, и неверно, если сейчас пятница, но нет дождя.
6. Двуусловное или двойное следствие — Для любых двух предложений и утверждение «если и только если (если и только если)» называется двусмысленным и обозначается.
Утверждение также называется двойным импликацией .
имеет то же значение истинности, что и
Импликация истинна, когда и имеет те же значения истинности, и ложна в противном случае.Таблица истинности is-
Некоторые другие распространенные способы выражения —
"необходимо и достаточно для" "если то и наоборот" "iff"
Пример:
«Сегодня идет дождь, если и только если сегодня пятница». предложение, имеющее форму. Вышеупомянутое утверждение верно, если сегодня не пятница и не идет дождь, или если сейчас пятница и идет дождь, и неверно, если сейчас не пятница или нет дождя.
Упражнение:
1) Рассмотрим следующие утверждения:
P: Хорошие мобильные телефоны недешевы. В: Дешевые мобильные телефоны никуда не годятся. L: P влечет Q M: Q влечет P N: P эквивалентно Q
Какой из следующих утверждений о L, M и N ПРАВИЛЬНО? (Gate 2014)
(A) Только L ИСТИНА.
(B) Только M истинно.
(C) Только N ИСТИНА.
(D) L, M и N ИСТИННЫ.
Решение см. В разделе GATE | GATE-CS-2014- (Комплект-3) | Вопрос 11
2) Что из следующего не эквивалентно p⇔q (Gate 2015)
Решение см. В GATE | GATE-CS-2015 (набор 1) | Вопрос 65
Ссылки —
Логика высказываний — Википедия
Принцип взрыва — Википедия
Дискретная математика и ее приложения, Кеннет Х. Розен
Прочтите следующую часть: Введение в логику высказываний — Набор 2
Эта статья предоставлен Chirag Manwani .Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя write.geeksforgeeks.org, или отправить свою статью по адресу [email protected]. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или если вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.
Вниманию читателя! Не прекращайте учиться сейчас. Практикуйте экзамен GATE задолго до самого экзамена с помощью предметных и общих викторин, доступных в курсе GATE Test Series .
Изучите все концепции GATE CS с бесплатными живыми классами на нашем канале YouTube.
P-99: Девяносто девять проблем с прологом
Каждый предикат, который вы пишете, должен начинаться с комментария. который описывает предикат в декларативном операторе . , а не , описывают процедурно, — что делает предикат, но запишите логический оператор , который включает аргументы предиката.Вы также должны указать предполагаемые типы данных аргументы и разрешенные схемы потока.
Задачи имеют разный уровень сложности. Те, которые отмечены одной звездочкой (*), просты. Если у тебя есть успешно решил предыдущие проблемы вы сможете решить их за несколько (скажем, 15) минут. Проблемы, отмеченные двумя звездочками (**), относятся к промежуточным. трудность. Если вы опытный программист на Prolog, это на их решение у вас не должно уйти более 30-90 минут.Задачи, отмеченные тремя звездочками (***), сложнее. Вам может потребоваться больше времени (например, несколько часов или больше), чтобы найти хорошее решение.
Список либо пуст, либо состоит из первого элемента. (голова) и хвост, который сам по себе является списком. В Prolog мы представляем пустой список атомом [] и непустой список. термином [H | T], где H обозначает голову, а T обозначает хвост.
? — my_last (X, [a, b, c, d]).
X = d
Пример:
? — element_at (X, [a, b, c, d, e], 3).
X = с
Пример:
? — my_flatten ([a, [b, [c, d], e]], X).
X = [a, b, c, d, e]
Подсказка: используйте предварительно определенные предикаты is_list / 1 и append / 3
Пример:
? — сжать ([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
X = [a, b, c, a, d, e]
Пример:
? — pack ([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
X = [[a, a, a, a], [b], [c, c], [a, a], [d], [e, e, e, e]]]
Пример:
? — кодировать ([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
X = [[4, a], [1, b], [2, c], [2, a], [1, d] [4, e]]]
Пример:
? — encode_modified ([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
X = [[4, a], b, [2, c], [2, a], d, [4, e]]
Пример:
? — encode_direct ([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
X = [[4, a], b, [2, c], [2, a], d, [4, e]]
? — dupli ([a, b, c, c, d], X).
X = [a, a, b, b, c, c, c, c, d, d]
? — dupli ([a, b, c], 3, X).
X = [a, a, a, b, b, b, c, c, c]
Каковы результаты гола:
? — дупли (X, 3, Y).
? — капля ([a, b, c, d, e, f, g, h, i, k], 3, X).
X = [a, b, d, e, g, h, k]
Пример:
? — разделить ([a, b, c, d, e, f, g, h, i, k], 3, L1, L2).
L1 = [a, b, c]
L2 = [d, e, f, g, h, i, k]
Пример:
? — срез ([a, b, c, d, e, f, g, h, i, k], 3,7, L).
X = [c, d, e, f, g]
? — повернуть ([a, b, c, d, e, f, g, h], 3, X).
X = [d, e, f, g, h, a, b, c]
? — повернуть ([a, b, c, d, e, f, g, h], — 2, X).
X = [g, h, a, b, c, d, e, f]
Совет: используйте предварительно определенные предикаты length / 2 и append / 3, а также результат проблемы P17.
? — remove_at (X, [a, b, c, d], 2, R).
Х = Ь
R = [a, c, d]
? — insert_at (альфа, [a, b, c, d], 2, L).
L = [a, alfa, b, c, d]
? — диапазон (4,9, л).
L = [4,5,6,7,8,9]
Пример:
? — rnd_select ([a, b, c, d, e, f, g, h], 3, L).
L = [e, d, a]
Совет: используйте встроенный генератор случайных чисел random / 2 и результат проблемы P20.
Пример:
? — rnd_select (6,49, L).
L = [23,1,17,33,21,37]
Подсказка: объедините решения задач P22 и P23.
? — rnd_permu ([a, b, c, d, e, f], L).
L = [b, a, d, c, e, f]
Подсказка: используйте решение задачи P23.
Пример:
? — комбинация (3, [a, b, c, d, e, f], L).
L = [a, b, c];
L = [a, b, d];
L = [a, b, e];
…
Пример:
? — group3 ([aldo, beat, carla, david, evi, flip, gary, hugo, ida], G1, G2, G3).
G1 = [aldo, beat], G2 = [carla, david, evi], G3 = [flip, gary, hugo, ida]
…
б) Обобщите приведенный выше предикат таким образом, чтобы мы могли указать список размеров групп, а предикат вернет список групп.
Пример:
? — группа ([aldo, beat, carla, david, evi, flip, gary, hugo, ida], [2,2,5], GS).
Gs = [[aldo, beat], [carla, david], [evi, flip, gary, hugo, ida]]
…
Обратите внимание, что нам не нужны перестановки членов группы; т.е. [[aldo, beat], …] то же самое решение, что и [[beat, aldo], …]. Тем не мение, мы делаем разницу между [[aldo, beat], [carla, david], …] и [[карла, давид], [альдо, бит], …].
Вы можете найти больше об этой комбинаторной задаче в хорошей книге. по дискретной математике под термином «полиномиальные коэффициенты».
Пример:
? — lsort ([[a, b, c], [d, e], [f, g, h], [d, e], [i, j, k, l], [m, n], [ о]], Л).
L = [[o], [d, e], [d, e], [m, n], [a, b, c], [f, g, h], [i, j, k, l] » ]
б) Мы снова предполагаем, что список (InList) содержит элементы, которые перечисляет себя. Но на этот раз цель состоит в том, чтобы отсортировать элементы InList в соответствии с их частотой длины ; я.е. по умолчанию где сортировка производится по возрастанию, размещаются списки с редкой длиной во-первых, позже появляются другие с более частой длиной.
Пример:
? — lfsort ([[a, b, c], [d, e], [f, g, h], [d, e], [i, j, k, l], [m, n], [ о]], Л).
L = [[i, j, k, l], [o], [a, b, c], [f, g, h], [d, e], [d, e], [m, n] » ]
Обратите внимание, что в приведенном выше примере первые два списка в результате L имеют длину 4 и 1, обе длины появляются только один раз. Третий и четвертый список имеет длину 3 и появляется два списка этого длина.И, наконец, последние три списка имеют длину 2. Это самая частая длина.
Бинарное дерево либо пусто, либо состоит из корня.
элемент и два преемника, которые сами являются бинарными деревьями.
В Прологе мы представляем пустое дерево атомом ‘nil’ и
непустое дерево термином t (X, L, R), где X обозначает корень
node, а L и R обозначают левое и правое поддерево соответственно.
Таким образом, пример дерева, изображенный напротив, представлен
следующий термин Пролога:
Вы можете проверить свои предикаты, используя эти примеры деревьев.Они есть даны как контрольные примеры в p54.pl.
Пример:
? — istree (t (a, t (b, nil, nil), nil)).
Есть
? — istree (t (a, t (b, nil, nil))).
№
Напишите предикат cbal_tree / 2 для построения полностью сбалансированного
бинарные деревья для заданного количества узлов. Предикат должен
генерировать все решения с помощью поиска с возвратом. Поставьте букву ‘x’
как информацию во все узлы дерева.
Пример:
? — cbal_tree (4, T).
T = t (x, t (x, nil, nil), t (x, nil, t (x, nil, nil)));
T = t (x, t (x, nil, nil), t (x, t (x, nil, nil), nil));
и т.д …… №
Пример:
? — конструкция ([3,2,5,7,1], T).
T = t (3, t (2, t (1, nil, nil), nil), t (5, nil, t (7, nil, nil)))
Затем используйте этот предикат для проверки решения задачи P56.
Пример:
? — test_symmetric ([5,3,18,1,4,12,21]).
Есть
? — test_symmetric ([3,2,5,7,4]).
№
? — sym_cbal_trees (5, Ts).
Ts = [t (x, t (x, nil, t (x, nil, nil)), t (x, t (x, nil, nil), nil)), t (x, t (x, t (x, nil, nil), nil), t (x, nil, t (x, nil, nil)))]
Сколько существует таких деревьев с 57 узлами? Узнайте о сколько существует решений для данного количества узлов? Что, если число четное? Напишите соответствующий предикат.
Напишите предикат hbal_tree / 2 для построения сбалансированной по высоте
бинарные деревья для заданной высоты. Предикат должен
генерировать все решения с помощью поиска с возвратом. Поставьте букву ‘x’
как информацию во все узлы дерева.
Пример:
? — hbal_tree (3, T).
T = t (x, t (x, t (x, nil, nil), t (x, nil, nil)), t (x, t (x, nil, nil),
t (x, nil, nil)));
T = t (x, t (x, t (x, nil, nil), t (x, nil, nil)), t (x, t (x, nil, nil),
ноль));
и т.п…… Нет
Ясно, что MaxN = 2 ** H — 1. Однако каково минимальное количество MinN? Этот вопрос больше трудный. Попробуйте найти рекурсивный оператор и превратить его в предикат minNodes / 2 определяется следующим образом:
% minNodes (H, N): — N — минимальное количество узлов в
сбалансированное по высоте двоичное дерево высоты H.
(integer, integer), (+ ,?)
С другой стороны, мы можем спросить: какова максимальная высота H a может иметь сбалансированное по высоте двоичное дерево с N узлами?
% maxHeight (N, H): — H — максимальная высота сбалансированного по высоте
двоичное дерево с N узлами
(integer, integer), (+ ,?)
Теперь мы можем приступить к основной проблеме: построить все сбалансированные по высоте двоичные деревья с заданным числом узлов.
% hbal_tree_nodes (N, T): — T — это двоичное дерево со сбалансированной высотой с N узлов.
Узнайте, сколько деревьев со сбалансированной высотой существует для N = 15.
% count_leaves (T, N): — двоичное дерево T имеет N листьев
% листьев (T, S): — S — список всех листьев двоичного дерева T
% внутренних компонентов (T, S): — S — список внутренних узлов бинарное дерево T.
% на уровне (T, L, S): — S — список узлов двоичного дерева T на уровне L
Используя atlevel / 3, легко построить предикат levelorder / 2 который создает последовательность узлов в порядке уровней.Тем не мение, есть более эффективные способы сделать это.
В частности, в качестве структур данных используются полные двоичные деревья. (или схемы адресации) для кучи.
Мы можем присвоить номер адреса каждому узлу в полном двоичное дерево путем перечисления узлов в порядке уровней, начиная с в корне с номером 1. При этом мы понимаем, что для каждый узел X с адресом A имеет следующее свойство: Адреса левого и правого последователей X: 2 * A и 2 * A + 1, соответственно, предполагаемые преемники действительно существуют.Этот факт может использоваться для элегантного построения полной бинарной древовидной структуры. Напишите предикат complete_binary_tree / 2 со следующим Технические характеристики:
% complete_binary_tree (N, T): — T — полное двоичное дерево с N узлов. (+ ,?)
Проверьте свой предикат соответствующим образом.
В этой стратегии компоновки положение узла v получается по следующим двум правилам:
- x (v) равно положению узла v в в порядке последовательность
- y (v) равно глубине узла v в дерево
Чтобы сохранить положение узлов, мы расширяем Пролог термин, представляющий узел (и его преемников) следующим образом:
% nil представляет собой пустое дерево (как обычно)
% t (W, X, Y, L, R) представляет (непустое) двоичное дерево с корнем
W «позиционируется» в (X, Y) и поддеревья L и R
Запишите предикат layout_binary_tree / 2 со следующим Технические характеристики:
% layout_binary_tree (T, PT): — PT — это «позиционируемый» двоичный файл дерево, полученное из двоичного дерева T.(+ ,?)
Проверьте свой предикат соответствующим образом.
Используйте те же соглашения, что и в задаче P64, и проверьте свой
предикат соответствующим образом.
Используйте те же соглашения, что и в задаче P64 и P65 и проверьте свой предикат соответствующим образом. Примечание: это сложная проблема. Не сдавайся слишком рано!
Какой макет вам больше всего нравится?
Кто-то представляет бинарные деревья как строки следующий тип (см. пример напротив):
a (b (d, e), c (, f (g,)))
a) Напишите предикат Prolog, который генерирует эту строку представление, если дерево задано как обычно (как nil или t (X, L, R) член).Затем напишите предикат, который делает это обратное; т.е. учитывая строковое представление, построить дерево в обычном виде. Наконец, объедините два предиката в одном предикате tree_string / 2, который можно использовать в обоих направлениях.
б) Напишите тот же предикат tree_string / 2, используя списки различий и единственный предикат tree_dlist / 2, который выполняет преобразование между деревом и списком различий в обоих направлениях.
Для простоты предположим, что информация в узлах является одной
буква и в строке нет пробелов.
а) Напишите предикаты preorder / 2 и inorder / 2, которые создают последовательность предварительного и неупорядоченного заданного двоичного дерева, соответственно.Результатом должны быть атомы, например ‘abdecfg’ для последовательности предварительного заказа примера в задаче P67.
б) Можете ли вы использовать preorder / 2 из проблемной части а) в обратном порядке? направление; т.е. учитывая последовательность предварительного заказа, построить соответствующее дерево? Если нет, примите необходимые меры.
c) Если и предварительная, и неупорядоченная последовательность даны узлы двоичного дерева, затем дерево определяется однозначно.Напишите предикат pre_in_tree / 3, который работа.
г) Решите проблемы от a) до c), используя списки различий. Прохладный! Использовать предопределенное время предиката / 1 для сравнения решений.
Что произойдет, если один и тот же символ появится более чем в одном узле. Попробуйте, например, pre_in_tree (aba, baa, T).
В Прологе мы представляем многостороннее дерево термином t (X, F), где X обозначает
корневой узел, а F обозначает лес деревьев-преемников (список Пролога).
Таким образом, пример дерева, изображенный напротив, представлен
следующий термин Пролога:
Есть несколько способов представления графиков в Прологе. Один из способов — представлять каждое ребро отдельно как одно предложение (факт). В этой форме график, изображенный ниже, представлен в виде следующего предиката:
Третий метод представления — связать с каждым узлом набор узлов, которые примыкают к этому узлу.Мы называем это форма списка смежности . В нашем примере:
Когда ребра направлены на , мы называем их дугами . Эти
представлены заказанными парами. Такой граф называется ориентированный граф . Для представления ориентированного графа формы
рассмотренные выше немного изменены. Пример графика напротив
представлен следующим образом:
Наконец, к графикам и орграфам может быть добавлена дополнительная информация.
узлам и ребрам (дугам).Для узлов это не проблема, так как мы можем
легко заменить односимвольные идентификаторы произвольным составным
такие термины, как город (‘Лондон’, 4711). С другой стороны, для
рёбер мы должны расширить наши обозначения. Графики с дополнительной информацией
прикрепленные к ребрам, называются помеченными графами .
Подсказка: представьте позиции ферзей в виде списка чисел 1..N. Пример: [4,2,7,3,6,8,5,1] означает, что ферзь в первом столбце находится в строке 4, ферзь во втором столбце находится в строке 2 и т. д. Используйте парадигму генерации и тестирования.
Подсказки: представляйте квадраты парами их координат форма X / Y, где X и Y являются целыми числами от 1 до N.(Обратите внимание, что ‘/’ — это просто удобный функтор, а не деление!) Определите скачок отношения (N, X / Y, U / V), чтобы выразить тот факт, что a конь может прыгать с X / Y на U / V на шахматной доске NxN. И наконец, представить решение нашей задачи в виде списка из N * N рыцарей позиции (рыцарский тур).
В любом случае головоломка выглядит так: дано дерево с N узлами (и, следовательно, N-1 ребро). Найдите способ пронумеровать узлы от 1 до N и соответственно ребра от 1 до N-1 таким образом, чтобы для для каждого ребра K разность номеров его узлов равна K. Предполагается, что это всегда возможно.
Для небольших деревьев проблему легко решить вручную.Однако для деревья побольше, а 14 уже очень большие, это крайне сложно найти решение. И помните, мы не знаем наверняка, есть ли всегда решение!
Напишите предикат, который вычисляет схему нумерации для данного дерево. Как можно решить проблему с большим деревом, изображенным выше?
% идентификатор (Str): — Str — допустимый идентификатор
Постановка проблемы Решение .. 4 | 8. . | . 1 7 9 3 4 | 8 2 5 | 6 1 7 | | | | 6 7. | 9. . | . . . 6 7 2 | 9 1 4 | 8 5 3 | | | | 5. 8 | . 3. | . . 4 5 1 8 | 6 3 7 | 9 2 4 -------- + --------- + -------- -------- + --------- + ---- ---- 3. . | 7 4. | 1. . 3 2 5 | 7 4 8 | 1 6 9 | | | | .6 9 | . . . | 7 8. 4 6 9 | 1 5 3 | 7 8 2 | | | | . . 1 | . 6 9 | . . 5 7 8 1 | 2 6 9 | 4 3 5 -------- + --------- + -------- -------- + --------- + ---- ---- 1. . | . 8. | 3. 6 1 9 7 | 5 8 2 | 3 4 6 | | | | . . . | . . 6 | . 9 1 8 5 3 | 4 7 6 | 2 9 1 | | | | 2 4.| . . 1 | 5. . 2 4 6 | 3 9 1 | 5 7 8
Каждое место в головоломке принадлежит (горизонтальному) ряду и (вертикальному) столбец, а также к одному единственному квадрату 3×3 (который мы называем «квадратом» коротко). Вначале некоторые пятна содержат однозначную число от 1 до 9. Задача состоит в том, чтобы заполнить недостающие места цифр таким образом, чтобы каждое число от 1 до 9 появлялось точно один раз в каждой строке, в каждом столбце и в каждом квадрате.
Головоломка выглядит так: по сути, каждая строка и столбец прямоугольное растровое изображение аннотируется соответствующей длиной его четкие цепочки занятых ячеек. Человек, решающий загадку должен завершить растровое изображение, учитывая только эти длины.
Формулировка проблемы: Решение: | _ | _ | _ | _ | _ | _ | _ | _ | 3 | _ | X | X | X | _ | _ | _ | _ | 3 | _ | _ | _ | _ | _ | _ | _ | _ | 2 1 | X | X | _ | X | _ | _ | _ | _ | 2 1 | _ | _ | _ | _ | _ | _ | _ | _ | 3 2 | _ | X | X | X | _ | _ | X | X | 3 2 | _ | _ | _ | _ | _ | _ | _ | _ | 2 2 | _ | _ | X | X | _ | _ | X | X | 2 2 | _ | _ | _ | _ | _ | _ | _ | _ | 6 | _ | _ | X | X | X | X | X | X | 6 | _ | _ | _ | _ | _ | _ | _ | _ | 1 5 | X | _ | X | X | X | X | X | _ | 1 5 | _ | _ | _ | _ | _ | _ | _ | _ | 6 | X | X | X | X | X | X | _ | _ | 6 | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | _ | X | _ | _ | _ | 1 | _ | _ | _ | _ | _ | _ | _ | _ | 2 | _ | _ | _ | X | X | _ | _ | _ | 2 1 3 1 7 5 3 4 3 1 3 1 7 5 3 4 3 2 1 5 1 2 1 5 1В приведенном выше примере проблема может быть указана в виде двух списков [[3], [2,1], [3,2], [2,2], [6], [1,5], [6], [1], [2]] и [[1,2], [3,1], [1,5], [7,1], [5], [3], [4], [3]], которые дают «сплошные» длины строк и столбцов, сверху вниз и слева направо соответственно.Опубликованные головоломки крупнее этой пример, например 25 x 20, и, видимо, всегда есть уникальные решения.
Конкретный кроссворд указывается в текстовом файле, который сначала перечисляет слова (по одному слову в строке) в произвольном порядке.Потом, после пустой строки определяется структура кроссворда. В этом спецификация фреймворка, представлена пустая позиция символа точкой (.). Чтобы облегчить решение, расположение персонажей также может содержать предопределенные символьные значения. Загадка напротив определяется в файле p99a.dat, другие примеры это p99b.dat и p99d.dat. Также есть пример пазла (p99c.dat) который не имеет решения.
Слова — это строки (списки символов), состоящие как минимум из двух символов.Горизонтальная или вертикальная последовательность знаков в
каркас кроссворда называется сайт .
Наша задача — найти совместимый способ размещения слов на сайтах.
Подсказки: (1) Задача непростая. Вам понадобится время, чтобы
досконально это понять. Так что не сдавайтесь слишком рано! И помни
что цель — чистое решение, а не просто быстрый и грязный взлом!
(2) Чтение файла данных — сложная проблема, решение которой
предоставляется в файле
p99-файл чтения.пл. Используйте предикат
read_lines / 2.
(3) По соображениям эффективности это важно, по крайней мере, для
пазлы большего размера, чтобы отсортировать слова и сайты в определенном порядке.
Для этой части проблемы решение
P28 может быть очень полезным.
Обучение основам цифровой логики — теория, моделирование и внедрение
После того, как учащиеся получат понимание посредством моделирования цифровой логики, они могут продолжить это обучение, установив оборудование на Digilent Educational.
В этом руководстве будет представлен пример того, как студенты могут создать программируемую логическую схему (PLD) и развернуть ее на оборудовании Digilent. Учебное пособие было написано с использованием платы Digilent Nexys 3, но процесс одинаков для всех карт Digilent.
В учебном пособии «Начало работы с платами Digilent в Multisim» рассказывается о процессе создания схемы PLD для используемой вами платы Digilent.
- Создайте новую схему PLD для вашей платы Digilent.Подробности этого процесса можно найти в разделе «Приступая к работе с платами Digilent в Multisim». Во время создания выберите Снимите все отметки со всех при выборе клемм ввода-вывода для включения в схему.
- В этом руководстве мы собираемся создать пример, который позволит студентам понять функциональность логических вентилей ИЛИ, И и НЕ. Чтобы добавить IO в схему, выберите входной или выходной соединитель на панели инструментов PLD.Нажмите кнопку входного разъема .
- Это отобразит диалоговое окно входного разъема и предоставит список всех входов-выходов на плате Digilent, которые были назначены в качестве входа. Из списка выберите switch 0 (sw_0) и нажмите OK. Разместите терминал на схеме.
- Повторите процесс, чтобы добавить вход для переключателя 1 (sw_1).
- Используя кнопку выходного разъема, создайте выходной терминал для светодиода 0 (LED_0).
- Откройте базу данных компонентов (щелкните правой кнопкой мыши> Поместить компонент) и поместите логический элемент И с двумя входами.
База данных : Основная база данных
Группа : PLD Logic
Семейство : LOGIC_GATES
Компонент : AND2
- Повторите этот процесс, чтобы добавить входы, выходы и логические элементы, чтобы продемонстрировать элементы ИЛИ и НЕ.Это создаст схему, подобную изображению ниже.
- После создания схемы мы готовы развернуть логическую схему на плате Digilent, чтобы учащиеся могли физически манипулировать переключателями и просматривать реакцию на светодиодах. Полную информацию о развертывании на картах Digilent можно найти в Приступая к работе с платами Digilent в Multisim. Выберите: Передача »Экспорт в PLD в строке меню. Здесь вы увидите три варианта экспорта.Мы хотим экспортировать на физическое оборудование, поэтому выберите Program the Connected PLD . Нажмите «Далее.
- Выберите инструмент Xilinx , чтобы скомпилировать проект Multisim PLD в файл программирования. Если вы установили Xilinx ISE Tools в расположение по умолчанию, они должны автоматически заполниться. В противном случае щелкните раскрывающееся меню инструмента Xilinx , выберите Выбрать инструмент вручную, , а затем перейдите к папке с файлами, в которой были установлены инструменты. Файл ограничений пользователя Xilinx содержит направления, которые сопоставляют разъемы в Multisim с контактами Xilinx FPGA, номер детали XC6SLX16.
- На этом этапе вы должны подключить плату Digilent к вашему компьютеру. Чтобы проверить, соблюдены ли все требования и правильно ли устройство подключено к Multisim, нажмите кнопку Обновить . Если плата обнаружена, в статусе устройства отображается «Обнаружено» — Дата и время, , как показано ниже.
- Чтобы продолжить, нажмите Готово . Это начинает 11-шаговый процесс программирования PLD.Multisim автоматически вызывает инструменты Xilinx ISE (создает проект Xilinx, проверяет синтаксис, переводит, размещает и маршруты, создает файл программирования и т. Д.).
- После того, как код был сгенерирован и размещен на доске Digilent, ученик может переключать переключатели и просматривать ответ на встроенных светодиодах.
Используя традиционные инструменты обучения, практический подход к изучению булевой логики невозможен, пока студенты не пройдут более продвинутые курсы, обучающие их языкам описания оборудования (например,VHDL). Моделирование Multisim, схемы PLD и поддержка Digilent представляют собой комплексное решение, позволяющее учащимся учиться посредством экспериментов.
Логическое выражение — обзор
5.1 Спецификации на основе состояний
Спецификации на основе состояний описывают программные системы с точки зрения состояний и влияния операций на состояния. Такие спецификации поддерживаются несколькими языками спецификаций, которые мы сгруппировали в два набора: классические языки спецификации, такие как Z [23], B [24] и VDM [25], и языки утверждений, такие как Eiffel [26], JML. (Язык моделирования Java) [27] и таблицы Петерса и Парнаса [28].В то время как классические языки спецификации определяют состояния и переходы независимо от реализации, языки утверждений определяют состояния и переходы как операторы или аннотации исходной программы.
Спецификации на основе состояний используются в качестве тестовых оракулов, проверяя соответствие выполнения тестов спецификациям. Основная проблема при создании тестовых оракулов из спецификаций на основе состояний возникает из-за различных уровней абстракции между спецификациями и операциями, отслеживаемыми во время выполнения теста; таким образом, спецификации операций будут переведены в проверяемую форму.Языки спецификации обычно достаточно выразительны, чтобы представлять различные структуры данных и свойства на основе состояний, но их выразительность усложняет перевод в исполняемую форму. Часто при переводе делаются некоторые упрощающие допущения, такие как ограничение бесконечных множеств, например бесконечное множество натуральных чисел, и обработка невыполнимых элементов только частично и иногда требует некоторого вмешательства человека.
Здесь мы обсуждаем основные подходы к переводу спецификаций на основе состояний в исполняемую форму.Перевод спецификаций Z, B и VDM представляет те же проблемы, связанные с бесконечными структурами данных, частично определенными выражениями и объектно-ориентированными структурами. Перевод Eiffel, JML и других языков утверждений в проверяемую форму представляет аналогичные проблемы, но на другом уровне абстракции. Далее мы представляем основные подходы к переводу спецификаций на основе состояний в проверяемую форму со ссылкой на Z; подходы для других языков аналогичны. Затем мы обсуждаем проблемы компиляции утверждений в исполняемые проверки со ссылкой на таблицы Эйфеля, JML и Петерса и Парнаса.
Компилятор предикатов схемы, предложенный Микком [29], компилирует спецификации Z в код C. Для каждой схемы Z , которая является базовой единицей в Z, подход генерирует функцию C, которая оценивает предикаты схемы, используя состояние программы, переданное функции в качестве параметра. Сгенерированный код оценивает предикаты схемы с помощью стратегии «грубой силы»: при заданном состоянии код по существу заменяет выражения их значениями, оценивает формулы исчисления высказываний с помощью таблиц истинности и оценивает количественные характеристики и конструкции множеств путем повторения данных. конструкции.Чтобы снизить сложность сгенерированных функций C, подход предлагает шаг оптимизации до , гарантирующий, что сгенерированный код C всегда завершает . Для оптимизации кода метод определяет «исполняемое» подмножество языка Z. Подмножество состоит из конечных предикатов, таких как формулы исчисления высказываний, количественная оценка по конечным множествам и конструкции множеств, основанные на конечной итерации. Этот метод расширяет набор исполняемых предикатов набором правил для преобразования специальных невыполнимых предикатов, удовлетворяющих определенным условиям, в исполняемые без изменения их семантики.Например, следующие два правила исключают кванторы:
∀x: M • PM ≠ ∅⇒PNotOccurxP∃x: M • PM ≠ ∅∧PNotOccurxP
, где M — это набор, переменная x представляет собой элемент в M и P является предикатом. Оператор •, также известный как «точка обозначения Z», означает «такой, что» при использовании с квантификатором ∃ и «тот» при использовании с квантором. Например, ∃ x : M • P означает, что существует по крайней мере значение x в M такое, что предикат P равен истинному .Условие NotOccur ( x , P ) указывает, что x не является свободной переменной в предикате P . Хотя набор M может быть бесконечным, компилятор все еще может компилировать спецификации с использованием квантификаторов выше M , если кванторы могут быть исключены путем применения вышеуказанных правил. Для пользовательских функций, которые могут быть представлены аксиоматическими или универсальными определениями, компилятор требует, чтобы пользователь предоставил соответствующий код.Mikk предлагает также решение проблемы частично определенных спецификаций. Он использует VDM-SL в качестве промежуточной формы и компилятор VDM-SL, разработанный Шмидтом и Хёрхером для перевода спецификаций Z в код C [30]. При работе с частично определенными выражениями, то есть функциями или отношениями, которые могут оценивать undefined (обозначается как ⊥) при оценке вне их домена определения, подход генерирует обработчики исключений.
Объектно-ориентированные расширения Z, такие как Object-Z, усугубляют проблему.Макдональд и др. переводит спецификации контейнерных классов Ojbect-Z в код C ++ в три этапа: оптимизация, структурное отображение и трансляция предикатов [31]. На этапе оптимизации они перестраивают спецификацию, чтобы упростить последующий преобразование, с помощью нескольких этапов, включая замену постоянных переменных их значениями и удаление вторичных переменных и обогащения схемы. На этапе структурного сопоставления они сопоставляют структуры в спецификации Object-Z с соответствующими элементами кода: константы и переменные спецификации — с переменными с правильной инициализацией, а типы переменных — с примитивными типами C ++ или соответствующими классами в библиотеке Z toolkit, используемой методикой. .Например, они сопоставляют целочисленный и логический типы с int, а тип целого числа задается как z_set
На этапе трансляции предикатов метод фокусируется на том, как сгенерировать код для проверки состояния программы, а не на оценке предикатов. Например, перевод не позволяет функции inv () вызывать любую другую функцию-член, чтобы избежать бесконечной рекурсии.В конструкторе инвариант класса проверяется при его выходе.
Ричардсон и др. [32] фокусируется на системах, критичных ко времени, имеет дело с комбинацией Z и логики временных интервалов и предлагает перевод спецификаций в тестовые оракулы посредством символической интерпретации. Символьная интерпретация присваивает символические имена в спецификациях входным сигналам стимула и переменным начального состояния, ссылаясь на сопоставления данных и управления. Затем символьная интерпретация интерпретирует каждый путь управления в спецификациях, то есть создает утверждение, выражающее условие для данных спецификации на основе символьного состояния в каждой контрольной точке спецификации.Контрольная точка спецификации — это релевантный элемент, такой как параметризованное событие, переход и операция. После символической интерпретации спецификации Z информация оракула представляется в виде списка соответствующих Z-схем и их соответствующих утверждений, которые проверяются при вызове схемы. Выполнение тестового примера относится к конкретному входному тесту, из которого конкретные переменные и события привязаны к своим аналогам в тестовом классе (каждый тестовый класс является разделом тестового входа).Выполнение тестового примера создает профиль выполнения, а конкретные события и значения переменных, содержащиеся в профиле выполнения, отображаются на уровень оракула для проверки их согласованности с информацией оракула.
Языки утверждений объединяют спецификации с исходным кодом, таким образом упрощая, но не устраняя проблему перевода. Утверждения поддерживаются разными языками и методологиями. Дизайн по контракту [33] — это парадигма разработки программного обеспечения, которая постулирует совместную разработку кода и утверждений.Дизайн по контракту был предложен Мейером и полностью поддерживается языком программирования Eiffel [26]. В отличие от языков общих спецификаций, таких как Z, спецификации в Eiffel, называемые контрактами , объединены в исходный код и определяют обязательств и преимуществ программных компонентов, которые взаимодействуют через хорошо спроектированные интерфейсы. На языках, поддерживающих контракты, обязательства и выгоды клиентов выражаются как до и постусловия поставщиков услуг.Исходный код обогащен инвариантами , которые представляют свойства состояния, которые должны сохраняться во время любого взаимодействия.
Контракты распространены на многие языки. iContract был первым инструментом для поддержки контрактов на Java [34]. В iContract контракты записываются в виде комментариев кода со специальными тегами. Контракты, поддерживаемые iContract, представляют собой логические выражения, совместимые с синтаксисом Java, за исключением нескольких синтаксических расширений, которые включают универсальную количественную оценку (∀), экзистенциальную количественную оценку (∃) и импликацию (→).Эти расширения предназначены для упрощения их перевода в код Java. Например, синтаксис ∀ следующий: forall
Помимо простого преобразования логических выражений, iContract решает проблемы, связанные с жизненным циклом объекта, областью действия переменных и наследованием, большинство из которых специфичны для объектно-ориентированного программирования. Наиболее важные правила, относящиеся к жизненному циклу объекта, следующие:
- 1.
В конструкции объекта предварительные условия должны проверяться в начале построения, в то время как инварианты и постусловия проверяются только в том случае, если строительство завершается нормально (без исключений).
- 2.
Для обычных вызовов методов для объектов предварительные и постусловия проверяются при входе и выходе вызываемых методов, а инварианты не проверяются для частных методов.
- 3.
При уничтожении объекта проверки не требуется. Таким образом, в методы finalize () не вставляется проверочный код.
Предикаты, используемые в постусловиях, часто относятся как к возвращаемому значению метода, так и к «старому» значению (или «входному значению») некоторых переменных.iContract синтезирует псевдопеременную, называемую return, для представления возвращаемого значения, сохраняет значения переменных в записи и делает их доступными как имена переменных с постфиксом @pre. выражений, их объектные ссылки сохраняются напрямую. iContract позволяет вызывать методы участников в контрактах. В результате возможны бесконечные рекурсии при проверке инвариантов. Чтобы решить эту проблему, iContract отслеживает глубину рекурсии для каждого объекта в каждом потоке и проверяет только инварианты с глубиной 0.Механизмы расширения типов в Java имеют несколько последствий для обработки контрактов типов. iContract распространяет контракты в соответствии со следующими правилами:
- 1.
Инварианты соединяются, то есть инвариантом подтипа является конъюнкция инвариантов всех его супертипов.
- 2.
Постусловия соединяются, то есть постусловие подтипа является соединением постусловий всех его супертипов.
- 3.
Предусловия разъединены, то есть предусловие подтипа является дизъюнкцией предусловий всех его супертипов.
JML — популярный язык поведенческой спецификации, который поддерживает проектирование по контракту в Java [27]. Контракты JML в Java имеют форму специальных комментариев. JML выражает предусловия, постусловия и инварианты в виде логических выражений, которым предшествуют ключевые слова requires, requires и инвариантные соответственно, и использует встроенный метод \ old (x) для представления значения x перед операцией.Подобно обозначению ▵ в Z, JML предоставляет ключевое слово модифицирует, чтобы указать переменные, которые изменяются в теле метода. Кроме того, JML имеет дело с несколькими объектно-ориентированными функциями, такими как видимость и наследование.
JML является основой многих подходов к тестированию генерации оракулов. Бхоркар предложил метод перевода контрактов JML в утверждения Java [35]. Хотя этот метод поддерживает только предварительные условия, он решает проблемы, связанные с переменными только для спецификации, уточнением, наследованием спецификаций и конфиденциальностью.Подобно iContract, метод обрабатывает наследование контрактов путем объединения и разделения контрактов в соответствии с их типами. В этом методе также используется хеш-таблица (для каждого потока), чтобы избежать рекурсий при проверке во время выполнения. Выражения, использующие квантификаторы, рассматриваются этой техникой как невыполнимые, и для таких выражений не создается код Java.
Корат предложил метод генерации тестовых примеров и оракулов из спецификаций JML [36]. Метод Кората генерирует тестовые примеры из предусловий и инвариантов и оракулы из постусловий и инвариантов.Araujo et al. расширил JML, добавив параллельные контракты, и предложил поддержку во время выполнения, чтобы включить во время выполнения проверку утверждений, которые определяют параллельные свойства [37].
Петерс и Парнас представили подход для генерации тестовых оракулов из формальной документации [28,38]. Документация представлена в табличной форме, состоящей из отношений, определяющих интерфейсы процедур, и переведена в оракулы в коде C и C ++. Основной элемент формальной документации состоит из выражений предикатов, написанных в варианте логики предикатов со специальными конструкциями для работы с частичными функциями.Подобно другим основанным на спецификациях техникам оракулов, этот метод обрабатывает кванторы, ограничивая их конечными наборами.
Чтобы включить итерации по наборам элементов с кванторами, Петерс и Парнас вводят индуктивно определенных предикатов . Для набора S (для использования в квантификации) индуктивно определенный предикат P определяется с тремя элементами: I , G и Q . Исходный набор I содержит конечное число элементов, G — это функция, называемая «функцией генератора», которая генерирует элементы в наборе, а Q — это предикат, который характеризует свойства набора.Набор S определяется как наименьший набор , построенный на индуктивных шагах ниже:
- 1.
S 0 = I
- 2.
797 S n + 1 = S n ∪ { G ( x ) | x ∈ S n ∧ Q ( x )}
I , G и Q должны быть определены для удовлетворения особого условия, которое гарантирует, что построенный множество S конечно [28,38].
Петерс и Парнас предлагают подход для перевода табличной документации в код C [28]. Поскольку форма используемых в документации выражений четко определена, перевод выполняется систематически.
Другие спецификации на основе состояний также используются для получения тестовых оракулов. Модели UML обычно неформальны; тем не менее, Bouquet et al. [39] определил подмножество UML 2.