Нет, в C# нет встроенного оператора импликации. Его можно реализовать с помощью стандартных операторов:
Импликация: !a || b ,
Обратная импликация: a || !b .
Дополнительно: операторы C# на msdn.
Отслеживать
ответ дан 22 авг 2019 в 7:27
744 4 4 серебряных знака 18 18 бронзовых знаков
- c#
- логика
- информатика
- логические-выражения
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com
Импликация (логическое следование) и Эквиваленция. [Алгебра логики] #3
Есть ли логический оператор импликации в python?
TTL согласен — но это не обязательно так легко увидеть в коде, хотя и проще, чем оригинал. Функция, т. implies(x, y) может помочь в передаче идеи больше, если такая конструкция встречается достаточно часто, чтобы оправдать имя.
user2246674 06 май 2013, в 19:39
Gareth Latty 06 май 2013, в 19:42
en.wikipedia.org/wiki/Material_nonimplication также эквивалентен p and not(q)
Sylvain 15 янв. 2019, в 10:36
Показать ещё 2 комментария
В вашем вопросе спрашивается, существует ли для Python один логический оператор, простой ответ — нет: Документы перечисляют логические операции, и Python просто не имеет ничего подобного.
Очевидно, что, как указывает ответ Juampi, существуют логически эквивалентные операции, которые немного короче, но без каких-либо отдельных операторов, как вы просили.
Gareth Latty 06 май 2013, в 19:54
Поделиться
Пожалуйста, посмотрите на этот ответ. Похоже, не все можно найти в документах .
running.t 18 нояб. 2015, в 10:11
Gareth Latty 22 нояб.
2015, в 14:03
Просто потому, что это смешно: x = > y может быть bool(x)
Adam Sosnowski 07 окт. 2015, в 16:11
Поделиться
И это (наконец-то) убедительное доказательство того, что True должно быть -1 а False должно быть 0 для логических значений! (Вместо текущего соглашения Python True == 1 ) Потому что тогда мы будем иметь x => y совпадающее с y
Mark Dickinson 07 окт. 2015, в 18:44
Существует оператор обратной импликации:
if y ** x: do_sth()
Это гласит: если y подразумевается x.
David Zaragoza 17 нояб. 2015, в 23:40
Поделиться
running.t 18 нояб. 2015, в 10:08
Gareth Latty 22 нояб.
2015, в 14:02
Дополнительные сведения, основанные на том, что я нашел здесь и там, когда я искал оператор импликации: вы можете использовать умный взлом, чтобы определить своих собственных операторов. Ниже приведен пример выполнения, аннотированный источниками, приводящими меня к этому результату.
Замена операции импликации || Как избавиться от импликации
#!/usr/bin/python # From http://code.activestate.com/recipes/384122/ (via http://stackoverflow.com/questions/932328/python-defining-my-own-operators) class Infix: def __init__(self, function): self.function = function def __ror__(self, other): return Infix(lambda x, self=self, other=other: self.function(other, x)) def __rlshift__(self, other): return Infix(lambda x, self=self, other=other: self.function(other, x)) def __or__(self, other): return self.function(other) def __rshift__(self, other): return self.function(other) def __call__(self, value1, value2): return self.function(value1, value2) from itertools import product booleans = [False,True] # http://stackoverflow.com/questions/16405892/is-there-an-implication-logical-operator-in-python # http://jacob.jkrall.net/lost-operator/ operators=[ (Infix(lambda p,q: False), «F»), (Infix(lambda p,q: True), «T»), (Infix(lambda p,q: p and q), «), (Infix(lambda p,q: p or q) , «V»), (Infix(lambda p,q: p != q) , «^»), (Infix(lambda p,q: ((not p) or not q)), «nad»), (Infix(lambda p,q: ((not p) and not q)), «nor»), (Infix(lambda p,q: ((not p) or q)), «=>»), ] for op,sym in operators: print «nTruth tables for %s» % sym print «nptqtp %s qtq %s p» % (sym,sym) for p,q in product(booleans,repeat=2): print «%dt%dt%dt%d» % (p,q,p |op| q,q |op| p) print «nptqtrtp %s qtq %s rt(p %s q) %s rtp %s (q %s r)tp %s q %s r» % (sym,sym,sym,sym,sym,sym,sym,sym) for p,q,r in product(booleans,repeat=3): print «%dt%dt%dt%dt%dt%dtt%dtt%d» % (p,q,r,p |op| q,q |op| r, (p |op| q) |op| r, p |op| (q |op| r), p |op| q |op| r) assert( (p |op| q) |op| r == p |op| q |op| r)
Источник: overcoder.net
Свойства. Импликация.
Свойства определяют отношение между логическими выражениями и последовательностями. Фактически, свойства описывают то, как будет проверяться выполнение последовательности или логического выражения:
- синхронно или асинхронно;
- не осуществлять проверку при наличии запрещающего сигнала (например, при активном сигнале сброса);
- осуществлять проверку только по условию (импликация).
В коде программы свойства описываются ключевыми словами property, endproperty:
Импликация (Implication)
Импликация очень часто применяется при построении утверждений. Это некое подобие оператора if. То, что слева оператора импликации, это условие. В качестве условия может быть булево выражение или последовательность. Если условие принимает значение истина, то начинает проверяться условие справа от значка импликации.
В SystemVerilog используется два вида импликации:
Рис. 15. а) Свойство с использованием перекрывающейся импликации; б) Свойство с использованием неперекрывающейся импликации
Если сравнить диаграммы на рис. 5 и рис. 15, то можно сделать вывод, что операторы «|->» и «|=>» эквивалентны задержкам в ##0 и ##1 тактов соответственно, но это не совсем так. Если в свойствах на рис.
15 заменить оператор «|->» на «##0», а оператор «|=>» на «##1», то в каждом такте будет проверяться, чтобы «a» было истинным. В этом случае для диаграмм, изображенных на рис. 15, свойства 1 и 2 при проверке на 2-4 тактах будут выдавать ошибки. Здесь целесообразно использовать импликацию, т.к. нам не нужно в каждом такте проверять истинность условия «a», нас интересует, чтобы условие «b» следовало за условием «a» только если «a» возникнет (станет истинным).
Справа от оператора импликации может использоваться конструкция «if/else». Предположим, у схемы, изображенной на рис. 1, есть режим «MODE1», в котором сигнал CMD_ACCEPT должен приходить только на следующем такте после появления на шине CMD команды. Во всех остальных режимах сигнал CMD_ACCEPT должен появляться в течение последующих трех тактов. С помощью конструкции «if/else» можно используя одно свойство осуществлять проверку генерации CMD_ACCEPT в режиме «MODE1» и в остальных режимах:
Свойства, как и последовательности, можно объединять с помощью логических операторов and и or. Помимо этого, в свойствах можно использовать логический оператор отрицания not:
Это свойство на каждом такте проверяет, чтобы не выполнялась последовательность seq1.
Источник: systemverilog.ru