Импликация в питоне как записать python

от admin

Есть ли логический оператор импликации в python?

Я хотел бы написать инструкцию в python с логической импликацией. Что-то вроде:

Конечно, я знаю, что могу использовать:

Но существует ли в этом случае логический оператор для python?

6 ответов

p => q совпадает с not(p) or q , поэтому вы можете попробовать это!

В вашем вопросе спрашивается, существует ли для Python один логический оператор, простой ответ — нет: Документы перечисляют логические операции, и Python просто не имеет ничего подобного.

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

Импликация в питоне как записать python

Конъю́нкция (от лат. conjunctio — «союз, связь») — логическая операция, по смыслу максимально приближенная к союзу «и»
Наиболее часто в заданиях будет отображаться как " /\ ", реже как " & ".
В питоне мы будем заменять на " and ".

Дизъю́нкция (от лат. disjunctio — «разобщение»), логи́ческое сложе́ние, логи́ческое ИЛИ, включа́ющее ИЛИ; иногда просто ИЛИ — логическая операция, по своему применению максимально приближённая к союзу «или» в смысле «или то, или это, или оба сразу».
Наиболее часто в заданиях будет отображаться как " /\ ", реже как " & ".
В заданиях №2 отображается как " \/ ", иногда " || ".
В питоне мы будем заменять на " or ".

Отрица́ние (инве́рсия, от лат. inversio — переворот, логи́ческое «НЕ») в логике — унарная операция над суждениями, результатом которой является суждение, «противоположное» исходному. Обозначается знаком ¬ перед или чертой — над суждением.
В питоне если перед переменной ¬ или — над суждением ставим переменную в скобки и перед ней ставим " not( ) ".

Имплика́ция (от лат. implicatio «связь; сплетение») — бинарная логическая связка, по своему применению приближенная к союзам «если…, то…».
Импликация записывается как посылка ⇒ следствие; применяются также стрелки другой формы и направленные в другую сторону, но всегда указывающие на следствие.
В коде заменяем на " <= ".

Логическая равнозначность или эквиваленция (или эквивале́нтность[1]) — это логическое выражение, которое является истинным тогда, когда оба простых логических выражения имеют одинаковую истинность. Двуместная логическая операция обычно обозначается символом ≡ или ↔.
В питоне обозначаем двумя знаками равно " == ".

᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌1) Прописываем print("x, y, z, w") — для того, чтобы когда мы видели, какая переменная
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌отвечает за какое значение.

᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌2) Задаём каждой переменной значение, которое она может принимать — " 0 " или " 1 "
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ (пишем in range(2) потому, что учитывается интервал от 0 до 2 не включительно, то есть
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌᠌ ᠌можно просто написать в скобках 2, а не in range(0, 2)

᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌3) Записываем условие с помощью " if ", дальше прописываем нашу функцию и значение
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌которое оно принимает:
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌* Если F = 0, то всё условие ставим в скобки и перед ними ставим not -> not(вся
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌функция). Также можно вставить функцию в скобки и написать после неё написать " ==
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌ ᠌False"
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌᠌ ᠌* Иначе F = 1, ничего не делаем с функцией; или ставим её в скобки, а в конце пишем "
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌ ᠌== True"

᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌4) Пишем print(x, y, z, w) и запускаем код, выведенные значения сопоставляем с ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌таблицей ᠌и правильно вписываем, строки с таблице не должны повторяться!

Алгебра логики в программировании

В статье «Алгебра логики» мы выучили основы этого непростого раздела математики. Разобравшись в той теме, пора пойти дальше и заговорить на понятном компьютеру языке — языке программирования.

Логические уравнения в Python

Как логические операторы записываются в программе Python и в чем их отличие?

Логические операторы в Python мы уже упоминали в статье «Основы программирования. Часть 2». Давайте их вспомним:

Проблема в том, что для импликации и эквиваленции нет специальных логических операторов, но для них можно использовать математические:
— Математическое сравнение на равенство работает также, как логическая эквиваленция: вернет True, если значения будут одинаковые и False в противном случае.
— Математическое “меньше или равно” полностью соответствует логическому следованию: False будет возвращено только в том случае, если значение слева будет меньше или равно значению справа. А если вспомнить аналогию логических переменных и целых чисел, это произойдет только в ситуации 1 <= 0. В остальных случаях будет истина.

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

  • простое логическое уравнение только из конъюнкции, дизъюнкции и инверсии в лишних скобках не нуждается (кроме тех, конечно, что уже есть в уравнении):
  • при появлении импликации и эквиваленции подключаем скобки, чтобы сохранить приоритет и этих, и других логических операторов:

Решение практических задач

Между программированием и алгеброй логики установлен довольно приятный союз:

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

А много нам и не надо:

  1. Нужен перебор логических переменных по совсем небольшому диапазону — от 0 до 1.
  2. Правильно записанное логическое уравнение, чтобы проверить его при каждом наборе истины и лжи.

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

Начнем с обобщенной задачи — построение таблицы истинности. На этом примере можно показать, что математические операторы путают приоритет логических. Так что давайте составим таблицу истинности для уравнения A ≡ B ∧ C ⇒ A.

Читать:
Alert tpm device is not detected dell что делать

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

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

Да, промежуточных результатов при такой реализации у нас нет. А зачем они нам? Нам важен итоговый результат — мы его получили.

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

В статье «Комбинаторика в информатике» мы обсуждали такую вещь, как модуль itertools, который содержит функции для работы с различными комбинациями. Как раз наш случай — мы используем различные комбинации 1 и 0.

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

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

Пожалуй, стоит подробнее рассказать про строку:
A, B, C = i.

Мы точно знаем, что i — это массив с 3 элементами, так как мы изначально задали создание наборов длиной 3. Если указать перед ним ровно столько же переменных, им можно присвоить соответствующие элементы массива в одну строку.

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

Не вышло: итоговые значения таблиц истинности разные. Значит, приоритет действительно нарушается.

Другая наша возможная цель — проверить, будет ли выражение истинным всегда? Получим ли мы истину при любом наборе логических переменных?

Как и в прошлый раз, у нас есть не один вариант реализации. Будем анализировать выражение А ∧ (В ∨ С) ≡ В.

Первый вариант:

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

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

Второй вариант — функция all. Она возвращает True, если все значения внутри нее равны True — как раз наш случай. Чтобы записать программу максимально коротко, прямо внутри нее можно прописать и уравнение, и перебор его элементов:

Здесь в переменную result записывается логическое значение True, если для всех наборов А, В, С из комбинаций d длиной 3 результат логического уравнения равен True. Если же среди всех результатов есть хоть один False — функция all даст нам False.

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

Python — гибкий язык. Если вам важнее видеть алгоритм работы кода более явно — используйте вложенные циклы, массивы для хранения значений и будьте более, чем на 100% уверены в каждом шаге. Если же вы хотите использовать дополнительные инструменты для сокращения объема кода и, как следствие, более быстрого его написания — вам в помощь комбинации product из itertools и инструменты массовой проверки all и any.

Фактчек

  • Для импликации и эквиваленции в Python используются математические операторы сравнения, что немного нарушает их общий приоритет. Сохранить его можно с помощью скобок.
  • Значения истины и лжи в Python являются логическим типом данных, который может принимать значение True или False и соответствует 1 и 0.
  • Функция all проверяет, все ли переданные ей значения истинны. Функция any проверяет, есть ли среди всех переданных значений хоть одно истинное.

Проверь себя

Задание 1.
Для выражения А ∨ В ∧ ¬(В ∧ А) выберите верную запись на языке Python (с сохранением порядка действий):

  1. A and B or not B or A
  2. A and B or not (B or A)
  3. A or B and not B and A
  4. A or B and not (B and A)

Задание 2.
Для выражения ¬А ⇒ В ≡ А ∧ В выберите верную запись на языке Python (с сохранением порядка действий):

  1. not (А <= В == А and В)
  2. not А <= В == (А and В)
  3. ((not A) <= B) == (A and B)
  4. (not А) <= (В == (А and В))

Задание 3.
Чему будет равен последний столбец таблицы истинности для уравнения:
A ∧ B ⇒ C ∧ D ∨ D ∧ A?

  1. 11101101
  2. 11101111
  3. 00000011
  4. 11000111

Задание 4.
Выберите уравнение, которое во всех случаях принимает значение истины:

  1. ¬(A ∧ B) ∧ ¬(C ∧ ¬A)
  2. ¬(A ∧ B) ∨ ¬(C ∧ ¬A)
  3. A ∧ B ∧ ¬(C ∧ ¬A)
  4. ¬(A ∧ B) ∨ ¬(C ∧ A)

Ответ: 1. — 4; 2. — 3; 3. — 1; 4. — 2.

Is there an implication logical operator in python?

I would like to write a statement in python with logical implication. Something like:

Of course, I know I could use:

But is there a logical operator for this in python?

8 Answers 8

p => q is the same as not(p) or q , so you could try that!

Just because it’s funny: x => y could be bool(x) <= bool(y) in python.

There is a converse implication operator:

This reads: If y is implied by x.

David Zaragoza's user avatar

Your question asks if there is a single logical operator for this in Python, the simple answer is no: The docs list boolean operations, and Python simply doesn’t have anything like that.

Obviously, as Juampi’s answer points out, there are logically equivalent operations that are a little shorter, but no single operators as you asked.

Additional details based on what I have found here and there as I was looking for an implication operator : you can use a clever hack to define your own operators. Here is a running example annotated with sources leading me to this result.

I would argue a more readable one-liner would be

In your original example:

I found XOR to be a good solution. you can change A implies B to not A or B. Then you use xor to negate A like this

Since A xor(^) 1 is equal to not A

You can use the comparison operator <= to get an implication for two variables. Examples:

Похожие статьи